From bd1a3c5aac09ce2b6f65261cdefa244eb3af9032 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Fri, 3 Oct 2014 16:35:47 +0200 Subject: [PATCH] Sync DrDump crash handler with TortoiseSVN codebase Based on TortoiseSVN rev. 25895. Signed-off-by: Sven Strickroth --- ext/CrashServer/CommonLibs/Log/log.cpp | 202 +- ext/CrashServer/CommonLibs/Log/log.h | 284 +- ext/CrashServer/CommonLibs/Log/log_media.h | 6 +- ext/CrashServer/CommonLibs/Log/synchro.h | 6 +- ext/CrashServer/CommonLibs/Stat/stat.cpp | 235 + ext/CrashServer/CommonLibs/Stat/stat.h | 62 + ext/CrashServer/CommonLibs/Version/version.h | 6 +- ext/CrashServer/CommonLibs/Version/version.rc | 2 +- ext/CrashServer/CommonLibs/Zlib/ZipUnzip.cpp | 228 +- ext/CrashServer/CommonLibs/Zlib/ZipUnzip.h | 24 +- ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj | 27 +- .../CommonLibs/Zlib/Zlib.vcxproj.filters | 68 +- .../CrashHandler/CrashHandler/CrashHandler.cpp | 397 +- .../CrashHandler/CrashHandler/CrashHandler.def | 3 +- .../CrashHandler/CrashHandler/CrashHandler.h | 300 +- .../CrashHandler/CrashHandler/CrashHandler.rc | 27 +- .../CrashHandler/CrashHandler/CrashHandler.vcxproj | 33 +- .../CrashHandler/CrashHandler.vcxproj.filters | 58 +- .../CrashHandler/CrashHandler/CrashHandlerExport.h | 9 +- .../CrashHandler/CrashHandler/projectinfo.h | 8 +- .../CrashHandler/CrashHandler/stdafx.cpp | 6 +- ext/CrashServer/CrashHandler/CrashHandler/stdafx.h | 7 +- .../CrashHandler/CrashHandler/targetver.h | 6 +- .../DumpUploaderServiceLib/DumpUploader3.wsdl | 1 + .../DumpUploaderServiceLib.vcxproj | 17 +- .../DumpUploaderServiceLib.vcxproj.filters | 31 +- .../DumpUploaderWebService.cpp | 42 +- .../DumpUploaderWebService.h | 17 +- ...ustomBinding_DumpUploadService3_Uploader.nsmap} | 12 +- .../generated/DumpUploader.h | 2086 ++- .../generated/UploaderSoap12.nsmap | 15 - .../DumpUploaderServiceLib/generated/soapC.cpp | 14343 +++++++++++++++---- ...tomBinding_DumpUploadService3_UploaderProxy.cpp | 446 + ...ustomBinding_DumpUploadService3_UploaderProxy.h | 89 + .../DumpUploaderServiceLib/generated/soapH.h | 3114 +++- .../DumpUploaderServiceLib/generated/soapStub.h | 1274 +- .../generated/soapUploaderSoap12Proxy.cpp | 294 - .../generated/soapUploaderSoap12Proxy.h | 61 - .../generated/soapUploaderSoapProxy.cpp | 294 - .../generated/soapUploaderSoapProxy.h | 61 - .../DumpUploaderServiceLib/gsoapWinInet-2.8.0.cpp | 1185 -- .../DumpUploaderServiceLib/gsoapWinInet.cpp | 168 +- .../DumpUploaderServiceLib/gsoapWinInet.h | 9 +- .../DumpUploaderServiceLib/make_service_stub.bat | 25 +- .../DumpUploaderServiceLib/replace_text.vbs | 15 + .../DumpUploaderServiceLib}/stdsoap2.cpp | 3685 +++-- .../DumpUploaderServiceLib}/stdsoap2.h | 614 +- ext/CrashServer/CrashHandler/SendRpt/Config.h | 33 +- .../CrashHandler/SendRpt/CrashProcessor.cpp | 1734 +-- .../CrashHandler/SendRpt/DoctorDump.cpp | 427 + ext/CrashServer/CrashHandler/SendRpt/DoctorDump.h | 178 + .../targetver.h => SendRpt/DumpUploader.h} | 24 +- .../CrashHandler/SendRpt/DumpWriter.cpp | 125 +- ext/CrashServer/CrashHandler/SendRpt/DumpWriter.h | 56 +- ext/CrashServer/CrashHandler/SendRpt/IniFile.cpp | 103 + .../{CrashHandler/stdafx.h => SendRpt/IniFile.h} | 33 +- .../CrashHandler/SendRpt/SendReportDlg.cpp | 16 +- .../CrashHandler/SendRpt/SendReportDlg.h | 63 +- ext/CrashServer/CrashHandler/SendRpt/SendRpt.cpp | 8 +- .../CrashHandler/SendRpt/SendRpt.manifest | 14 + ext/CrashServer/CrashHandler/SendRpt/SendRpt.rc | 533 +- .../CrashHandler/SendRpt/SendRpt.vcxproj | 62 +- .../CrashHandler/SendRpt/SendRpt.vcxproj.filters | 84 +- .../CrashHandler/SendRpt/Serializer.cpp | 44 +- ext/CrashServer/CrashHandler/SendRpt/Serializer.h | 17 +- .../CrashHandler/SendRpt/Translator.cpp | 58 + .../Translator.h} | 30 +- .../{dbghelp_x64.dll => dbghelp/x64/dbghelp.dll} | Bin .../CrashHandler/SendRpt/dbghelp/x86/dbghelp.dll | Bin 0 -> 1213200 bytes .../CrashHandler/SendRpt/dbghelp_x86.dll | Bin 1080656 -> 0 bytes ext/CrashServer/CrashHandler/SendRpt/projectinfo.h | 8 +- ext/CrashServer/CrashHandler/SendRpt/resource.h | 9 +- ext/CrashServer/CrashHandler/SendRpt/stdafx.cpp | 6 +- ext/CrashServer/CrashHandler/SendRpt/stdafx.h | 8 +- ext/CrashServer/CrashHandler/SendRpt/targetver.h | 6 +- ext/CrashServer/CrashHandler/SendRpt/translate.ini | Bin 0 -> 8244 bytes ext/CrashServer/CrashHandler/SendRpt/utils.cpp | 32 + .../{CrashHandler/targetver.h => SendRpt/utils.h} | 11 +- ext/CrashServer/CrashHandler/crashhandler.props | 19 +- ext/CrashServer/CrashHandler/solutioninfo.h | 10 +- ext/CrashServer/Readme.txt | 2 +- ext/CrashServer/SymUpload.exe | Bin 419840 -> 427736 bytes ext/CrashServer/external/MiniZip/MiniZip.vcxproj | 161 - ext/CrashServer/external/WTL/Include/atlapp.h | 643 +- ext/CrashServer/external/WTL/Include/atlctrls.h | 321 +- ext/CrashServer/external/WTL/Include/atlctrlx.h | 653 +- ext/CrashServer/external/WTL/Include/atlgdi.h | 128 +- ext/CrashServer/external/WTL/Include/atlres.h | 10 +- ext/CrashServer/external/WTL/Include/atluser.h | 217 +- ext/CrashServer/external/WTL/Include/atlwinx.h | 8 +- .../mod_gsoap/gsoap_win/wininet/gsoapWinInet.h | 196 - src/TortoiseGit.sln | 35 +- src/TortoiseGitSetup/StructureFragment.wxi | 2 + 93 files changed, 25801 insertions(+), 10228 deletions(-) create mode 100644 ext/CrashServer/CommonLibs/Stat/stat.cpp create mode 100644 ext/CrashServer/CommonLibs/Stat/stat.h create mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploader3.wsdl rename ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/{UploaderSoap.nsmap => CustomBinding_DumpUploadService3_Uploader.nsmap} (53%) delete mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/UploaderSoap12.nsmap create mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.cpp create mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.h delete mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.cpp delete mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.h delete mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.cpp delete mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.h delete mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet-2.8.0.cpp create mode 100644 ext/CrashServer/CrashHandler/DumpUploaderServiceLib/replace_text.vbs rename ext/CrashServer/{external/gsoap-win32-2.8.0 => CrashHandler/DumpUploaderServiceLib}/stdsoap2.cpp (79%) rename ext/CrashServer/{external/gsoap-win32-2.8.0 => CrashHandler/DumpUploaderServiceLib}/stdsoap2.h (81%) rewrite ext/CrashServer/CrashHandler/SendRpt/CrashProcessor.cpp (79%) create mode 100644 ext/CrashServer/CrashHandler/SendRpt/DoctorDump.cpp create mode 100644 ext/CrashServer/CrashHandler/SendRpt/DoctorDump.h copy ext/CrashServer/CrashHandler/{CrashHandler/targetver.h => SendRpt/DumpUploader.h} (57%) create mode 100644 ext/CrashServer/CrashHandler/SendRpt/IniFile.cpp copy ext/CrashServer/CrashHandler/{CrashHandler/stdafx.h => SendRpt/IniFile.h} (53%) create mode 100644 ext/CrashServer/CrashHandler/SendRpt/SendRpt.manifest rewrite ext/CrashServer/CrashHandler/SendRpt/SendRpt.rc (61%) create mode 100644 ext/CrashServer/CrashHandler/SendRpt/Translator.cpp copy ext/CrashServer/CrashHandler/{DumpUploaderServiceLib/DumpUploaderWebService.h => SendRpt/Translator.h} (50%) rename ext/CrashServer/CrashHandler/SendRpt/{dbghelp_x64.dll => dbghelp/x64/dbghelp.dll} (100%) create mode 100644 ext/CrashServer/CrashHandler/SendRpt/dbghelp/x86/dbghelp.dll delete mode 100644 ext/CrashServer/CrashHandler/SendRpt/dbghelp_x86.dll create mode 100644 ext/CrashServer/CrashHandler/SendRpt/translate.ini create mode 100644 ext/CrashServer/CrashHandler/SendRpt/utils.cpp copy ext/CrashServer/CrashHandler/{CrashHandler/targetver.h => SendRpt/utils.h} (70%) delete mode 100644 ext/CrashServer/external/MiniZip/MiniZip.vcxproj delete mode 100644 ext/CrashServer/external/gsoap-win32-2.8.0/mod_gsoap/gsoap_win/wininet/gsoapWinInet.h diff --git a/ext/CrashServer/CommonLibs/Log/log.cpp b/ext/CrashServer/CommonLibs/Log/log.cpp index d9ec56a0e..771f263cc 100644 --- a/ext/CrashServer/CommonLibs/Log/log.cpp +++ b/ext/CrashServer/CommonLibs/Log/log.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -24,6 +24,10 @@ #include #include "log_media.h" +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#include +#endif + #define ASSERT(f) assert(f) #ifndef VERIFY @@ -74,10 +78,10 @@ void SetLogThreadName(LPCTSTR pszThreadName) // SetDebuggerThreadName(-1, __LPCSTR(pszThreadName)); } -//! Ñîçäà¸ò ïóòü ê ôàéëó. +//! Создаёт путь к файлу. bool CreateFileDir(LPCTSTR pszFilePath) { - // Íàéä¸ì ïîëíûé ïóòü + // Найдём полный путь TCHAR szBuffer[1024]; LPTSTR pszFilePart; DWORD dwRes = GetFullPathName(pszFilePath, sizeof(szBuffer)/sizeof(*szBuffer), szBuffer, &pszFilePart); @@ -86,7 +90,7 @@ bool CreateFileDir(LPCTSTR pszFilePath) || pszFilePart == NULL) return false; - // Îòðåæåì èìÿ ôàéëà + // Отрежем имя файла *pszFilePart = _T('\0'); CString sPath(szBuffer); @@ -95,9 +99,9 @@ bool CreateFileDir(LPCTSTR pszFilePath) int nPos; if (sPath.Left(2) == _T("\\\\")) - nPos = sPath.Find(_T("\\"), sPath.Find(_T("\\"), 2) + 1) + 1; // Ïðîïóñòèì èìÿ êîìïüþòåðà è øàðû + nPos = sPath.Find(_T("\\"), sPath.Find(_T("\\"), 2) + 1) + 1; // Пропустим имя компьютера и шары else - nPos = 4; // Ïðîïóñòèì èìÿ äèñêà + nPos = 4; // Пропустим имя диска while ( (nPos = sPath.Find(_T('\\'), nPos + 1)) != -1) { if (!CreateDirectory(sPath.Left(nPos), NULL) && GetLastError() != ERROR_ALREADY_EXISTS) @@ -129,7 +133,7 @@ void LogBase::SetAppLogMedia(LogMediaPtr pLog) ASSERT(pLog != GetAppLogMedia()); if (pLog == GetAppLogMedia()) return; - std::tr1::static_pointer_cast(GetAppLogMedia())->SetLog(pLog); + std::static_pointer_cast(GetAppLogMedia())->SetLog(pLog); } LogMediaPtr LogBase::CreateConsoleMedia() @@ -195,6 +199,8 @@ void FormatLogMessage(ELogMessageType type, output += _T("] "); #else output += _T(" "); + output += pszThreadId; + output += _T(" "); #endif switch (type) @@ -215,7 +221,7 @@ void FormatLogMessage(ELogMessageType type, ASSERT(false); } - if (nLevel>0) + if (nLevel > 0) output.AppendFormat(_T("%i"), nLevel); else output += _T(' '); @@ -262,7 +268,7 @@ void FormatLogMessage(ELogMessageType type, ASSERT(false); } - if (nLevel>0) + if (nLevel > 0) output.AppendFormat(_T("%i"), nLevel); output += _T('\t'); output += pszMessage; @@ -274,6 +280,27 @@ CString GetSystemInformation() { CString info = _T("Microsoft Windows "); +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + if (IsWindows8Point1OrGreater()) + info += _T(">= 8.1"); + else if (IsWindows8OrGreater()) + info += _T("8.1"); + else if (IsWindows7SP1OrGreater()) + info += _T("7 SP1"); + else if (IsWindows7OrGreater()) + info += _T("7"); + else if (IsWindowsVistaSP2OrGreater()) + info += _T("Vista SP2"); + else if (IsWindowsVistaSP1OrGreater()) + info += _T("Vista SP1"); + else if (IsWindowsVistaOrGreater()) + info += _T("Vista"); + + if (IsWindowsServer()) + info += _T(" Server"); + else + info += _T(" Client"); +#else OSVERSIONINFOEX rcOS; ZeroMemory(&rcOS, sizeof(rcOS)); rcOS.dwOSVersionInfoSize = sizeof(rcOS); @@ -339,6 +366,7 @@ CString GetSystemInformation() info += rcOS.szCSDVersion; } } +#endif return info; } @@ -346,36 +374,34 @@ CString GetModuleInformation() { CString info; TCHAR szApp[MAX_PATH]; - if(!GetModuleFileName(NULL, szApp, MAX_PATH)) + if (!GetModuleFileName(NULL, szApp, _countof(szApp))) return info; info = szApp; DWORD dwDummy; - DWORD dwInfoSize; - - dwInfoSize = GetFileVersionInfoSize(szApp, &dwDummy); - if(dwInfoSize) + DWORD dwInfoSize = GetFileVersionInfoSize(szApp, &dwDummy); + if (dwInfoSize) { LPVOID pInfoBuffer = _alloca(dwInfoSize); - if(GetFileVersionInfo(szApp, 0, dwInfoSize, pInfoBuffer)) + if (GetFileVersionInfo(szApp, 0, dwInfoSize, pInfoBuffer)) { VS_FIXEDFILEINFO *pInfo = NULL; - UINT InfoSize = 0; - if(VerQueryValue (pInfoBuffer, _T("\\"), (LPVOID *)&pInfo, &InfoSize) && InfoSize == sizeof(VS_FIXEDFILEINFO)) + UINT nInfoSize = 0; + if (VerQueryValue (pInfoBuffer, _T("\\"), (LPVOID *)&pInfo, &nInfoSize) && nInfoSize == sizeof(VS_FIXEDFILEINFO)) { - CString strVersion; - strVersion.Format(_T(" (%d.%d.%d.%d)"), + info.AppendFormat(_T(" (%d.%d.%d.%d)"), HIWORD(pInfo->dwFileVersionMS), LOWORD(pInfo->dwFileVersionMS), HIWORD(pInfo->dwFileVersionLS), LOWORD(pInfo->dwFileVersionLS) ); - info += strVersion; } } } + info.AppendFormat(_T(" PID: %d (0x%x)"), GetCurrentProcessId(), GetCurrentProcessId()); + return info; } @@ -463,105 +489,11 @@ FileMedia::FileMedia(LPCTSTR pszFilename, bool bAppend, bool bFlush, bool bNewFi m_sOrigFilename(pszFilename) { OpenLogFile(); -// SYSTEMTIME st; -// GetLocalTime(&st); -// -// m_sFilename = pszFilename; -// m_sFilename.Replace(_T("%DATETIME%"), _T("%DATE% %TIME%")); -// if (m_sFilename.Find(_T("%DATE%")) != -1) -// { -// TCHAR bufdate[128]; -// _stprintf_s(bufdate, _T("%i-%02i-%02i"), st.wYear, st.wMonth, st.wDay); -// m_sFilename.Replace(_T("%DATE%"), bufdate); -// } -// if (m_sFilename.Find(_T("%TIME%")) != -1) -// { -// GetLocalTime(&st); -// TCHAR buftime[128]; -// _stprintf_s(buftime, _T("%02i-%02i"), st.wHour, st.wMinute); -// m_sFilename.Replace(_T("%TIME%"), buftime); -// } -// -// if (!CreateFileDir(m_sFilename)) -// { -// _RPT1(_CRT_ERROR, "FileMedia: Can't create folder '%S'", (LPCWSTR) m_sFilename); -// return; -// } -// -// -// // Ñîçäàäèì äëÿ äîñòóïà ê ýòîìó ôàéëó ìüþòåêñ -// CString sMtx(m_sFilename); -// sMtx.ToUpper(); -// for (CString::iterator it = sMtx.begin(), end = sMtx.end(); it != end; ++it) -// { -// if (!_istalnum(*it)) -// *it = _T('_'); -// } -// m_hMutex = CreateMutex(NULL, TRUE, (LPCTSTR)sMtx); -// DWORD dwMtxError = GetLastError(); -// -// m_hFile = CreateFile(m_sFilename, -// GENERIC_WRITE, -// FILE_SHARE_READ | FILE_SHARE_WRITE, -// NULL, -// (bAppend || dwMtxError == ERROR_ALREADY_EXISTS) ? OPEN_ALWAYS : CREATE_ALWAYS, -// FILE_ATTRIBUTE_NORMAL, -// NULL); -// -// if (m_hFile == INVALID_HANDLE_VALUE) -// { -// if (dwMtxError != ERROR_ALREADY_EXISTS) -// VERIFY(ReleaseMutex(m_hMutex)); -// m_hMutex.Close(); -// return; -// } -// -// if (dwMtxError != ERROR_ALREADY_EXISTS) -// { -// CString header; -// header.Format( -// _T("================================================\r\n") -// _T("=== Trace Log Started on %i-%02i-%02i %02i:%02i:%02i ===\r\n") -// _T("=== %s ===\r\n") -// _T("================================================\r\n") -// _T("\r\n%s\r\n\r\n") -// , st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond -// , (LPCTSTR)GetSystemInformation() -// , (LPCTSTR)GetModuleInformation()); -// -// LONG dwDistanceToMoveHigh = 0; // Íóæåí, ÷òîáû ïèñàòü â ôàéëû áîëüøå 4Ãá -// VERIFY(SetFilePointer(m_hFile, 0, &dwDistanceToMoveHigh, FILE_END) != INVALID_SET_FILE_POINTER || GetLastError() == NO_ERROR); -// CStringA headerA = header; -// DWORD dwWritten; -//// VERIFY(WriteFile(m_hFile, (LPCTSTR)header, (DWORD)header.size() * sizeof(TCHAR), &dwWritten, NULL)); -// VERIFY(WriteFile(m_hFile, (LPCSTR)headerA, (DWORD)headerA.size() * sizeof(CHAR), &dwWritten, NULL)); -// if (m_hMutex != NULL) -// VERIFY(ReleaseMutex(m_hMutex)); -// } } FileMedia::~FileMedia() { CloseLogFile(); -// if (m_hFile != INVALID_HANDLE_VALUE && WaitForSingleObject(m_hMutex, 1000) != WAIT_TIMEOUT) -// { -// SYSTEMTIME st; -// GetLocalTime(&st); -// CString header; -// header.Format( -// _T("=================================================\r\n") -// _T("=== Trace Log Finished on %i-%02i-%02i %02i:%02i:%02i ===\r\n") -// _T("=================================================\r\n") -// , st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); -// -// LONG dwDistanceToMoveHigh = 0; // Íóæåí, ÷òîáû ïèñàòü â ôàéëû áîëüøå 4Ãá -// VERIFY(SetFilePointer(m_hFile, 0, &dwDistanceToMoveHigh, FILE_END) != INVALID_SET_FILE_POINTER || GetLastError() == NO_ERROR); -// CStringA headerA = header; -// DWORD dwWritten; -//// VERIFY(WriteFile(m_hFile, (LPCTSTR)header, (DWORD) header.size() * sizeof(TCHAR), &dwWritten, NULL)); -// VERIFY(WriteFile(m_hFile, (LPCSTR)headerA, (DWORD) headerA.size() * sizeof(CHAR), &dwWritten, NULL)); -// VERIFY(ReleaseMutex(m_hMutex)); -// } } void FileMedia::CloseLogFile() @@ -577,7 +509,7 @@ void FileMedia::CloseLogFile() _T("=================================================\r\n") , st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); - LONG dwDistanceToMoveHigh = 0; // Íóæåí, ÷òîáû ïèñàòü â ôàéëû áîëüøå 4Ãá + LONG dwDistanceToMoveHigh = 0; // Нужен, чтобы писать в файлы больше 4Гб VERIFY(SetFilePointer(m_hFile, 0, &dwDistanceToMoveHigh, FILE_END) != INVALID_SET_FILE_POINTER || GetLastError() == NO_ERROR); CStringA headerA = header; DWORD dwWritten; @@ -623,7 +555,7 @@ void FileMedia::OpenLogFile() } - // Ñîçäàäèì äëÿ äîñòóïà ê ýòîìó ôàéëó ìüþòåêñ + // Создадим для доступа к этому файлу мьютекс CString sMtx(m_sFilename); sMtx.MakeUpper(); for (int i = 0, size = sMtx.GetLength(); i < size; ++i) @@ -663,11 +595,10 @@ void FileMedia::OpenLogFile() , (LPCTSTR)GetSystemInformation() , (LPCTSTR)GetModuleInformation()); - LONG dwDistanceToMoveHigh = 0; // Íóæåí, ÷òîáû ïèñàòü â ôàéëû áîëüøå 4Ãá + LONG dwDistanceToMoveHigh = 0; // Нужен, чтобы писать в файлы больше 4Гб VERIFY(SetFilePointer(m_hFile, 0, &dwDistanceToMoveHigh, FILE_END) != INVALID_SET_FILE_POINTER || GetLastError() == NO_ERROR); CStringA headerA = header; DWORD dwWritten; -// VERIFY(WriteFile(m_hFile, (LPCTSTR)header, (DWORD)header.size() * sizeof(TCHAR), &dwWritten, NULL)); VERIFY(WriteFile(m_hFile, (LPCSTR)headerA, (DWORD)headerA.GetLength() * sizeof(CHAR), &dwWritten, NULL)); if (m_hMutex != NULL) VERIFY(ReleaseMutex(m_hMutex)); @@ -707,7 +638,7 @@ void FileMedia::Write(ELogMessageType type, ELogMessageLevel nLevel, LPCTSTR psz } } - LONG dwDistanceToMoveHigh = 0; // Íóæåí, ÷òîáû ïèñàòü â ôàéëû áîëüøå 4Ãá + LONG dwDistanceToMoveHigh = 0; // Нужен, чтобы писать в файлы больше 4Гб if (SetFilePointer(m_hFile, 0, &dwDistanceToMoveHigh, FILE_END) == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { @@ -724,7 +655,6 @@ void FileMedia::Write(ELogMessageType type, ELogMessageLevel nLevel, LPCTSTR psz CStringA outputA = output; DWORD dwWritten; -// VERIFY(WriteFile(m_hFile, (LPCTSTR)output, (DWORD) output.size() * sizeof(TCHAR), &dwWritten, NULL)); VERIFY(WriteFile(m_hFile, (LPCSTR)outputA, (DWORD) outputA.GetLength() * sizeof(CHAR), &dwWritten, NULL)); if (m_bFlush) VERIFY(FlushFileBuffers(m_hFile)); @@ -831,7 +761,7 @@ void LogMediaColl::Write(ELogMessageType type, ELogMessageLevel nLevel, LPCTSTR bool LogMediaColl::Check(ELogMessageType type, ELogMessageLevel nLevel, LPCTSTR pszModule) { CriticalSection::SyncLock lock(m_cs); - // Åñëè õîòÿ áû îäèí ëîã ïðîïóñêàåò, òî è ìû ïðîïóñêàåì. + // Если хотя бы один лог пропускает, то и мы пропускаем. for (MediaColl::iterator it = m_MediaColl.begin(), end = m_MediaColl.end(); it != end; ++it) if ((*it)->Check(type, nLevel, pszModule)) return true; @@ -923,9 +853,9 @@ void LogBase::WriteVA(ELogMessageType type, LPCTSTR pszMessage, va_list args) throw() { - if (IsFiltered(type, nLevel)) // íå îáðàáàòûâàåì ñîîáùåíèå, åñëè îíî íå ïîïàäàåò â ëîã + if (IsFiltered(type, nLevel)) // не обрабатываем сообщение, если оно не попадает в лог return; - // 75% âðåìåíè òðàòèòñÿ íà new è delete, ïîýòîìó ïåðâóþ ïîïûòêó ïîïðîáóåì ñäåëàòü áåç íåãî. + // 75% времени тратится на new и delete, поэтому первую попытку попробуем сделать без него. StackResizableBuf buf; int pos; for (;;) @@ -933,7 +863,7 @@ void LogBase::WriteVA(ELogMessageType type, pos = _vsntprintf_s(buf.data, buf.size, buf.size - 1, pszMessage, args); if (pos != -1) break; - // BUG 16456 FIX, ñì. â êîíåö WriteVAW ïî÷åìó + // BUG 16456 FIX, см. в конец WriteVAW почему //if (buf.size >= 1024 * 256) if (buf.size >= 1024 * 1024 * 10) //Increased limit for DumpServer { @@ -966,9 +896,9 @@ void LogBase::WriteVAW(ELogMessageType type, WriteVA(type, nLevel, pszModule, pszMessage, args); #else - if (IsFiltered(type, nLevel)) // íå îáðàáàòûâàåì ñîîáùåíèå, åñëè îíî íå ïîïàäàåò â ëîã + if (IsFiltered(type, nLevel)) // не обрабатываем сообщение, если оно не попадает в лог return; - // 75% âðåìåíè òðàòèòñÿ íà new è delete, ïîýòîìó ïåðâóþ ïîïûòêó ïîïðîáóåì ñäåëàòü áåç íåãî. + // 75% времени тратится на new и delete, поэтому первую попытку попробуем сделать без него. StackResizableBuf buf; int pos; for (;;) @@ -976,7 +906,7 @@ void LogBase::WriteVAW(ELogMessageType type, pos = _vsnwprintf(buf.data, buf.size - 1, pszMessage, args); if (pos != -1) break; - // BUG 16456 FIX, ñì. â êîíåö WriteVAW ïî÷åìó + // BUG 16456 FIX, см. в конец WriteVAW почему if (buf.size >= 1024 * 256) { pos = buf.size - 1; @@ -1019,12 +949,12 @@ void LogBase::WriteVAW(ELogMessageType type, } #endif /* BUG 16456 FIX - _vsnwprintf ñïîòûêàåòñÿ íà ñòðîêàõ ñ ñèìâîëîì 0xFFFF, - âîçâðàùàåò -1 ïðè ëþáîé äëèíå áóôåðà. Ñîîòâåòñâòâåííî - áóôåð óâåëè÷èâàåòñÿ (Resize) ïîêà íå õâàòèò ïàìÿòè, - à ïîòîì âûçûâàåòñÿ _vsnwprintf íà NULL. - Ðåøåíèå: Ò.ê. _vsnwprintf, äàæå åñëè íåõâàòàåò áóôåðà, íà÷àëî çàïîëíÿåò, - òî ïðîñòî îãðàíè÷èì áóôåð 256êá (à 0 íà êîíöå è òàê ñòàâèì íà âñÿêèé ñëó÷àé) + _vsnwprintf спотыкается на строках с символом 0xFFFF, + возвращает -1 при любой длине буфера. Соответсвтвенно + буфер увеличивается (Resize) пока не хватит памяти, + а потом вызывается _vsnwprintf на NULL. + Решение: Т.к. _vsnwprintf, даже если нехватает буфера, начало заполняет, + то просто ограничим буфер 256кб (а 0 на конце и так ставим на всякий случай) #include #include @@ -1033,7 +963,7 @@ void LogBase::WriteVAW(ELogMessageType type, { wchar_t buf[1000]; int n = _vsnwprintf(buf, 1000, pszMessage, args); - printf("Return %i\nBuf is: \"%ls\"", n, buf); // n áóäåò -1, õîòÿ áóôåðà õâàòàåò !!! + printf("Return %i\nBuf is: \"%ls\"", n, buf); // n будет -1, хотя буфера хватает !!! } void WriteW(wchar_t* pszMessage, ...) { diff --git a/ext/CrashServer/CommonLibs/Log/log.h b/ext/CrashServer/CommonLibs/Log/log.h index 96086658a..889ed14fd 100644 --- a/ext/CrashServer/CommonLibs/Log/log.h +++ b/ext/CrashServer/CommonLibs/Log/log.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -32,20 +32,20 @@ void InitializeLog(); void FreeLogThreadName(); void SetLogThreadName(LPCTSTR pszThreadName); -//! Òèïû ñîîáùåíèé. +//! Типы сообщений. enum ELogMessageType { - eLM_Error, //!< "Îøèáêà" - ïðîèçîø¸ë ñáîé â ðàáîòå, äàëüíåéøåå âûïîëíåíèå òåêóùåãî äåéñòâèÿ íåâîçìîæíî. - eLM_Warning, //!< "Ïðåäóïðåæäåíèå" - ïðîèçîø¸ë ñáîé â ðàáîòå, êîòîðûé óäàëîñü èñïðàâèòü. - eLM_Info, //!< "Èíôîðìàöèÿ" - ñîîáùåíèå î âûïîëíåíèè íåêîòîðîãî äåéñòâèÿ ïðîãðàììîé. - eLM_Debug, //!< "Îòëàäêà" - ñîîáùåíèå, ñîäåðæàùåå îòëàäî÷íóþ èíôîðìàöèþ. - eLM_DirectOutput //!< Ïåðåíàïðàâëåíèå â ëîã âûâîäà âíåøíåãî êîíñîëüíîãî ïðèëîæåíèÿ + eLM_Error, //!< "Ошибка" - произошёл сбой в работе, дальнейшее выполнение текущего действия невозможно. + eLM_Warning, //!< "Предупреждение" - произошёл сбой в работе, который удалось исправить. + eLM_Info, //!< "Информация" - сообщение о выполнении некоторого действия программой. + eLM_Debug, //!< "Отладка" - сообщение, содержащее отладочную информацию. + eLM_DirectOutput //!< Перенаправление в лог вывода внешнего консольного приложения }; -//! Óðîâåíü âàæíîñòè ñîîáùåíèé. +//! Уровень важности сообщений. enum ELogMessageLevel { - L0 = 0, //!< Íàèáîëåå âàæíûé. + L0 = 0, //!< Наиболее важный. L1 = 1, L2 = 2, L3 = 3, @@ -54,41 +54,41 @@ enum ELogMessageLevel LMAX = 255 }; -//! Èíòåðôåéñ "ôèçè÷åñêîãî" ëîãà. Îñóùåñòâëÿåò çàïèñü íà íîñèòåëü. +//! Интерфейс "физического" лога. Осуществляет запись на носитель. class ILogMedia { public: virtual ~ILogMedia() {} - //! Çàïèñûâàåò ñîîáùåíèå. + //! Записывает сообщение. virtual void Write( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCTSTR pszDate, //!< [in] Äàòà çàïèñè ñîîáùåíèÿ. - LPCTSTR pszTime, //!< [in] Âðåìÿ çàïèñè ñîîáùåíèÿ. - LPCTSTR pszThreadId, //!< [in] Èäåíòèôèêàòîð ïîòîêà, èç êîòîðîãî çàïèñàíî ñîîáùåíèå. - LPCTSTR pszThreadName, //!< [in] Èìÿ ïîòîêà, èç êîòîðîãî çàïèñàíî ñîîáùåíèå. - LPCTSTR pszModule, //!< [in] Ìîäóëü, èç êîòîðîãî çàïèñàíî ñîîáùåíèå. - LPCTSTR pszMessage //!< [in] Ñîîáùåíèå. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCTSTR pszDate, //!< [in] Дата записи сообщения. + LPCTSTR pszTime, //!< [in] Время записи сообщения. + LPCTSTR pszThreadId, //!< [in] Идентификатор потока, из которого записано сообщение. + LPCTSTR pszThreadName, //!< [in] Имя потока, из которого записано сообщение. + LPCTSTR pszModule, //!< [in] Модуль, из которого записано сообщение. + LPCTSTR pszMessage //!< [in] Сообщение. ) = 0; - //! Ðàçðåøàåò, èñêëþ÷àåò èëè ìîäèôèöèðóåò ñîîáùåíèå. - //! \return false - Ñîîáùåíèå èãíîðèðóåòñÿ. + //! Разрешает, исключает или модифицирует сообщение. + //! \return false - Сообщение игнорируется. virtual bool Check( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCTSTR pszModule //!< [in] Ìîäóëü, èç êîòîðîãî çàïèñàíî ñîîáùåíèÿ. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCTSTR pszModule //!< [in] Модуль, из которого записано сообщения. ) { type; nLevel; pszModule; return true; }; - //! Âîçâðàùàåò, ðàáîòàåò ëè ëîã. - //! Åñëè ëîã áûë íåóäà÷íî ñîçäàí (íàïðèìåð, êðèâîå èìÿ ôàéëà), óçíàòü îá ýòîì ìîæíî çäåñü. + //! Возвращает, работает ли лог. + //! Если лог был неудачно создан (например, кривое имя файла), узнать об этом можно здесь. virtual bool IsWorking() const { return true; } }; -typedef std::tr1::shared_ptr LogMediaPtr; +typedef std::shared_ptr LogMediaPtr; -//! Ëîã-çàãëóøêà. +//! Лог-заглушка. class LogMediaProxy: public ILogMedia { public: @@ -102,7 +102,7 @@ private: CriticalSection m_cs; }; -//! Êîìïîíîâùèê "ôèçè÷åñêèõ" ëîãîâ. +//! Компоновщик "физических" логов. class LogMediaColl: public ILogMedia { typedef std::vector MediaColl; @@ -117,33 +117,33 @@ private: CriticalSection m_cs; }; -//! Èíòåðôåéñ ôèëüòðàöèè ñîîáùåíèé ëîãà. +//! Интерфейс фильтрации сообщений лога. class IFilter { public: virtual ~IFilter() {} - //! Ðàçðåøàåò, èñêëþ÷àåò èëè ìîäèôèöèðóåò ñîîáùåíèå. - //! \return false - Ñîîáùåíèå èãíîðèðóåòñÿ. + //! Разрешает, исключает или модифицирует сообщение. + //! \return false - Сообщение игнорируется. virtual bool Check( - ELogMessageType& type, //!< [in/out] Òèï ñîîáùåíèÿ. - ELogMessageLevel& nLevel, //!< [in/out] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCTSTR pszModule //!< [in] Ìîäóëü, èç êîòîðîãî çàïèñàíî ñîîáùåíèÿ. + ELogMessageType& type, //!< [in/out] Тип сообщения. + ELogMessageLevel& nLevel, //!< [in/out] Уровень важности (L0 - наиболее важный). + LPCTSTR pszModule //!< [in] Модуль, из которого записано сообщения. ) = 0; }; -typedef std::tr1::shared_ptr FilterPtr; +typedef std::shared_ptr FilterPtr; -//! Ôèëüòð ïî òèïó è óðîâíþ ñîîáùåíèÿ. -//! Ðàçðåøàåò ñîîáùåíèÿ áîëåå ïðèîðèòåòíîãî òèïà è ñîîáùåíèÿ óêàçàííîãî òèïà ñ âàæíîñòüþ íå íèæå óêàçàííîé. +//! Фильтр по типу и уровню сообщения. +//! Разрешает сообщения более приоритетного типа и сообщения указанного типа с важностью не ниже указанной. class TypeLevelFilter: public IFilter { ELogMessageType m_type; ELogMessageLevel m_nLevel; public: - //! Êîíñòðóêòîð. + //! Конструктор. TypeLevelFilter( - ELogMessageType type = eLM_Info, //!< [in] Ðàçðåøàåò ñîîáùåíèÿ ïðèîðèòåòíee type. - ELogMessageLevel nLevel = LMAX //!< [in] Ðàçðåøàåò òèïà type ñ âàæíîñòüþ íå íèæå nLevel. + ELogMessageType type = eLM_Info, //!< [in] Разрешает сообщения приоритетнee type. + ELogMessageLevel nLevel = LMAX //!< [in] Разрешает типа type с важностью не ниже nLevel. ): m_type(type), m_nLevel(nLevel) {} virtual bool Check(ELogMessageType& type, ELogMessageLevel& nLevel, LPCTSTR) { @@ -151,19 +151,19 @@ public: } }; -//! Ôèëüòðóþùèé ëîã. +//! Фильтрующий лог. class FilterLogMedia: public ILogMedia { typedef std::vector FilterColl; public: - //! Êîíñòðóêòîð. + //! Конструктор. FilterLogMedia( - const LogMediaPtr& pMedia //!< [in] Ëîã, íà êîòîðûé íàêëàäûâàåòñÿ ôèëüòð. + const LogMediaPtr& pMedia //!< [in] Лог, на который накладывается фильтр. ); virtual ~FilterLogMedia(); - //! Äîáàâëÿåò ôèëüòð. + //! Добавляет фильтр. void AddFilter( - FilterPtr pFilter //!< [in] Ôèëüòð. + FilterPtr pFilter //!< [in] Фильтр. ); virtual void Write(ELogMessageType type, ELogMessageLevel nLevel, LPCTSTR pszDate, LPCTSTR pszTime, LPCTSTR pszThreadId, LPCTSTR pszThreadName, LPCTSTR pszModule, LPCTSTR pszMessage); virtual bool Check(ELogMessageType type, ELogMessageLevel nLevel, LPCTSTR pszModule); @@ -174,7 +174,7 @@ private: CriticalSection m_cs; }; -//! Ïàðàìåòðû ñîçäàíèÿ ëîãà. +//! Параметры создания лога. struct LogParam { LogParam( @@ -185,19 +185,19 @@ struct LogParam LPCTSTR m_pszModule; }; -//! "Ëîãè÷åñêèé" ëîã. +//! "Логический" лог. class LogBase { public: virtual ~LogBase(); - //! Âîçâðàøàåò "ôèçè÷åñêèé" ëîã äàííîãî ëîãà. + //! Возврашает "физический" лог данного лога. LogMediaPtr GetMedia() const throw() { return m_pMedia; } - //! Çàïèñûâàåò ôîðìàòèðîâàííîå ñîîáùåíèå. + //! Записывает форматированное сообщение. void Write( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCTSTR pszMessage, //!< [in] Ñîîáùåíèå. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCTSTR pszMessage, //!< [in] Сообщение. ... ) throw() { @@ -207,12 +207,12 @@ public: va_end(ap); } - //! Çàïèñûâàåò ôîðìàòèðîâàííîå Unicode-ñîîáùåíèå. + //! Записывает форматированное Unicode-сообщение. void WriteW( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCWSTR pszModule, //!< [in] Èìÿ ìîäóëÿ. (NULL - èìÿ ïî óìîë÷àíèþ) - LPCWSTR pszMessage, //!< [in] Ñîîáùåíèå. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCWSTR pszModule, //!< [in] Имя модуля. (NULL - имя по умолчанию) + LPCWSTR pszMessage, //!< [in] Сообщение. ... ) throw() { @@ -222,21 +222,21 @@ public: va_end(ap); } - //! Çàïèñûâàåò ôîðìàòèðîâàííîå ñîîáùåíèå. + //! Записывает форматированное сообщение. virtual void WriteVA( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCTSTR pszModule, //!< [in] Èìÿ ìîäóëÿ. (NULL - èìÿ ïî óìîë÷àíèþ) - LPCTSTR pszMessage, //!< [in] Ñîîáùåíèå. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCTSTR pszModule, //!< [in] Имя модуля. (NULL - имя по умолчанию) + LPCTSTR pszMessage, //!< [in] Сообщение. va_list args ) throw(); - //! Çàïèñûâàåò ôîðìàòèðîâàííîå Unicode-ñîîáùåíèå. + //! Записывает форматированное Unicode-сообщение. virtual void WriteVAW( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCWSTR pszModule, //!< [in] Èìÿ ìîäóëÿ. (NULL - èìÿ ïî óìîë÷àíèþ) - LPCWSTR pszMessage, //!< [in] Ñîîáùåíèå. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCWSTR pszModule, //!< [in] Имя модуля. (NULL - имя по умолчанию) + LPCWSTR pszMessage, //!< [in] Сообщение. va_list args ) throw(); @@ -252,83 +252,83 @@ public: void Error(LPCTSTR pszMessage, ...) throw() { va_list ap; va_start(ap, pszMessage); WriteVA(eLM_Error, L0, NULL, pszMessage, ap); va_end(ap); } void Error(ELogMessageLevel nLevel, LPCTSTR pszMessage, ...) throw() { va_list ap; va_start(ap, pszMessage); WriteVA(eLM_Error, nLevel, NULL, pszMessage, ap); va_end(ap); } - //! Ïðîâåðÿåò, ïîïàä¸ò ëè ýòî ñîîáùåíèå â ëîã. + //! Проверяет, попадёт ли это сообщение в лог. bool IsFiltered(ELogMessageType type, ELogMessageLevel nLevel); - //! Óñòàíàâëèâàåò íàçâàíèå ïîòîêà. + //! Устанавливает название потока. static void SetThreadName( - LPCTSTR pszThreadName //!< [in] Èìÿ ïîòîêà. Óêàçàòåëü äîëæåí áûòü âàëèäíûì â òå÷åíèè ðàáîòû ïîòîêà. + LPCTSTR pszThreadName //!< [in] Имя потока. Указатель должен быть валидным в течении работы потока. ); - //! Âîçðàùàåò óñòàíàâëåííîå íàçâàíèå ïîòîêà. + //! Возращает устанавленное название потока. static LPCTSTR GetThreadName(); - //! Âîçâðàùàåò "ôèçè÷åñêèé" ëîã ïðèëîæåíèÿ. (Ïðåäñòàâëÿåò ñîáîé LogMediaProxy) + //! Возвращает "физический" лог приложения. (Представляет собой LogMediaProxy) static LogMediaPtr GetAppLogMedia(); - //! Óñòàíàâëèâàåò "ôèçè÷åñêèé" ëîã ïðèëîæåíèÿ. + //! Устанавливает "физический" лог приложения. static void SetAppLogMedia(LogMediaPtr pLog); static LogMediaPtr CreateConsoleMedia(); static LogMediaPtr CreateFileMedia( - LPCTSTR pszFilename, //!< [in] Èìÿ ôàéëà. - bool bAppend, //!< [in] Ôëàã äîáàâëåíèÿ â êîíåö. - bool bFlush = false, //!< [in] Ôëàã ñáðîñà íà äèñê ïîñëå êàæäîãî Write. + LPCTSTR pszFilename, //!< [in] Имя файла. + bool bAppend, //!< [in] Флаг добавления в конец. + bool bFlush = false, //!< [in] Флаг сброса на диск после каждого Write. bool bNewFileDaily = false ); enum EDebugMediaStartParams { DEBUGMEDIA_NORMAL = 0x1, - DEBUGMEDIA_FORCE = 0x2, //!< Ñîçäàòü äàæå åñëè íåò îòëàä÷èêà. - DEBUGMEDIA_REPORTERRORS = 0x4, //!< Âûâîäèòü îøèáêè ÷åðåç _CrtDbgReport. + DEBUGMEDIA_FORCE = 0x2, //!< Создать даже если нет отладчика. + DEBUGMEDIA_REPORTERRORS = 0x4, //!< Выводить ошибки через _CrtDbgReport. }; static LogMediaPtr CreateDebugMedia( - DWORD dwParam = DEBUGMEDIA_NORMAL //!< [in] Ñîçäàòü äàæå åñëè íåò îòëàä÷èêà. + DWORD dwParam = DEBUGMEDIA_NORMAL //!< [in] Создать даже если нет отладчика. ); - /*! Ñîçäà¸ò ëîã èç îïèñàíèÿ â ðååñòðå. -  óêàçàííîì êëþ÷å ìîãóò íàõîäèòñÿ ñëåäóþùèå ïåðåìåííûå: - REG_SZ "TraceHeader" - Ïåðâîé ñòðîêîé â ëîã áóäåò äîáàâëåí ýòîò òåêñò - REG_SZ "TraceFile" - ëîã áóäåò ïîäêëþ÷åí ê ôàéëó, óêàçàííîìó â çíà÷åíèè ïåðåìåííîé - REG_DWORD "TraceFileAppend" (def: 1) - ôëàã äîïèñûâàòü â êîíåö ôàéëà - REG_DWORD "TraceFileFlush" (def: 0) - ôëàã ñáðîñà íà äèñê ïîñëå êàæäîé çàïèñè - REG_DWORD "TraceToApp" = 1 - ëîã áóäåò ïîäêëþ÷åí ê ëîãó ïðèëîæåíèÿ. - REG_DWORD "TraceToConsole" = 1 - ëîã áóäåò ïîäêëþ÷åí ê îêíó êîíñîëè - REG_DWORD "TraceToDebug" = 1 - ëîã áóäåò ïîäêëþ÷åí ê ëîãó îòëàä÷èêà (Debug Output). - Íà âñå ýòè ëîãè ìîæíî íàëîæèòü ôèëüòð. - Âîçìîæíû ñëåäóþùèå ôèëüòðû: - REG_SZ "TraceType" = ["debug"|"info"|"warning"|"error"] - òèï, ñîîáùåíèÿ íèæå êîòîðîãî îòîáðàæàòüñÿ íå áóäóò. - REG_DWORD "TraceLevel" = [0|1|2|...] - óðîâåíü òèïà TraceType, ñîîáùåíèÿ íèæå êîòîðîãî îòîáðàæàòüñÿ íå áóäóò. - Åñëè íåîáõîäèìî íàêëàäûâàòü ôèëüòðû èíäèâèäóàëüíî äëÿ êàæäîãî ëîãà, èëè íåîáõîäèìî - íåñêîëüêî ëîãîâ îäíîãî òèïà (íàïðèìåð, ïèñàòü â äâà ôàéëà), òî â óêàçàííîì êëþ÷å - ìîæíî çàâåñòè ïîäêëþ÷è "Trace1" "Trace2" è ò.ä. (äîëæíû èäòè ïîñëåäîâàòåëüíî íà÷èíàÿ ñ 1) - â êîòîðûõ ìîæíî óêàçàòü äîïîëíèòåëüíûå ëîãè è ôèëüòðû. - Ôèëüòðû â êëþ÷å âëèÿþò è íà ïîäêëþ÷è òîæå! - Ïðèìåð: + /*! Создаёт лог из описания в реестре. + В указанном ключе могут находится следующие переменные: + REG_SZ "TraceHeader" - Первой строкой в лог будет добавлен этот текст + REG_SZ "TraceFile" - лог будет подключен к файлу, указанному в значении переменной + REG_DWORD "TraceFileAppend" (def: 1) - флаг дописывать в конец файла + REG_DWORD "TraceFileFlush" (def: 0) - флаг сброса на диск после каждой записи + REG_DWORD "TraceToApp" = 1 - лог будет подключен к логу приложения. + REG_DWORD "TraceToConsole" = 1 - лог будет подключен к окну консоли + REG_DWORD "TraceToDebug" = 1 - лог будет подключен к логу отладчика (Debug Output). + На все эти логи можно наложить фильтр. + Возможны следующие фильтры: + REG_SZ "TraceType" = ["debug"|"info"|"warning"|"error"] - тип, сообщения ниже которого отображаться не будут. + REG_DWORD "TraceLevel" = [0|1|2|...] - уровень типа TraceType, сообщения ниже которого отображаться не будут. + Если необходимо накладывать фильтры индивидуально для каждого лога, или необходимо + несколько логов одного типа (например, писать в два файла), то в указанном ключе + можно завести подключи "Trace1" "Trace2" и т.д. (должны идти последовательно начиная с 1) + в которых можно указать дополнительные логи и фильтры. + Фильтры в ключе влияют и на подключи тоже! + Пример: HLKM\....\SomeComp REG_SZ "TraceFile" = "c:\my.log" HLKM\....\SomeComp\Trace1 REG_DWORD "TraceToDebug" = 1 REG_SZ "TraceType" = "warning" REG_DWORD "TraceLevel" = 5 - Îçíà÷àåò: ïèñàòü â ôàéë âñ¸, â äåáàã âñå îøèáêè è ïðåäóïðåæäåíèÿ óðîâíÿ 5 è íèæå. + Означает: писать в файл всё, в дебаг все ошибки и предупреждения уровня 5 и ниже. - \return Ëîã, êîòîðûé ìîæíî ïåðåäàòü â Log. + \return Лог, который можно передать в Log. */ static LogMediaPtr CreateMediaFromRegistry( - HKEY hRoot, //!< [in] Êîðíåâîé ýëåìåíò ðååñòðà. - LPCTSTR pszPath, //!< [in] Ïóòü îò êîðíåâîãî ýëåìåíòà, äî ðàçäåëà, ñîäåðæàùåãî îïèñàíèå ëîãà. - bool bAppLog = false //!< [in] Äëÿ ëîãà ïðèëîæåíèÿ äîëæåí áûòü true. Òàêæå óñòàíàâëèâàåò ëîã ïðèëîæåíèÿ (SetAppLogMedia()). + HKEY hRoot, //!< [in] Корневой элемент реестра. + LPCTSTR pszPath, //!< [in] Путь от корневого элемента, до раздела, содержащего описание лога. + bool bAppLog = false //!< [in] Для лога приложения должен быть true. Также устанавливает лог приложения (SetAppLogMedia()). ); protected: - //! Êîíñòðóêòîð. + //! Конструктор. LogBase( - LogMediaPtr pMedia, //!< [in] Ëîã. - LPCTSTR pszModule //!< [in] Èìÿ ìîäóëÿ. + LogMediaPtr pMedia, //!< [in] Лог. + LPCTSTR pszModule //!< [in] Имя модуля. ); LogMediaPtr m_pMedia; std::basic_string m_szModule; @@ -337,20 +337,20 @@ protected: class LocalLog: public LogBase { public: - //! Êîíñòðóêòîð äëÿ ïîä-êîìïîíåíòà. + //! Конструктор для под-компонента. LocalLog( - const LogParam& param, //!< [in] Ïàðàìåòðû ñîçäàíèÿ ëîãà. - LPCTSTR pszModule //!< [in] Èìÿ ìîäóëÿ ïî óìîë÷àíèþ. + const LogParam& param, //!< [in] Параметры создания лога. + LPCTSTR pszModule //!< [in] Имя модуля по умолчанию. ); - //! Êîíñòðóêòîð. + //! Конструктор. LocalLog( - LogMediaPtr pMedia, //!< [in] Ëîã. - LPCTSTR pszModule //!< [in] Èìÿ ìîäóëÿ. + LogMediaPtr pMedia, //!< [in] Лог. + LPCTSTR pszModule //!< [in] Имя модуля. ); - //! Êîíñòðóêòîð. + //! Конструктор. LocalLog( - const LogBase& log, //!< [in] Ëîã. - LPCTSTR pszModule //!< [in] Èìÿ ìîäóëÿ. + const LogBase& log, //!< [in] Лог. + LPCTSTR pszModule //!< [in] Имя модуля. ); virtual ~LocalLog(); }; @@ -358,40 +358,40 @@ public: class Log: public LogBase { public: - //! Êîíñòðóêòîð äëÿ ïîä-êîìïîíåíòà. + //! Конструктор для под-компонента. Log( - const LogParam& param, //!< [in] Ïàðàìåòðû ñîçäàíèÿ ëîãà. - LPCTSTR pszModule //!< [in] Èìÿ ìîäóëÿ ïî óìîë÷àíèþ. + const LogParam& param, //!< [in] Параметры создания лога. + LPCTSTR pszModule //!< [in] Имя модуля по умолчанию. ); - //! Êîíñòðóêòîð äëÿ ãëàâíîãî ëîãà ïðèëîæåíèÿ èëè êîìïîíåíòà. + //! Конструктор для главного лога приложения или компонента. Log( - LogMediaPtr pMedia, //!< [in] Ëîã. - LPCTSTR pszModule //!< [in] Èìÿ ìîäóëÿ. + LogMediaPtr pMedia, //!< [in] Лог. + LPCTSTR pszModule //!< [in] Имя модуля. ); - //! Êîíñòðóêòîð äëÿ ïîä-êîìïîíåíòà. + //! Конструктор для под-компонента. Log( - const LogBase& log, //!< [in] Ëîã. - LPCTSTR pszModule //!< [in] Èìÿ ìîäóëÿ. + const LogBase& log, //!< [in] Лог. + LPCTSTR pszModule //!< [in] Имя модуля. ); virtual ~Log(); void SetParams( - LogMediaPtr pMedia, //!< [in] Íîâûé ëîã. - LPCTSTR pszModule = NULL //!< [in] Íîâîå èìÿ ìîäóëÿ. Ìîæåò áûòü NULL. + LogMediaPtr pMedia, //!< [in] Новый лог. + LPCTSTR pszModule = NULL //!< [in] Новое имя модуля. Может быть NULL. ); - //! Çàïèñûâàåò ôîðìàòèðîâàííîå ñîîáùåíèå. + //! Записывает форматированное сообщение. virtual void WriteVA( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCTSTR pszModule, //!< [in] Èìÿ ìîäóëÿ. - LPCTSTR pszMessage, //!< [in] Ñîîáùåíèå. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCTSTR pszModule, //!< [in] Имя модуля. + LPCTSTR pszMessage, //!< [in] Сообщение. va_list args ) throw(); - //! Çàïèñûâàåò ôîðìàòèðîâàííîå Unicode-ñîîáùåíèå. + //! Записывает форматированное Unicode-сообщение. virtual void WriteVAW( - ELogMessageType type, //!< [in] Òèï ñîîáùåíèÿ. - ELogMessageLevel nLevel,//!< [in] Óðîâåíü âàæíîñòè (L0 - íàèáîëåå âàæíûé). - LPCWSTR pszModule, //!< [in] Èìÿ ìîäóëÿ. - LPCWSTR pszMessage, //!< [in] Ñîîáùåíèå. + ELogMessageType type, //!< [in] Тип сообщения. + ELogMessageLevel nLevel,//!< [in] Уровень важности (L0 - наиболее важный). + LPCWSTR pszModule, //!< [in] Имя модуля. + LPCWSTR pszMessage, //!< [in] Сообщение. va_list args ) throw(); private: @@ -399,11 +399,11 @@ private: }; -//! "Ëîãè÷åñêèé" ëîã ñ ôèëüòðàöèåé. +//! "Логический" лог с фильтрацией. class FilterLog: public Log { - typedef std::tr1::shared_ptr TFilterLogMediaPtr; - TFilterLogMediaPtr GetFilterLogMedia() { return std::tr1::static_pointer_cast(GetMedia()); } + typedef std::shared_ptr TFilterLogMediaPtr; + TFilterLogMediaPtr GetFilterLogMedia() { return std::static_pointer_cast(GetMedia()); } public: FilterLog(const LogParam& param, LPCTSTR pszModule): Log(param, pszModule) { diff --git a/ext/CrashServer/CommonLibs/Log/log_media.h b/ext/CrashServer/CommonLibs/Log/log_media.h index 16b01d36d..fde297865 100644 --- a/ext/CrashServer/CommonLibs/Log/log_media.h +++ b/ext/CrashServer/CommonLibs/Log/log_media.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. diff --git a/ext/CrashServer/CommonLibs/Log/synchro.h b/ext/CrashServer/CommonLibs/Log/synchro.h index 907fcccaa..ee1cfcd4a 100644 --- a/ext/CrashServer/CommonLibs/Log/synchro.h +++ b/ext/CrashServer/CommonLibs/Log/synchro.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. diff --git a/ext/CrashServer/CommonLibs/Stat/stat.cpp b/ext/CrashServer/CommonLibs/Stat/stat.cpp new file mode 100644 index 000000000..9d7a794a3 --- /dev/null +++ b/ext/CrashServer/CommonLibs/Stat/stat.cpp @@ -0,0 +1,235 @@ +// Copyright 2014 Idol Software, Inc. +// +// This file is part of Doctor Dump SDK. +// +// Doctor Dump SDK is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "stat.h" +#include + +namespace wininet +{ + class Error: public std::runtime_error + { + static std::string GetError(const char* text, DWORD err); + public: + Error(const char* text, DWORD err) : std::runtime_error(GetError(text, err)) {} + }; + + class Handle + { + HINTERNET m_handle; + public: + Handle(HINTERNET handle = NULL) : m_handle(handle) {} + ~Handle() { if (m_handle) InternetCloseHandle(m_handle); } + operator HINTERNET() { return m_handle; } + operator bool() { return m_handle != NULL; } + }; + + std::vector ReadFile(HINTERNET hRequest); + + std::string EscapeString(const std::string& text); +} + +using namespace wininet; + +std::string wininet::Error::GetError(const char* text, DWORD err) +{ + char buf[1024]; + sprintf_s(buf, "%s, error %d", text, err); + return buf; +} + +std::vector wininet::ReadFile(HINTERNET hRequest) +{ + std::vector result; + DWORD bytesAvailable; + while (InternetQueryDataAvailable(hRequest, &bytesAvailable, 0, 0)) + { + size_t cur = result.size(); + result.resize(cur + bytesAvailable); + DWORD bytesRead = 0; + bool res = !!InternetReadFile(hRequest, result.data() + cur, bytesAvailable, &bytesRead); + result.resize(cur + bytesRead); + if (!res || bytesRead == 0) + break; + } + return result; +} + +std::string wininet::EscapeString(const std::string& text) +{ + std::string result; + result.resize(text.size() * 3); + DWORD size = 0; + if (!AtlEscapeUrl(text.c_str(), &result.front(), &size, (DWORD)result.size(), ATL_URL_ENCODE_PERCENT)) + { + result.resize(size * 3); + if (!AtlEscapeUrl(text.c_str(), &result.front(), &size, (DWORD)result.size(), ATL_URL_ENCODE_PERCENT)) + throw Error("AtlEscapeUrl failed", 0); + } + result.resize(size - 1); + return result; +} + +std::vector statistics::HttpPost(LPCTSTR agent, const CUrl& url, LPCTSTR* accept, LPCTSTR hdrs, LPVOID postData, DWORD postDataSize, DWORD& responseCode) +{ + Handle hSession(InternetOpen(agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0)); + if (!hSession) + throw Error("InternetOpen failed", GetLastError()); + + Handle hConnect(InternetConnect(hSession, url.GetHostName(), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1)); + if (!hConnect) + throw Error("InternetConnect failed", GetLastError()); + + Handle hRequest(HttpOpenRequest(hConnect, _T("POST"), url.GetUrlPath(), NULL, NULL, accept, 0, INTERNET_NO_CALLBACK)); + if (!hRequest) + throw Error("HttpOpenRequest failed", GetLastError()); + + if (!HttpSendRequest(hRequest, hdrs, -1, postData, postDataSize)) + throw Error("HttpSendRequest failed", GetLastError()); + + DWORD size = sizeof(responseCode); + HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &responseCode, &size, NULL); + return ReadFile(hRequest); +} + +std::vector statistics::HttpPostXWwwFormUrlencoded(LPCTSTR agent, const CUrl& url, LPCTSTR* accept, const Params& query, DWORD& responseCode) +{ + LPCTSTR hdrs = _T("Content-Type: application/x-www-form-urlencoded"); + + std::string postData; + for each (auto& var in query) + { + if (!postData.empty()) + postData += "&"; + postData += EscapeString(var.first) + "=" + EscapeString(var.second); + } + + return HttpPost(agent, url, accept, hdrs, (LPVOID)postData.c_str(), (DWORD)postData.size(), responseCode); +} + +namespace statistics +{ + BOOL IsWow64() + { + typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); + LPFN_ISWOW64PROCESS fnIsWow64Process = NULL; + + BOOL bIsWow64 = FALSE; + + HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32")); + if (NULL != hKernel32) + fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(hKernel32,"IsWow64Process"); + + if (NULL != fnIsWow64Process) + fnIsWow64Process(GetCurrentProcess(), &bIsWow64); + + return bIsWow64; + } + + std::string GetMachineGuid() + { + std::string result; + HKEY hCryptography; +#if defined (_WIN64) + DWORD param = 0; +#else + DWORD param = IsWow64() ? KEY_WOW64_64KEY : 0; +#endif + if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Cryptography"), 0, KEY_READ|param, &hCryptography)) + { + result.resize(1024); + DWORD size = (DWORD)result.size(); + if (ERROR_SUCCESS == RegQueryValueExA(hCryptography, "MachineGuid", NULL, NULL, (LPBYTE)&result.front(), &size)) + result.resize(size); + else + result = "unknown"; + RegCloseKey(hCryptography); + } + return result; + } + + std::string GetCurrentProcessVersion() + { + TCHAR path[MAX_PATH]; + if (!GetModuleFileName(NULL, path, _countof(path))) + return "0.0.0.0"; + + std::vector verInfo(GetFileVersionInfoSize(path, NULL)); + VS_FIXEDFILEINFO* lpFileinfo = NULL; + UINT uLen; + if (verInfo.empty() + || !GetFileVersionInfo(path, 0, static_cast(verInfo.size()), &verInfo[0]) + || !VerQueryValue(&verInfo[0], _T("\\"), (LPVOID*)&lpFileinfo, &uLen)) + return "0.0.0.0"; + + char version[128]; + sprintf_s(version, "%d.%d.%d.%d", + HIWORD(lpFileinfo->dwProductVersionMS), + LOWORD(lpFileinfo->dwProductVersionMS), + HIWORD(lpFileinfo->dwProductVersionLS), + LOWORD(lpFileinfo->dwProductVersionLS)); + return version; + } +} + +bool statistics::SendExceptionToGoogleAnalytics(LPCSTR tid, const std::string& cid, const std::string& appName, const std::string& appVersion, const std::string& exceptionDescr, bool exceptionFatal) +{ + try + { + CUrl url; +#ifdef _DEBUG + url.CrackUrl(_T("http://httpbin.org/post")); +#else + url.CrackUrl(_T("http://www.google-analytics.com/collect")); +#endif + LPCTSTR accept[]= { _T("*/*"), NULL }; + Params query; + query.emplace_back(Param("v", "1")); + query.emplace_back(Param("tid", tid)); + query.emplace_back(Param("cid", cid)); + query.emplace_back(Param("t", "exception")); + query.emplace_back(Param("an", appName)); + query.emplace_back(Param("av", appVersion)); + query.emplace_back(Param("exd", exceptionDescr)); + query.emplace_back(Param("exf", exceptionFatal ? "1" : "0")); + + DWORD responseCode = 0; + std::vector data = HttpPostXWwwFormUrlencoded(_T("MyAgent"), url, accept, query, responseCode); +#ifdef _DEBUG + printf("HTTP %d\n", responseCode); + data.push_back(0); + printf("%s", (LPCSTR)data.data()); +#endif + return true; + } + catch (std::exception& ex) + { + UNREFERENCED_PARAMETER(ex); +#ifdef _DEBUG + printf("Error: %s\n", ex.what()); +#endif + return false; + } +} + +bool statistics::SendExceptionToGoogleAnalytics( + LPCSTR tid, + const std::string& appName, + const std::string& exceptionDescr, + bool exceptionFatal) +{ + return SendExceptionToGoogleAnalytics(tid, GetMachineGuid(), appName, GetCurrentProcessVersion(), exceptionDescr, exceptionFatal); +} diff --git a/ext/CrashServer/CommonLibs/Stat/stat.h b/ext/CrashServer/CommonLibs/Stat/stat.h new file mode 100644 index 000000000..853c467a3 --- /dev/null +++ b/ext/CrashServer/CommonLibs/Stat/stat.h @@ -0,0 +1,62 @@ +// Copyright 2014 Idol Software, Inc. +// +// This file is part of Doctor Dump SDK. +// +// Doctor Dump SDK is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + + +#pragma once + +#include +#include +#include +#include +#include + +#pragma comment(lib,"Wininet.lib") + +namespace ATL +{ + class CUrl; // #include +} + +namespace statistics +{ + std::vector HttpPost(LPCTSTR agent, const ATL::CUrl& url, LPCTSTR* accept, LPCTSTR hdrs, LPVOID postData, DWORD postDataSize, DWORD& responseCode); + + typedef std::pair Param; + typedef std::vector Params; + + std::vector HttpPostXWwwFormUrlencoded( + LPCTSTR agent, + const ATL::CUrl& url, + LPCTSTR* accept, + const Params& query, + DWORD& responseCode); + + bool SendExceptionToGoogleAnalytics( + LPCSTR tid, + const std::string& cid, + const std::string& appName, + const std::string& appVersion, + const std::string& exceptionDescr, + bool exceptionFatal); + + bool SendExceptionToGoogleAnalytics( + LPCSTR tid, + const std::string& appName, + const std::string& exceptionDescr, + bool exceptionFatal); +} + diff --git a/ext/CrashServer/CommonLibs/Version/version.h b/ext/CrashServer/CommonLibs/Version/version.h index 3eeb2db15..3cccf6d8a 100644 --- a/ext/CrashServer/CommonLibs/Version/version.h +++ b/ext/CrashServer/CommonLibs/Version/version.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. diff --git a/ext/CrashServer/CommonLibs/Version/version.rc b/ext/CrashServer/CommonLibs/Version/version.rc index 72e2ff003..1cb4df94d 100644 --- a/ext/CrashServer/CommonLibs/Version/version.rc +++ b/ext/CrashServer/CommonLibs/Version/version.rc @@ -51,7 +51,7 @@ #endif #ifndef VERSION_LEGALCOPYRIGHT_STR -# define VERSION_LEGALCOPYRIGHT_STR "Copyright (C) " VERSION_COMPANYNAME_STR " 2012" +# define VERSION_LEGALCOPYRIGHT_STR "Copyright (C) " VERSION_COMPANYNAME_STR " 2014" #endif #ifndef VERSION_ORIGINALFILENAME_STR diff --git a/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.cpp b/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.cpp index b9a765203..fa44f2ec1 100644 --- a/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.cpp +++ b/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -25,11 +25,19 @@ using namespace std; +extern "C" voidpf ZCALLBACK win32_open64_file_funcW(voidpf opaque,const void* filename,int mode); + Zip::Zip(LPCWSTR pszFilename, bool append) { zlib_filefunc_def ffunc; fill_win32_filefunc(&ffunc); - m_zf = zipOpen2(CW2CT(pszFilename), append ? APPEND_STATUS_ADDINZIP : APPEND_STATUS_CREATE, NULL, &ffunc); +#if ZLIB128 + // Hack used to force Unicode version of CreateFile in ANSI zipOpen2 function + ffunc.zopen_file = (open_file_func) win32_open64_file_funcW; + m_zf = zipOpen2((const char*)pszFilename, append ? APPEND_STATUS_ADDINZIP : APPEND_STATUS_CREATE, NULL, &ffunc); +#else + m_zf = zipOpen2((const char*)CW2A(pszFilename), append ? APPEND_STATUS_ADDINZIP : APPEND_STATUS_CREATE, NULL, &ffunc); +#endif if (!m_zf) throw runtime_error(append ? "failed to append zip file" : "failed to create zip file"); @@ -40,7 +48,7 @@ Zip::~Zip(void) zipClose(m_zf, NULL); } -void Zip::AddFile(LPCWSTR pszFilename, LPCWSTR pszFilenameInZip) +void Zip::AddFile(LPCWSTR pszFilename, LPCWSTR pszFilenameInZip, bool* cancel) { zip_fileinfo zi = {}; @@ -49,12 +57,20 @@ void Zip::AddFile(LPCWSTR pszFilename, LPCWSTR pszFilenameInZip) if (hFind == INVALID_HANDLE_VALUE) throw runtime_error("file to add to zip not found"); + if (!pszFilenameInZip) + { + LPCWSTR slashPos = wcsrchr(pszFilename, L'\\'); + if (!slashPos) + slashPos = wcsrchr(pszFilename, L'/'); + pszFilenameInZip = slashPos ? slashPos + 1 : pszFilename; + } + FILETIME ftLocal; FileTimeToLocalFileTime(&(ff.ftLastWriteTime), &ftLocal); FileTimeToDosDateTime(&ftLocal, ((LPWORD)&zi.dosDate)+1, ((LPWORD)&zi.dosDate)+0); FindClose(hFind); - int err = zipOpenNewFileInZip3(m_zf, CW2CT(pszFilenameInZip), &zi, + int err = zipOpenNewFileInZip3(m_zf, CW2A(pszFilenameInZip), &zi, NULL, 0, NULL, 0, NULL /* comment*/, Z_DEFLATED, Z_BEST_COMPRESSION, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, @@ -75,73 +91,51 @@ void Zip::AddFile(LPCWSTR pszFilename, LPCWSTR pszFilenameInZip) err = zipWriteInFileInZip(m_zf, buf, dwReaded); if (err != ZIP_OK) throw runtime_error("failed to write to zip"); + if (cancel && *cancel) + throw std::runtime_error("canceled"); } if (ZIP_OK != zipCloseFileInZip(m_zf)) throw runtime_error("failed to finalize file in zip"); } -Unzip::Unzip() - : m_uf(NULL) -{ -} - -Unzip::~Unzip() -{ - unzClose(m_uf); -} - -void Unzip::Open(LPCWSTR pszFilename) +static unzFile Unzip_Open(LPCWSTR pszFilename) { zlib_filefunc_def ffunc; fill_win32_filefunc(&ffunc); - m_uf = unzOpen2(CW2CT(pszFilename), &ffunc); - - if (!m_uf) + unzFile uf = unzOpen2(CW2CT(pszFilename), &ffunc); + if (!uf) throw runtime_error("failed to open zip file"); + return uf; } -void Unzip::Extract(LPCWSTR pszFolder) +static CStringW Unzip_GetCurentFilePath(unzFile uf, FILETIME& ftLocal) { - unz_global_info gi; - if (UNZ_OK != unzGetGlobalInfo(m_uf, &gi)) - throw runtime_error("failed to unzGetGlobalInfo"); - - vector buf(8192); + unz_file_info file_info; + CStringA pathA; + const int pathLen = 256; + if (UNZ_OK != unzGetCurrentFileInfo(uf, &file_info, pathA.GetBuffer(pathLen), pathLen, NULL, 0, NULL, 0)) + throw runtime_error("failed to unzGetCurrentFileInfo"); + pathA.ReleaseBuffer(-1); + DosDateTimeToFileTime((WORD)(file_info.dosDate>>16), (WORD)file_info.dosDate, &ftLocal); + return CStringW(pathA); +} - for (uLong i = 0; i < gi.number_entry; ++i) +static void Unzip_ExtractFile(unzFile uf, const CStringW& path, DWORD flagsAndAttributes, FILETIME ftLocal) +{ + try { - unz_file_info file_info; - CStringA pathA; - const int pathLen = 256; - if (UNZ_OK != unzGetCurrentFileInfo(m_uf, &file_info, pathA.GetBuffer(pathLen), pathLen, NULL, 0, NULL, 0)) - throw runtime_error("failed to unzGetCurrentFileInfo"); - pathA.ReleaseBuffer(-1); - CStringW path = pszFolder; - path += L'\\'; - path += pathA; - - CStringW filename = path.Mid(path.ReverseFind(L'\\') + 1); - - if (filename.IsEmpty()) - { - if (!CreateDirectoryW(path, NULL)) - throw runtime_error("failed to CreateDirectory"); - continue; - } - - if (UNZ_OK != unzOpenCurrentFilePassword(m_uf, NULL)) + if (UNZ_OK != unzOpenCurrentFilePassword(uf, NULL)) throw runtime_error("failed to unzOpenCurrentFilePassword"); - CAtlFile file(CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); + CAtlFile file(CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, flagsAndAttributes, NULL)); if (file == INVALID_HANDLE_VALUE) throw runtime_error("failed to CreateFile"); - m_files.push_back(path); - + vector buf(8192); while (1) { - int size = unzReadCurrentFile(m_uf, &buf[0], (unsigned int)buf.size()); + int size = unzReadCurrentFile(uf, &buf[0], (unsigned int)buf.size()); if (size < 0) throw runtime_error("failed to unzReadCurrentFile"); if (size == 0) @@ -151,16 +145,138 @@ void Unzip::Extract(LPCWSTR pszFolder) throw runtime_error("failed to WriteFile"); } - FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; + FILETIME ftm, ftCreate, ftLastAcc, ftLastWrite; GetFileTime(file, &ftCreate, &ftLastAcc, &ftLastWrite); - DosDateTimeToFileTime((WORD)(file_info.dosDate>>16), (WORD)file_info.dosDate,&ftLocal); LocalFileTimeToFileTime(&ftLocal, &ftm); SetFileTime(file, &ftm, &ftLastAcc, &ftm); - if (UNZ_OK != unzCloseCurrentFile(m_uf)) + if (UNZ_OK != unzCloseCurrentFile(uf)) throw runtime_error("failed to unzCloseCurrentFile"); + } + catch (...) + { + DeleteFileW(path); + } +} + +std::vector Unzip::Extract(LPCWSTR pszFilename, LPCWSTR pszFolder, std::function predicate) +{ + std::vector result; + + unzFile uf = NULL; + try + { + uf = Unzip_Open(pszFilename); - if (i + 1 < gi.number_entry && UNZ_OK != unzGoToNextFile(m_uf)) - throw runtime_error("failed to unzGoToNextFile"); + unz_global_info gi; + if (UNZ_OK != unzGetGlobalInfo(uf, &gi)) + throw runtime_error("failed to unzGetGlobalInfo"); + + for (uLong i = 0; i < gi.number_entry; ++i) + { + FILETIME ftLocal; + CStringW path = CStringW(pszFolder) + L'\\' + Unzip_GetCurentFilePath(uf, ftLocal); + + CStringW filename = path.Mid(path.ReverseFind(L'\\') + 1); + if (filename.IsEmpty()) + { + if (!CreateDirectoryW(path, NULL)) + throw runtime_error("failed to CreateDirectory"); + continue; + } + + DWORD flagsAndAttributes = FILE_ATTRIBUTE_NORMAL; + if (predicate(path, flagsAndAttributes)) + { + Unzip_ExtractFile(uf, path, flagsAndAttributes, ftLocal); + result.push_back(path); + } + + if (i + 1 < gi.number_entry && UNZ_OK != unzGoToNextFile(uf)) + throw runtime_error("failed to unzGoToNextFile"); + } + unzClose(uf); + + return result; + } + catch (...) + { + if (uf != NULL) + unzClose(uf); + for each (auto file in result) + DeleteFileW(file); + throw; + } +} + +std::vector Unzip::Extract(LPCWSTR pszFilename, LPCWSTR pszFolder) +{ + return Extract(pszFilename, pszFolder, [](LPCWSTR filePath, DWORD& flagsAndAttributes) { return true; }); +} + +bool DeflateBuffer(const BYTE* buffer, size_t bufferLen, std::vector& outBuffer, const char* dictionary) +{ + z_stream stream = {}; + deflateInit(&stream, Z_BEST_COMPRESSION); + outBuffer.resize(deflateBound(&stream, static_cast(bufferLen))); + if (dictionary) + deflateSetDictionary(&stream, (const Bytef*)dictionary, static_cast(strlen(dictionary))); + stream.next_in = (Bytef*)buffer; + stream.avail_in = static_cast(bufferLen); + stream.next_out = &outBuffer[0]; + stream.avail_out = static_cast(outBuffer.size()); + while (1) + { + switch (deflate(&stream, Z_FINISH)) + { + case Z_STREAM_END: + outBuffer.resize(outBuffer.size() - stream.avail_out); + deflateEnd(&stream); + return true; + case Z_OK: + stream.avail_out += static_cast(outBuffer.size()); + outBuffer.resize(outBuffer.size() * 2); + stream.next_out = &outBuffer[outBuffer.size() - stream.avail_out]; + break; + default: + deflateEnd(&stream); + return false; + } + } +} + +bool InflateBuffer(const BYTE* buffer, size_t bufferLen, std::vector& outBuffer, const char* dictionary) +{ + z_stream stream = {}; + stream.next_in = (Bytef*)buffer; + stream.avail_in = static_cast(bufferLen); + inflateInit(&stream); + outBuffer.resize(2*bufferLen); + stream.next_out = &outBuffer[0]; + stream.avail_out = static_cast(outBuffer.size()); + while (1) + { + switch (inflate(&stream, 0)) + { + case Z_NEED_DICT: + if (!dictionary || Z_OK != inflateSetDictionary(&stream, (const Bytef*)dictionary, static_cast(strlen(dictionary)))) + { + inflateEnd(&stream); + return false; + } + break; + case Z_STREAM_END: + outBuffer.resize(outBuffer.size() - stream.avail_out); + inflateEnd(&stream); + return true; + case Z_OK: + stream.avail_out += static_cast(outBuffer.size()); + outBuffer.resize(outBuffer.size() * 2); + stream.next_out = &outBuffer[outBuffer.size() - stream.avail_out]; + break; + default: + inflateEnd(&stream); + return false; + } } } diff --git a/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.h b/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.h index 041a58e9e..b10589af7 100644 --- a/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.h +++ b/ext/CrashServer/CommonLibs/Zlib/ZipUnzip.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -19,6 +19,7 @@ #include #include +#include typedef void* zipFile; typedef void* unzFile; @@ -29,7 +30,7 @@ public: Zip(LPCWSTR pszFilename, bool append = false); ~Zip(); - void AddFile(LPCWSTR pszFilename, LPCWSTR pszFilenameInZip); + void AddFile(LPCWSTR pszFilename, LPCWSTR pszFilenameInZip = nullptr, bool* cancel = nullptr); private: zipFile m_zf; @@ -38,14 +39,9 @@ private: class Unzip { public: - Unzip(); - ~Unzip(); - - void Open(LPCWSTR pszFilename); - void Extract(LPCWSTR pszFolder); - - std::vector m_files; - -private: - unzFile m_uf; + static std::vector Extract(LPCWSTR pszFilename, LPCWSTR pszFolder, std::function predicate); + static std::vector Extract(LPCWSTR pszFilename, LPCWSTR pszFolder); }; + +bool DeflateBuffer(const BYTE* buffer, size_t bufferLen, std::vector& outBuffer, const char* dictionary); +bool InflateBuffer(const BYTE* buffer, size_t bufferLen, std::vector& outBuffer, const char* dictionary); \ No newline at end of file diff --git a/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj b/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj index 96c56b855..a1637e78f 100644 --- a/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj +++ b/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj @@ -28,7 +28,9 @@ StaticLibrary MultiByte - false + + + true @@ -39,7 +41,7 @@ $(ProjectDir)..\..\external\zlib123;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + NOCRYPT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) NotUsing @@ -53,36 +55,35 @@ + + + - - - - + + + + + + - + - - - - - - diff --git a/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj.filters b/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj.filters index b8468711f..6c190b0bc 100644 --- a/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj.filters +++ b/ext/CrashServer/CommonLibs/Zlib/Zlib.vcxproj.filters @@ -9,8 +9,24 @@ {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {3dc059d6-bb27-400a-98a5-7dd2571380c7} + + + {5fdbc241-eaa2-4a6e-858f-56e0ef87e1ec} + + + {b111a0de-3137-481f-a49e-a34a34b797f0} + + + My + Source Files @@ -38,39 +54,36 @@ Source Files - - Source Files - - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - - Header Files + + My - + Header Files @@ -88,35 +101,38 @@ Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + + Header Files + + + Header Files + + Header Files - - - \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.cpp b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.cpp index 7bdd4a2da..db115a2e5 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.cpp +++ b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -20,6 +20,7 @@ #include "CrashHandlerExport.h" #include "..\SendRpt\Config.h" #include "..\SendRpt\Serializer.h" +#include "..\..\CommonLibs\Log\synchro.h" #include #include @@ -32,60 +33,46 @@ LPTOP_LEVEL_EXCEPTION_FILTER g_prevTopLevelExceptionFilter = NULL; // It should not be destroyed on PROCESS_DETACH, because it may be used later if someone will crash on deinitialization // so it is on heap, but not static (runtime destroy static objects on PROCESS_DETACH) Config* g_pConfig = new Config(); +CriticalSection g_configCS; DWORD g_tlsPrevTerminatePtr = TLS_OUT_OF_INDEXES; typedef terminate_function (__cdecl *pfn_set_terminate)(terminate_function); pfn_set_terminate g_set_terminate = NULL; -enum CrashServerCustomExceptionCodes +enum DoctorDumpCustomExceptionCodes { - CRASHSERVER_EXCEPTION_ASSERTION_VIOLATED = CrashHandler::ExceptionAssertionViolated, // 0xCCE17000 - CRASHSERVER_EXCEPTION_CPP_TERMINATE = 0xCCE17001, - CRASHSERVER_EXCEPTION_CPP_PURE_CALL = 0xCCE17002, - CRASHSERVER_EXCEPTION_CPP_INVALID_PARAMETER = 0xCCE17003, + DOCTORDUMP_EXCEPTION_ASSERTION_VIOLATED = CrashHandler::ExceptionAssertionViolated, // 0xCCE17000 + DOCTORDUMP_EXCEPTION_CPP_TERMINATE = 0xCCE17001, + DOCTORDUMP_EXCEPTION_CPP_PURE_CALL = 0xCCE17002, + DOCTORDUMP_EXCEPTION_CPP_INVALID_PARAMETER = 0xCCE17003, }; -void ExtractFileFromResource(HMODULE hModule, DWORD resId, LPCTSTR path) +class Error: public std::exception { - HRSRC hDbghelpRes = FindResource(hModule, MAKEINTRESOURCE(resId), RT_RCDATA); - if (!hDbghelpRes) - throw runtime_error("failed to find file in resources"); - - HGLOBAL hDbghelpGlobal = LoadResource(hModule, hDbghelpRes); - if (!hDbghelpGlobal) - throw runtime_error("failed to load file from resources"); +public: + Error(const char* format, ...) + { + va_list ap; + va_start(ap, format); + m_description.FormatV(format, ap); + va_end(ap); + } - CAtlFile hFile(CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); - if (hFile == INVALID_HANDLE_VALUE) - throw runtime_error("failed to create file"); + const char* what() const { return m_description; } - if (FAILED(hFile.Write(LockResource(hDbghelpGlobal), SizeofResource(hModule, hDbghelpRes)))) - throw runtime_error("failed to write file"); -} +private: + CStringA m_description; +}; DWORD WINAPI SendReportThread(LPVOID lpParameter) { InterlockedIncrement(&g_insideCrashHandler); - //::MessageBoxA(0, "SendReportThread", "SendReportThread", 0); MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo = (MINIDUMP_EXCEPTION_INFORMATION*)lpParameter; try { - WCHAR sendRptExe[MAX_PATH], drive[4], dir[MAX_PATH], fname[MAX_PATH], ext[MAX_PATH]; - GetModuleFileNameW(NULL, sendRptExe, _countof(sendRptExe)); - _wsplitpath_s(sendRptExe, drive, dir, fname, ext); - _wmakepath_s(sendRptExe, drive, dir, L"SendRpt", L".exe"); - bool localSendRpt = 0 == _waccess_s(sendRptExe, 00/* Existence only */); - if (!localSendRpt) - { - GetTempPathW(_countof(sendRptExe), sendRptExe); - wcscat_s(sendRptExe, L"SendRpt.exe"); - - ExtractFileFromResource(g_hThisDLL, IDR_SENDRPT, sendRptExe); - } - - CString cmd; - cmd.Format(_T("\"%s\" "), sendRptExe); + CStringW cmd; + cmd.Format(L"\"%ls\" ", (LPCWSTR)g_pConfig->SendRptPath); CHandle hProcess; DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(), &hProcess.m_h, PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | THREAD_ALL_ACCESS, TRUE, 0); @@ -93,20 +80,28 @@ DWORD WINAPI SendReportThread(LPVOID lpParameter) CHandle hReportReady(CreateEvent(NULL, TRUE, FALSE, NULL)); SetHandleInformation(hReportReady, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT); + auto er = pExceptInfo->ExceptionPointers->ExceptionRecord; + Params param; param.Process = hProcess; param.ProcessId = GetCurrentProcessId(); param.ExceptInfo = *pExceptInfo; - param.WasAssert = pExceptInfo->ExceptionPointers->ExceptionRecord->ExceptionCode == CRASHSERVER_EXCEPTION_ASSERTION_VIOLATED; + param.WasAssert = er->ExceptionCode == DOCTORDUMP_EXCEPTION_ASSERTION_VIOLATED; param.ReportReady = hReportReady; + if (param.WasAssert && er->NumberParameters == 1 && er->ExceptionInformation[0]) + param.Group = reinterpret_cast(er->ExceptionInformation[0]); Serializer ser; - ser << param << *g_pConfig; + ser << param; + { + CriticalSection::SyncLock lock(g_configCS); + ser << *g_pConfig; + } cmd.Append(ser.GetHex()); STARTUPINFO si = {sizeof(si)}; PROCESS_INFORMATION pi; - if (!CreateProcess(NULL, cmd.GetBuffer(), NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) + if (!CreateProcessW(NULL, cmd.GetBuffer(), NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) throw std::runtime_error("failed to start SendRpt"); CloseHandle(pi.hThread); @@ -115,10 +110,6 @@ DWORD WINAPI SendReportThread(LPVOID lpParameter) CloseHandle(pi.hProcess); - // if hReportReady event signaled, SendRpt is still working, so delete only when SendRpt has finished. - if (!localSendRpt && handles[res - WAIT_OBJECT_0] == pi.hProcess) - DeleteFileW(sendRptExe); - InterlockedDecrement(&g_insideCrashHandler); return TRUE; @@ -160,7 +151,7 @@ LONG SendReport(EXCEPTION_POINTERS* pExceptionPointers) SendReportThread(&exceptInfo); } - if (pExceptionPointers->ExceptionRecord->ExceptionCode == CRASHSERVER_EXCEPTION_ASSERTION_VIOLATED) + if (pExceptionPointers->ExceptionRecord->ExceptionCode == DOCTORDUMP_EXCEPTION_ASSERTION_VIOLATED) return EXCEPTION_CONTINUE_EXECUTION; return g_pConfig->UseWER ? EXCEPTION_CONTINUE_SEARCH : EXCEPTION_EXECUTE_HANDLER; @@ -175,6 +166,8 @@ LONG WINAPI TopLevelExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) return EXCEPTION_CONTINUE_SEARCH; } + DisableProcessWindowsGhosting(); + return SendReport(pExceptionPointers); } @@ -192,7 +185,7 @@ LONG CALLBACK VectoredExceptionHandler(EXCEPTION_POINTERS* pExceptionPointers) // Asserts should be handled in VectoredExceptionHandler since EXCEPTION_CONTINUE_EXECUTION is used // and __try { ... } __except(EXCEPTION_EXECUTE_HANDLER) { ... } in the way to TopLevelExceptionFilter // may break this logic. - if (pExceptionPointers->ExceptionRecord->ExceptionCode == CRASHSERVER_EXCEPTION_ASSERTION_VIOLATED) + if (pExceptionPointers->ExceptionRecord->ExceptionCode == DOCTORDUMP_EXCEPTION_ASSERTION_VIOLATED) return SendReport(pExceptionPointers); return EXCEPTION_CONTINUE_SEARCH; @@ -273,14 +266,9 @@ void ReenableSetUnhandledExceptionFilter() // This code should be inplace, so it is a macro #define SendReportWithCode(code) __try { RaiseException(code, EXCEPTION_NONCONTINUABLE, 0, NULL); } __except(TopLevelExceptionFilter(GetExceptionInformation())) {} -void CrashServer_SendAssertionViolated() -{ - RaiseException(CRASHSERVER_EXCEPTION_ASSERTION_VIOLATED, 0, 0, NULL); -} - -void CrashServer_TerminateHandler() +void SkipDoctorDump_TerminateHandler() { - SendReportWithCode(CRASHSERVER_EXCEPTION_CPP_TERMINATE); + SendReportWithCode(DOCTORDUMP_EXCEPTION_CPP_TERMINATE); if (g_tlsPrevTerminatePtr != TLS_OUT_OF_INDEXES) { @@ -293,28 +281,28 @@ void CrashServer_TerminateHandler() ExitProcess(0); } -void CrashServer_PureCallHandler() +void SkipDoctorDump_PureCallHandler() { - SendReportWithCode(CRASHSERVER_EXCEPTION_CPP_PURE_CALL); + SendReportWithCode(DOCTORDUMP_EXCEPTION_CPP_PURE_CALL); ExitProcess(0); } -void CrashServer_InvalidParameterHandler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t) +void SkipDoctorDump_InvalidParameterHandler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t) { - SendReportWithCode(CRASHSERVER_EXCEPTION_CPP_INVALID_PARAMETER); + SendReportWithCode(DOCTORDUMP_EXCEPTION_CPP_INVALID_PARAMETER); ExitProcess(0); } -void CrashServer_SigAbrtHandler(int) +void SkipDoctorDump_SigAbrtHandler(int) { - SendReportWithCode(CRASHSERVER_EXCEPTION_CPP_TERMINATE); + SendReportWithCode(DOCTORDUMP_EXCEPTION_CPP_TERMINATE); ExitProcess(0); } void MakePerThreadInitialization() { if (g_tlsPrevTerminatePtr != TLS_OUT_OF_INDEXES && g_set_terminate) - TlsSetValue(g_tlsPrevTerminatePtr, g_set_terminate(CrashServer_TerminateHandler)); + TlsSetValue(g_tlsPrevTerminatePtr, g_set_terminate(SkipDoctorDump_TerminateHandler)); } void InitCrtErrorHandlers() @@ -327,6 +315,7 @@ void InitCrtErrorHandlers() _T("msvcr100"), _T("msvcr100d"), _T("msvcr110"), _T("msvcr110d"), _T("msvcr120"), _T("msvcr120d"), + _T("msvcr130"), _T("msvcr130d"), }; HMODULE hMsvcrDll = NULL; @@ -341,132 +330,227 @@ void InitCrtErrorHandlers() typedef _purecall_handler (__cdecl *pfn_set_purecall_handler)(_purecall_handler); pfn_set_purecall_handler l_set_purecall_handler = (pfn_set_purecall_handler) GetProcAddress(hMsvcrDll, "_set_purecall_handler"); if (l_set_purecall_handler) - l_set_purecall_handler(CrashServer_PureCallHandler); + l_set_purecall_handler(SkipDoctorDump_PureCallHandler); typedef _invalid_parameter_handler (__cdecl *pfn_set_invalid_parameter_handler)(_invalid_parameter_handler); pfn_set_invalid_parameter_handler l_set_invalid_parameter_handler = (pfn_set_invalid_parameter_handler) GetProcAddress(hMsvcrDll, "_set_invalid_parameter_handler"); if (l_set_invalid_parameter_handler) - l_set_invalid_parameter_handler(CrashServer_InvalidParameterHandler); + l_set_invalid_parameter_handler(SkipDoctorDump_InvalidParameterHandler); typedef void (__cdecl *pfn_signal)(int sig, void (__cdecl *func)(int)); pfn_signal l_signal = (pfn_signal) GetProcAddress(hMsvcrDll, "signal"); if (l_signal) - l_signal(SIGABRT, CrashServer_SigAbrtHandler); + l_signal(SIGABRT, SkipDoctorDump_SigAbrtHandler); +} + +CStringW GetProcessName() +{ + WCHAR path[MAX_PATH], drive[MAX_PATH], dir[MAX_PATH], fname[MAX_PATH], ext[MAX_PATH]; + GetModuleFileNameW(NULL, path, _countof(path)); + _wsplitpath_s(path, drive, dir, fname, ext); + CStringW processName = CStringW(fname) + ext; + processName.MakeLower(); + return processName; } BOOL InitCrashHandler(ApplicationInfo* applicationInfo, HandlerSettings* handlerSettings, BOOL ownProcess) { -#define IS_EXIST(field) (FIELD_OFFSET(ApplicationInfo, field) < applicationInfo->ApplicationInfoSize) - if (applicationInfo == NULL - || applicationInfo->ApplicationInfoSize == 0 - || applicationInfo->ApplicationInfoSize > sizeof(ApplicationInfo) - || !IS_EXIST(ApplicationGUID) || applicationInfo->ApplicationGUID == NULL - || !IS_EXIST(Prefix) || applicationInfo->Prefix == NULL - || !IS_EXIST(AppName) || applicationInfo->AppName == NULL - || !IS_EXIST(Company) || applicationInfo->Company == NULL) + try { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } + CriticalSection::SyncLock lock(g_configCS); - g_pConfig->ApplicationGUID = applicationInfo->ApplicationGUID; - g_pConfig->Prefix = applicationInfo->Prefix; - g_pConfig->AppName = applicationInfo->AppName; - g_pConfig->Company = applicationInfo->Company; - if (IS_EXIST(V)) - memcpy(g_pConfig->V, applicationInfo->V, sizeof(applicationInfo->V)); - else - memset(g_pConfig->V, 0, sizeof(g_pConfig->V)); - if (IS_EXIST(Hotfix)) - g_pConfig->Hotfix = applicationInfo->Hotfix; - else - g_pConfig->Hotfix = 0; - if (IS_EXIST(PrivacyPolicyUrl) && applicationInfo->PrivacyPolicyUrl != NULL) - g_pConfig->PrivacyPolicyUrl = applicationInfo->PrivacyPolicyUrl; - else - g_pConfig->PrivacyPolicyUrl.Format(L"http://www.crash-server.com/AppPrivacyPolicy.aspx?AppID=%s", (LPCWSTR)g_pConfig->ApplicationGUID); + CStringW processName = GetProcessName(); + +#define IS_EXIST(field) (FIELD_OFFSET(ApplicationInfo, field) < applicationInfo->ApplicationInfoSize) + if (applicationInfo == NULL || applicationInfo->ApplicationInfoSize == 0) + { + throw Error("Wrong ApplicationInfo size."); + } + + if (applicationInfo->ApplicationInfoSize > sizeof(ApplicationInfo)) + { + throw Error("Wrong ApplicationInfo size, should be no more than %d bytes.", sizeof(ApplicationInfo)); + } + + if (!IS_EXIST(ApplicationGUID) || applicationInfo->ApplicationGUID == NULL + || !IS_EXIST(AppName) || applicationInfo->AppName == NULL + || !IS_EXIST(Company) || applicationInfo->Company == NULL) + { + throw Error("Some parameters missing in ApplicationInfo."); + } + + g_pConfig->ApplicationGUID = applicationInfo->ApplicationGUID; + g_pConfig->Prefix = applicationInfo->Prefix ? CStringW(CA2W(applicationInfo->Prefix)) : processName; + g_pConfig->AppName = applicationInfo->AppName; + g_pConfig->Company = applicationInfo->Company; + + if (g_pConfig->ApplicationGUID == "00000000-0000-0000-0000-000000000000") + throw Error("Generate new GUID for ApplicationGUID."); + if (g_pConfig->AppName == "{AppName}") + throw Error("Set correct application name."); + if (g_pConfig->Company == "{Company}") + throw Error("Set correct company name."); + + if (IS_EXIST(V)) + memcpy(g_pConfig->V, applicationInfo->V, sizeof(applicationInfo->V)); + else + memset(g_pConfig->V, 0, sizeof(g_pConfig->V)); + if (IS_EXIST(Hotfix)) + g_pConfig->Hotfix = applicationInfo->Hotfix; + else + g_pConfig->Hotfix = 0; + if (IS_EXIST(PrivacyPolicyUrl) && applicationInfo->PrivacyPolicyUrl != NULL) + g_pConfig->PrivacyPolicyUrl = applicationInfo->PrivacyPolicyUrl; + else + g_pConfig->PrivacyPolicyUrl.Format(L"http://www.drdump.com/AppPrivacyPolicy.aspx?AppID=%s", (LPCWSTR)g_pConfig->ApplicationGUID); #undef IS_EXIST #define IS_EXIST(field) (handlerSettings != NULL && (FIELD_OFFSET(HandlerSettings, field) < handlerSettings->HandlerSettingsSize)) + if (handlerSettings != NULL && handlerSettings->HandlerSettingsSize > sizeof(HandlerSettings)) + { + throw Error("Wrong HandlerSettings size, should be no more than %d.", sizeof(HandlerSettings)); + } - if (handlerSettings != NULL - && (handlerSettings->HandlerSettingsSize == 0 || handlerSettings->HandlerSettingsSize > sizeof(HandlerSettings))) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - - if (IS_EXIST(LeaveDumpFilesInTempFolder)) - { - g_pConfig->ServiceMode = handlerSettings->LeaveDumpFilesInTempFolder == 2; // hidden behavior (used for dumpparser) - g_pConfig->LeaveDumpFilesInTempFolder = handlerSettings->LeaveDumpFilesInTempFolder != FALSE; - } - else - { - g_pConfig->ServiceMode = 0; - g_pConfig->LeaveDumpFilesInTempFolder = FALSE; - } - if (IS_EXIST(OpenProblemInBrowser)) - g_pConfig->OpenProblemInBrowser = handlerSettings->OpenProblemInBrowser; - else - g_pConfig->OpenProblemInBrowser = FALSE; - if (IS_EXIST(UseWER)) - g_pConfig->UseWER = handlerSettings->UseWER; - else - g_pConfig->UseWER = FALSE; - if (IS_EXIST(SubmitterID)) - g_pConfig->SubmitterID = handlerSettings->SubmitterID; - else - g_pConfig->SubmitterID = 0; + if (IS_EXIST(LeaveDumpFilesInTempFolder)) + { + g_pConfig->ServiceMode = handlerSettings->LeaveDumpFilesInTempFolder == 2; // hidden behavior (used for dumpparser) + g_pConfig->LeaveDumpFilesInTempFolder = handlerSettings->LeaveDumpFilesInTempFolder != FALSE; + } + else + { + g_pConfig->ServiceMode = 0; + g_pConfig->LeaveDumpFilesInTempFolder = FALSE; + } + if (IS_EXIST(OpenProblemInBrowser)) + g_pConfig->OpenProblemInBrowser = handlerSettings->OpenProblemInBrowser; + else + g_pConfig->OpenProblemInBrowser = FALSE; + if (IS_EXIST(UseWER)) + g_pConfig->UseWER = handlerSettings->UseWER; + else + g_pConfig->UseWER = FALSE; + if (IS_EXIST(SubmitterID)) + g_pConfig->SubmitterID = handlerSettings->SubmitterID; + else + g_pConfig->SubmitterID = 0; + if (IS_EXIST(SendAdditionalDataWithoutApproval)) + g_pConfig->SendAdditionalDataWithoutApproval = handlerSettings->SendAdditionalDataWithoutApproval; + else + g_pConfig->SendAdditionalDataWithoutApproval = FALSE; + if (IS_EXIST(OverrideDefaultFullDumpType) && IS_EXIST(FullDumpType) && handlerSettings->OverrideDefaultFullDumpType) + g_pConfig->FullDumpType = handlerSettings->FullDumpType; + else + g_pConfig->FullDumpType = MiniDumpWithFullMemory; + if (IS_EXIST(LangFilePath)) + g_pConfig->LangFilePath = handlerSettings->LangFilePath; + else + g_pConfig->LangFilePath = L""; + if (IS_EXIST(SendRptPath)) + g_pConfig->SendRptPath = handlerSettings->SendRptPath; + else + g_pConfig->SendRptPath = L""; + if (IS_EXIST(DbgHelpPath)) + g_pConfig->DbgHelpPath = handlerSettings->DbgHelpPath; + else + g_pConfig->DbgHelpPath = L""; #undef IS_EXIST - WCHAR path[MAX_PATH], drive[MAX_PATH], dir[MAX_PATH], fname[MAX_PATH], ext[MAX_PATH]; - GetModuleFileNameW(NULL, path, _countof(path)); - _wsplitpath_s(path, drive, dir, fname, ext); - g_pConfig->ProcessName = CStringW(fname) + ext; - g_pConfig->ProcessName.MakeLower(); + g_pConfig->ProcessName = processName; - g_ownProcess = ownProcess != FALSE; + WCHAR path[MAX_PATH], drive[MAX_PATH], dir[MAX_PATH], fname[MAX_PATH], ext[MAX_PATH]; + GetModuleFileNameW(g_hThisDLL, path, _countof(path)); + _wsplitpath_s(path, drive, dir, fname, ext); - static bool inited = false; - if (!inited) - { - if (g_ownProcess) + if (g_pConfig->SendRptPath.IsEmpty()) { - // Application verifier sets its own VectoredExceptionHandler - // and Application verifier breaks redirected to WinQual. - // After that TopLevelExceptionFilter works. - // This behavior looks bad and anyway we don't need WinQual. - // So we set our VectoredExceptionHandler before AppVerifier and - // catch problems first. - g_applicationVerifierPresent = GetModuleHandle(_T("verifier.dll")) != NULL; - if (g_applicationVerifierPresent) - AddVectoredExceptionHandler(TRUE, VectoredExceptionHandler); - - g_prevTopLevelExceptionFilter = SetUnhandledExceptionFilter(TopLevelExceptionFilter); - // There is a lot of libraries that want to set their own wrong UnhandledExceptionFilter in our application. - // One of these is MSVCRT with __report_gsfailure and _call_reportfault leading to many - // of MSVCRT error reports to be redirected to Dr. Watson. - DisableSetUnhandledExceptionFilter(); - - InitCrtErrorHandlers(); - MakePerThreadInitialization(); + WCHAR sendRptExe[MAX_PATH]; + _wmakepath_s(sendRptExe, drive, dir, L"SendRpt", L".exe"); + g_pConfig->SendRptPath = sendRptExe; } - // Need to lock library in process. - // Since some crashes appears on process deinitialization and we should be ready to handle it. - LoadLibrary(_T("crshhndl.dll")); - inited = true; + if (g_pConfig->DbgHelpPath.IsEmpty()) + { + WCHAR dbgHelpDll[MAX_PATH]; + _wmakepath_s(dbgHelpDll, drive, dir, L"dbghelp", L".dll"); + g_pConfig->DbgHelpPath = dbgHelpDll; + } + if (0 != _waccess_s(g_pConfig->DbgHelpPath, 00/* Existence only */)) + { + throw Error("%ls not found.", (LPCWSTR)g_pConfig->SendRptPath); + } + + g_ownProcess = ownProcess != FALSE; + + static bool inited = false; + if (!inited) + { + if (g_ownProcess) + { + // Application verifier sets its own VectoredExceptionHandler + // and Application verifier breaks redirected to WinQual. + // After that TopLevelExceptionFilter works. + // This behavior looks bad and anyway we don't need WinQual. + // So we set our VectoredExceptionHandler before AppVerifier and + // catch problems first. + g_applicationVerifierPresent = GetModuleHandle(_T("verifier.dll")) != NULL; + if (g_applicationVerifierPresent) + AddVectoredExceptionHandler(TRUE, VectoredExceptionHandler); + + g_prevTopLevelExceptionFilter = SetUnhandledExceptionFilter(TopLevelExceptionFilter); + // There is a lot of libraries that want to set their own wrong UnhandledExceptionFilter in our application. + // One of these is MSVCRT with __report_gsfailure and _call_reportfault leading to many + // of MSVCRT error reports to be redirected to Dr. Watson. + DisableSetUnhandledExceptionFilter(); + + InitCrtErrorHandlers(); + MakePerThreadInitialization(); + } + + // Need to lock library in process. + // Since some crashes appears on process deinitialization and we should be ready to handle it. + WCHAR pathToSelf[MAX_PATH]; + if (0 != GetModuleFileNameW(g_hThisDLL, pathToSelf, _countof(pathToSelf))) + LoadLibraryW(pathToSelf); + + inited = true; + } + + return TRUE; + } + catch (std::exception& ex) + { + OutputDebugStringA(ex.what()); + ::MessageBoxA(0, ex.what(), "CrashHandler initialization error", MB_ICONERROR); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; } +} - return TRUE; +void SetCustomInfo(LPCWSTR text) +{ + if (!g_pConfig) + return; + CriticalSection::SyncLock lock(g_configCS); + g_pConfig->CustomInfo = text; + const int Limit = 100; + if (g_pConfig->CustomInfo.GetLength() > Limit) + g_pConfig->CustomInfo = g_pConfig->CustomInfo.Left(Limit); } void AddUserInfoToReport(LPCWSTR key, LPCWSTR value) { if (!g_pConfig) return; - g_pConfig->UserInfo.push_back(make_pair(CStringW(key), value)); + CriticalSection::SyncLock lock(g_configCS); + g_pConfig->UserInfo[key] = value; +} + +void RemoveUserInfoFromReport(LPCWSTR key) +{ + if (!g_pConfig) + return; + CriticalSection::SyncLock lock(g_configCS); + g_pConfig->UserInfo.erase(key); } void AddFileToReport(LPCWSTR path, LPCWSTR reportFileName) @@ -484,6 +568,7 @@ void AddFileToReport(LPCWSTR path, LPCWSTR reportFileName) { fileName = reportFileName; } + CriticalSection::SyncLock lock(g_configCS); g_pConfig->FilesToAttach.push_back(make_pair(CStringW(path), fileName)); } @@ -491,13 +576,11 @@ void RemoveFileFromReport(LPCWSTR path) { if (!g_pConfig) return; -/* TODO: needs to be converted to work with VS2008, but atm it's never called */ -#if _MSC_VER >= 1600 + CriticalSection::SyncLock lock(g_configCS); auto it = std::find_if(g_pConfig->FilesToAttach.begin(), g_pConfig->FilesToAttach.end(), [path](std::pair& x){ return x.first == path; }); if (it != g_pConfig->FilesToAttach.end()) g_pConfig->FilesToAttach.erase(it); -#endif } BOOL GetVersionFromFile(LPCWSTR path, ApplicationInfo* appInfo) diff --git a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.def b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.def index 5d46443c2..b75511ac4 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.def +++ b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.def @@ -3,9 +3,10 @@ EXPORTS InitCrashHandler @1 GetVersionFromApp @2 GetVersionFromFile @3 - CrashServer_SendAssertionViolated @4 AddFileToReport @5 RemoveFileFromReport @6 IsReadyToExit @7 SendReport @8 AddUserInfoToReport @9 + SetCustomInfo @10 + RemoveUserInfoFromReport @11 \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.h b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.h index c75c3ff9f..85f767a19 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.h +++ b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -20,14 +20,40 @@ #include +#if defined(CRASHHANDLER_ENABLE_RELEASE_ASSERTS) +# include +# ifndef _DEBUG +# undef assert +//! When _DEBUG macro is defined works as standard assert macro from assert.h header. +//! When _DEBUG macro is not defined evaluates an expression and, when the result is false, sends report and continues execution. +//! To enable this redefined assert behavior define project wide \b CRASHHANDLER_ENABLE_RELEASE_ASSERTS macro and include CrashHandler.h in each translation unit as soon as possible. +//! \note All assert calls before CrashHandler.h inclusion would work as standard asserts. +# define assert(expr) ((void) (!(expr) && (SkipDoctorDump_ReportAssertionViolation<__COUNTER__>(__FUNCTION__ ": "#expr " is false" ), true))) +# endif // !_DEBUG +#endif // CRASHHANDLER_ENABLE_RELEASE_ASSERTS + +namespace { + + // This template should be in anonymous namespace since __COUNTER__ is unique only for a single translation unit (as anonymous namespace items) + template + __forceinline static void SkipDoctorDump_ReportAssertionViolation(LPCSTR dumpGroup) + { + static LONG volatile isAlreadyReported = FALSE; + if (TRUE == InterlockedCompareExchange(&isAlreadyReported, TRUE, FALSE)) + return; + ::RaiseException(CrashHandler::ExceptionAssertionViolated, 0, 1, reinterpret_cast(&dumpGroup)); + } + +} // namespace { + //! Contains data that identifies your application. struct ApplicationInfo { DWORD ApplicationInfoSize; //!< Size of this structure. Should be set to sizeof(ApplicationInfo). - LPCSTR ApplicationGUID; //!< GUID assigned to this application. + LPCSTR ApplicationGUID; //!< GUID assigned to this application in form 00000000-0000-0000-0000-000000000000. LPCSTR Prefix; //!< Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp. - LPCWSTR AppName; //!< Application name that will be used in message box. - LPCWSTR Company; //!< Company name that will be used in message box. + LPCWSTR AppName; //!< Application name that will be shown in message box. + LPCWSTR Company; //!< Company name that will be shown in message box. USHORT V[4]; //!< Version of this application. USHORT Hotfix; //!< Version of hotfix for this application (reserved for future use, should be 0). LPCWSTR PrivacyPolicyUrl; //!< URL to privacy policy. If NULL default privacy policy is used. @@ -41,8 +67,15 @@ struct HandlerSettings DWORD HandlerSettingsSize; //!< Size of this structure. Should be set to sizeof(HandlerSettings). BOOL LeaveDumpFilesInTempFolder; //!< To leave error reports in temp folder you should set this member to TRUE. Your support or test lab teams can use that reports later. BOOL OpenProblemInBrowser; //!< To open Web-page belonging to the uploaded report after it was uploaded set this member to TRUE. It is useful for test lab to track the bug or write some comments. - BOOL UseWER; //!< To continue use Microsoft Windows Error Reporting (WER) set this member to TRUE. In that case after Crash Server send report dialog Microsoft send report dialog also will be shown. This can be necessary in case of Windows Logo program. - DWORD SubmitterID; //!< Crash Server user ID. Uploaded report will be marked as uploaded by this user. This is useful for Crash Server and bug tracking system integration. Set to \b 0 if user using this application is anonymous. + BOOL UseWER; //!< To continue use Microsoft Windows Error Reporting (WER) set this member to TRUE. In that case after Doctor Dump send report dialog Microsoft send report dialog also will be shown. This can be necessary in case of Windows Logo program. + DWORD SubmitterID; //!< Doctor Dump user ID. Uploaded report will be marked as uploaded by this user. This is useful for Doctor Dump and bug tracking system integration. Set to \b 0 if user using this application is anonymous. + BOOL SendAdditionalDataWithoutApproval; //!< To automatically accepted the question "Do you want to send more information about the problem?" set this member to TRUE . + BOOL OverrideDefaultFullDumpType;//!< To override default type of data gathered by the library set this member to TRUE and set required type of data in \a FullDumpType. + DWORD FullDumpType; //!< The type of information to be generated when full dump is requested by Doctor Dump. This parameter can be one or more of the values from the MINIDUMP_TYPE enumeration. + LPCWSTR LangFilePath; //!< To customize localization set this member to the path to the language file (including file name). + LPCWSTR SendRptPath; //!< Set this member to NULL to use default behavior when SendRpt is named sendrpt.exe and exist in same folder with crshhndl.dll. Set full path in other cases. + LPCWSTR DbgHelpPath; //!< Set this member to NULL to use default behavior when DbgHelp is named dbghelp.dll and exist in same folder with crshhndl.dll. Set full path in other cases. + //!< \note You should use dbghelp.dll that distributed with crshhndl.dll and not the one in Windows\\System32 folder, because only that dll supports all needed functionality. See DbgHelp Versions for more information. }; //! \brief To enable crash processing you should create an instance of this class. @@ -56,12 +89,26 @@ public: //! This is an example of how to use the CrashHandler class. //! CrashHandler constructor. Loads crshhndl.dll and initializes crash handling. - //! \note The crshhndl.dll may missing. In that case there will be no crash handling. + //! \note The crshhndl.dll is allowed to be missing. In that case there will be no crash handling. + CrashHandler( + LPCSTR applicationGUID, //!< [in] GUID assigned to this application. + LPCWSTR appName, //!< [in] Application name that will be shown in message box. + LPCWSTR company //!< [in] Company name that will be shown in message box. + ) throw() + { + if (!LoadDll()) + return; + + InitCrashHandler(applicationGUID, NULL, appName, company, TRUE); + } + + //! CrashHandler constructor. Loads crshhndl.dll and initializes crash handling. + //! \note The crshhndl.dll is allowed to be missing. In that case there will be no crash handling. CrashHandler( LPCSTR applicationGUID, //!< [in] GUID assigned to this application. LPCSTR prefix, //!< [in] Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp. - LPCWSTR appName, //!< [in] Application name that will be used in message box. - LPCWSTR company, //!< [in] Company name that will be used in message box. + LPCWSTR appName, //!< [in] Application name that will be shown in message box. + LPCWSTR company, //!< [in] Company name that will be shown in message box. BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly //!< catch exceptions. See \ref SendReport for more information. @@ -70,28 +117,33 @@ public: if (!LoadDll()) return; - ApplicationInfo appInfo; - memset(&appInfo, 0, sizeof(appInfo)); - appInfo.ApplicationInfoSize = sizeof(appInfo); - appInfo.ApplicationGUID = applicationGUID; - appInfo.Prefix = prefix; - appInfo.AppName = appName; - appInfo.Company = company; - if (!m_GetVersionFromApp(&appInfo)) - appInfo.V[0] = 1; + InitCrashHandler(applicationGUID, prefix, appName, company, ownProcess); + } - HandlerSettings handlerSettings; - memset(&handlerSettings, 0, sizeof(handlerSettings)); - handlerSettings.HandlerSettingsSize = sizeof(handlerSettings); + //! CrashHandler constructor. Loads crshhndl.dll and initializes crash handling. + //! \note The crshhndl.dll is allowed to be missing. In that case there will be no crash handling. + CrashHandler( + LPCWSTR crashHandlerPath, //!< [in] Path to crshhndl.dll file. File may be renamed. + LPCSTR applicationGUID, //!< [in] GUID assigned to this application. + LPCSTR prefix, //!< [in] Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp. + LPCWSTR appName, //!< [in] Application name that will be shown in message box. + LPCWSTR company, //!< [in] Company name that will be shown in message box. + BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write + //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly + //!< catch exceptions. See \ref SendReport for more information. + ) throw() + { + if (!LoadDll(crashHandlerPath)) + return; - m_InitCrashHandler(&appInfo, &handlerSettings, ownProcess); + InitCrashHandler(applicationGUID, prefix, appName, company, ownProcess); } //! CrashHandler constructor. Loads crshhndl.dll and initializes crash handling. - //! \note The crshhndl.dll may missing. In that case there will be no crash handling. + //! \note The crshhndl.dll is allowed to be missing. In that case there will be no crash handling. CrashHandler( ApplicationInfo* applicationInfo, //!< [in] Pointer to the ApplicationInfo structure that identifies your application. - HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This paramenter can be \b NULL. + HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This parameter can be \b NULL. BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly //!< catch exceptions. See \ref SendReport for more information. @@ -100,14 +152,34 @@ public: if (!LoadDll()) return; - m_InitCrashHandler(applicationInfo, handlerSettings, ownProcess); + InitCrashHandler(applicationInfo, handlerSettings, ownProcess); } + //! CrashHandler constructor. Loads crshhndl.dll and initializes crash handling. + //! \note The crshhndl.dll is allowed to be missing. In that case there will be no crash handling. + CrashHandler( + LPCWSTR crashHandlerPath, //!< [in] Path to crshhndl.dll file. File may be renamed. + ApplicationInfo* applicationInfo, //!< [in] Pointer to the ApplicationInfo structure that identifies your application. + HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This parameter can be \b NULL. + BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write + //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly + //!< catch exceptions. See \ref SendReport for more information. + ) throw() + { + if (!LoadDll(crashHandlerPath)) + return; + + InitCrashHandler(applicationInfo, handlerSettings, ownProcess); + } + + //! CrashHandler constructor. Loads crshhndl.dll. You should call \ref InitCrashHandler to turn on crash handling. - //! \note The crshhndl.dll may missing. In that case there will be no crash handling. - CrashHandler() throw() + //! \note The crshhndl.dll is allowed to be missing. In that case there will be no crash handling. + CrashHandler( + LPCWSTR crashHandlerPath = NULL //!< [in] Path to crshhndl.dll file. File may be renamed. + ) throw() { - LoadDll(); + LoadDll(crashHandlerPath); } //! CrashHandler destructor. @@ -119,9 +191,21 @@ public: return; // If crash has happen not in main thread we should wait here until report will be sent - // or else program will be terminated after return from main() and report send will be halted. + // or else program will be terminated after return from main() and report sending will be halted. while (!m_IsReadyToExit()) ::Sleep(100); + +#if _WIN32_WINNT >= 0x0501 /*_WIN32_WINNT_WINXP*/ + if (m_bSkipAssertsAdded) + RemoveVectoredExceptionHandler(SkipAsserts); +#endif + } + + //! Checks that crash handling was enabled. + //! \return Return \b true if crash handling was enabled. + bool IsCrashHandlingEnabled() const + { + return m_bWorking; } //! Initializes crash handler. @@ -129,7 +213,7 @@ public: //! \return Return \b true if crash handling was enabled. bool InitCrashHandler( ApplicationInfo* applicationInfo, //!< [in] Pointer to the ApplicationInfo structure that identifies your application. - HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This paramenter can be \b NULL. + HandlerSettings* handlerSettings, //!< [in] Pointer to the HandlerSettings structure that customizes crash handling behavior. This parameter can be \b NULL. BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly //!< catch exceptions. See \ref SendReport for more information. @@ -138,11 +222,63 @@ public: if (!m_InitCrashHandler) return false; - return m_InitCrashHandler(applicationInfo, handlerSettings, ownProcess) != FALSE; + m_bWorking = m_InitCrashHandler(applicationInfo, handlerSettings, ownProcess) != FALSE; + + return m_bWorking; + } + + //! Initializes crash handler. + //! \note You may call this function multiple times if some data has changed. + //! \return Return \b true if crash handling was enabled. + bool InitCrashHandler( + LPCSTR applicationGUID, //!< [in] GUID assigned to this application. + LPCSTR prefix, //!< [in] Prefix that will be used with the dump name: YourPrefix_v1.v2.v3.v4_YYYYMMDD_HHMMSS.mini.dmp. + LPCWSTR appName, //!< [in] Application name that will be shown in message box. + LPCWSTR company, //!< [in] Company name that will be shown in message box. + BOOL ownProcess = TRUE //!< [in] If you own the process your code running in set this option to \b TRUE. If don't (for example you write + //!< a plugin to some external application) set this option to \b FALSE. In that case you need to explicitly + //!< catch exceptions. See \ref SendReport for more information. + ) throw() + { + if (!m_GetVersionFromApp) + return false; + + ApplicationInfo appInfo; + memset(&appInfo, 0, sizeof(appInfo)); + appInfo.ApplicationInfoSize = sizeof(appInfo); + appInfo.ApplicationGUID = applicationGUID; + appInfo.Prefix = prefix; + appInfo.AppName = appName; + appInfo.Company = company; + if (!m_GetVersionFromApp(&appInfo)) + appInfo.V[0] = 1; + + HandlerSettings handlerSettings; + memset(&handlerSettings, 0, sizeof(handlerSettings)); + handlerSettings.HandlerSettingsSize = sizeof(handlerSettings); + handlerSettings.OpenProblemInBrowser = TRUE; + + return InitCrashHandler(&appInfo, &handlerSettings, ownProcess); + } + + //! \note This function is experimental and may not be available and may not be support by Doctor Dump in the future. + //! You may set custom information for your possible report. + //! This text will be available on Doctor Dump dumps page. + //! The text should not contain private information. + //! \return If the function succeeds, the return value is \b true. + bool SetCustomInfo( + LPCWSTR text //!< [in] custom info for the report. The text will be cut to 100 characters. + ) + { + if (!m_SetCustomInfo) + return false; + m_SetCustomInfo(text); + return true; } //! You may add any key/value pair to crash report. //! \return If the function succeeds, the return value is \b true. + //! \note This function is thread safe. bool AddUserInfoToReport( LPCWSTR key, //!< [in] key string that will be added to the report. LPCWSTR value //!< [in] value for the key. @@ -154,9 +290,23 @@ public: return true; } + //! You may remove any key that was added previously to crash report by \a AddUserInfoToReport. + //! \return If the function succeeds, the return value is \b true. + //! \note This function is thread safe. + bool RemoveUserInfoFromReport( + LPCWSTR key //!< [in] key string that will be removed from the report. + ) + { + if (!m_RemoveUserInfoFromReport) + return false; + m_RemoveUserInfoFromReport(key); + return true; + } + //! You may add any file to crash report. This file will be read when crash appears and will be sent within the report. //! Multiple files may be added. Filename of the file in the report may be changed to any name. //! \return If the function succeeds, the return value is \b true. + //! \note This function is thread safe. bool AddFileToReport( LPCWSTR path, //!< [in] Path to the file, that will be added to the report. LPCWSTR reportFileName /* = NULL */ //!< [in] Filename that will be used in report for this file. If parameter is \b NULL, original name from path will be used. @@ -170,6 +320,7 @@ public: //! Remove from report the file that was registered earlier to be sent within report. //! \return If the function succeeds, the return value is \b true. + //! \note This function is thread safe. bool RemoveFileFromReport( LPCWSTR path //!< [in] Path to the file, that will be removed from the report. ) throw() @@ -238,44 +389,66 @@ public: //! To send a report about violated assertion you can throw exception with this exception code //! using: \code RaiseException(CrashHandler::ExceptionAssertionViolated, 0, 0, NULL); \endcode //! Execution will continue after report will be sent (EXCEPTION_CONTINUE_EXECUTION would be used). - //! \note If you called CrashHandler constructor and crshhdnl.dll was missing you still may using this exception. + //! You may pass grouping string as first parameter (see \a SkipDoctorDump_SendAssertionViolated). + //! \note If you called CrashHandler constructor and crshhndl.dll was missing you still may using this exception. //! It will be catched, ignored and execution will continue. \ref SendReport function also works safely - //! when crshhdnl.dll was missing. + //! when crshhndl.dll was missing. static const DWORD ExceptionAssertionViolated = ((DWORD)0xCCE17000); //! Sends assertion violation report from this point and continue execution. //! \sa ExceptionAssertionViolated - //! \note Functions prefixed with "CrashServer_" will be ignored in stack parsing. - void CrashServer_SendAssertionViolated() + //! \note Functions containing "SkipDoctorDump" will be ignored in stack parsing. + void SkipDoctorDump_SendAssertionViolated( + LPCSTR dumpGroup = NULL //!< [in] All dumps with that group will be separated from dumps with same stack but another group. Set parameter to \b NULL if no grouping is required. + ) const { - if (!m_InitCrashHandler) + if (!m_bWorking) return; - ::RaiseException(CrashHandler::ExceptionAssertionViolated, 0, 0, NULL); + if (dumpGroup) + ::RaiseException(CrashHandler::ExceptionAssertionViolated, 0, 1, reinterpret_cast(&dumpGroup)); + else + ::RaiseException(CrashHandler::ExceptionAssertionViolated, 0, 0, NULL); } private: - bool LoadDll() throw() + bool LoadDll(LPCWSTR crashHandlerPath = NULL) throw() { - bool result = false; - - // hCrshhndlDll should not be unloaded, crash may appear even after return from main(). - // So hCrshhndlDll is not saved after construction. - HMODULE hCrshhndlDll = ::LoadLibraryW(L"crshhndl.dll"); - if (hCrshhndlDll != NULL) + m_bLoaded = false; + m_bWorking = false; + m_bSkipAssertsAdded = false; + m_InitCrashHandler = NULL; + m_SendReport = NULL; + m_IsReadyToExit = NULL; + m_SetCustomInfo = NULL; + m_AddUserInfoToReport = NULL; + m_RemoveUserInfoFromReport = NULL; + m_AddFileToReport = NULL; + m_RemoveFileFromReport = NULL; + m_GetVersionFromApp = NULL; + m_GetVersionFromFile = NULL; + + // hCrashHandlerDll should not be unloaded, crash may appear even after return from main(). + // So hCrashHandlerDll is not saved after construction. + HMODULE hCrashHandlerDll = ::LoadLibraryW(crashHandlerPath ? crashHandlerPath : L"crshhndl.dll"); + if (hCrashHandlerDll != NULL) { - m_InitCrashHandler = (pfnInitCrashHandler) GetProcAddress(hCrshhndlDll, "InitCrashHandler"); - m_SendReport = (pfnSendReport) GetProcAddress(hCrshhndlDll, "SendReport"); - m_IsReadyToExit = (pfnIsReadyToExit) GetProcAddress(hCrshhndlDll, "IsReadyToExit"); - m_AddUserInfoToReport = (pfnAddUserInfoToReport) GetProcAddress(hCrshhndlDll, "AddUserInfoToReport"); - m_AddFileToReport = (pfnAddFileToReport) GetProcAddress(hCrshhndlDll, "AddFileToReport"); - m_RemoveFileFromReport = (pfnRemoveFileFromReport) GetProcAddress(hCrshhndlDll, "RemoveFileFromReport"); - m_GetVersionFromApp = (pfnGetVersionFromApp) GetProcAddress(hCrshhndlDll, "GetVersionFromApp"); - m_GetVersionFromFile = (pfnGetVersionFromFile) GetProcAddress(hCrshhndlDll, "GetVersionFromFile"); - - result = m_InitCrashHandler + m_InitCrashHandler = (pfnInitCrashHandler) GetProcAddress(hCrashHandlerDll, "InitCrashHandler"); + m_SendReport = (pfnSendReport) GetProcAddress(hCrashHandlerDll, "SendReport"); + m_IsReadyToExit = (pfnIsReadyToExit) GetProcAddress(hCrashHandlerDll, "IsReadyToExit"); + m_SetCustomInfo = (pfnSetCustomInfo) GetProcAddress(hCrashHandlerDll, "SetCustomInfo"); + m_AddUserInfoToReport = (pfnAddUserInfoToReport) GetProcAddress(hCrashHandlerDll, "AddUserInfoToReport"); + m_RemoveUserInfoFromReport = (pfnRemoveUserInfoFromReport) GetProcAddress(hCrashHandlerDll, "RemoveUserInfoFromReport"); + m_AddFileToReport = (pfnAddFileToReport) GetProcAddress(hCrashHandlerDll, "AddFileToReport"); + m_RemoveFileFromReport = (pfnRemoveFileFromReport) GetProcAddress(hCrashHandlerDll, "RemoveFileFromReport"); + m_GetVersionFromApp = (pfnGetVersionFromApp) GetProcAddress(hCrashHandlerDll, "GetVersionFromApp"); + m_GetVersionFromFile = (pfnGetVersionFromFile) GetProcAddress(hCrashHandlerDll, "GetVersionFromFile"); + + m_bLoaded = m_InitCrashHandler && m_SendReport && m_IsReadyToExit + && m_SetCustomInfo && m_AddUserInfoToReport + && m_RemoveUserInfoFromReport && m_AddFileToReport && m_RemoveFileFromReport && m_GetVersionFromApp @@ -284,11 +457,14 @@ private: #if _WIN32_WINNT >= 0x0501 /*_WIN32_WINNT_WINXP*/ // if no crash processing was started, we need to ignore ExceptionAssertionViolated exceptions. - if (!result) + if (!m_bLoaded) + { ::AddVectoredExceptionHandler(TRUE, SkipAsserts); + m_bSkipAssertsAdded = true; + } #endif - return result; + return m_bLoaded; } static LONG CALLBACK SkipAsserts(EXCEPTION_POINTERS* pExceptionInfo) @@ -298,10 +474,16 @@ private: return EXCEPTION_CONTINUE_SEARCH; } + bool m_bLoaded; + bool m_bWorking; + bool m_bSkipAssertsAdded; + typedef BOOL (*pfnInitCrashHandler)(ApplicationInfo* applicationInfo, HandlerSettings* handlerSettings, BOOL ownProcess); typedef LONG (*pfnSendReport)(EXCEPTION_POINTERS* exceptionPointers); typedef BOOL (*pfnIsReadyToExit)(); + typedef void (*pfnSetCustomInfo)(LPCWSTR text); typedef void (*pfnAddUserInfoToReport)(LPCWSTR key, LPCWSTR value); + typedef void (*pfnRemoveUserInfoFromReport)(LPCWSTR key); typedef void (*pfnAddFileToReport)(LPCWSTR path, LPCWSTR reportFileName /* = NULL */); typedef void (*pfnRemoveFileFromReport)(LPCWSTR path); typedef BOOL (*pfnGetVersionFromApp)(ApplicationInfo* appInfo); @@ -310,7 +492,9 @@ private: pfnInitCrashHandler m_InitCrashHandler; pfnSendReport m_SendReport; pfnIsReadyToExit m_IsReadyToExit; + pfnSetCustomInfo m_SetCustomInfo; pfnAddUserInfoToReport m_AddUserInfoToReport; + pfnRemoveUserInfoFromReport m_RemoveUserInfoFromReport; pfnAddFileToReport m_AddFileToReport; pfnRemoveFileFromReport m_RemoveFileFromReport; pfnGetVersionFromApp m_GetVersionFromApp; diff --git a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.rc b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.rc index ba239e70b..082496cad 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.rc +++ b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.rc @@ -40,19 +40,34 @@ END 3 TEXTINCLUDE BEGIN - "\0" + "#if defined(WITH_SENDRPT_INSIDE)\r\n" + " #if defined(USE64)\r\n" + " IDR_SENDRPT RCDATA ""sendrpt.exe""\r\n" + " #else\r\n" + " IDR_SENDRPT RCDATA ""sendrpt.exe""\r\n" + " #endif\r\n" + "#endif\0" END #endif // APSTUDIO_INVOKED +#endif // Russian (Russia) resources +///////////////////////////////////////////////////////////////////////////// + + +#ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // -// RCDATA +// Generated from the TEXTINCLUDE 3 resource. // - -IDR_SENDRPT RCDATA "sendrpt.exe" -#endif // Russian (Russia) resources +#if defined(WITH_SENDRPT_INSIDE) + #if defined(USE64) + IDR_SENDRPT RCDATA "sendrpt.exe" + #else + IDR_SENDRPT RCDATA "sendrpt.exe" + #endif +#endif ///////////////////////////////////////////////////////////////////////////// - +#endif // not APSTUDIO_INVOKED diff --git a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj index a7efef77c..4ca007c18 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj +++ b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj @@ -28,6 +28,8 @@ DynamicLibrary Static Unicode + + true @@ -41,29 +43,19 @@ - ..\$(GsoapDir);..\$(ZlibDir);..\wtl\include;..\;..\..\;%(AdditionalIncludeDirectories) + ..\$(GsoapDir);..\$(ZlibDir);..\wtl\include;%(AdditionalIncludeDirectories) version.lib;%(AdditionalDependencies) CrashHandler.def - Console - - - - Create - - - - - - - - + + + @@ -74,10 +66,15 @@ - - {bc62fb83-cfbb-4ae3-a60d-d73155aa33fa} - false - + + + + Create + + + + + diff --git a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj.filters b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj.filters index bfa33ff62..953d4a934 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj.filters +++ b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandler.vcxproj.filters @@ -1,10 +1,6 @@  - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd @@ -13,32 +9,16 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - - - - Header Files - - + Header Files - + Header Files @@ -50,10 +30,36 @@ Header Files + + Header Files + + + Header Files + + + Header Files + Resource Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandlerExport.h b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandlerExport.h index 6cf6cf5a6..a242ac120 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/CrashHandlerExport.h +++ b/ext/CrashServer/CrashHandler/CrashHandler/CrashHandlerExport.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -26,13 +26,14 @@ extern "C" { BOOL InitCrashHandler(ApplicationInfo* applicationInfo, HandlerSettings* handlerSettings, BOOL ownProcess); BOOL IsReadyToExit(); +void SetCustomInfo(LPCWSTR text); void AddUserInfoToReport(LPCWSTR key, LPCWSTR value); +void RemoveUserInfoFromReport(LPCWSTR key); void AddFileToReport(LPCWSTR path, LPCWSTR reportFileName /* = NULL */); void RemoveFileFromReport(LPCWSTR path); BOOL GetVersionFromApp(ApplicationInfo* appInfo); BOOL GetVersionFromFile(LPCWSTR path, ApplicationInfo* appInfo); LONG SendReport(EXCEPTION_POINTERS* exceptionPointers); -void CrashServer_SendAssertionViolated(); #ifdef __cplusplus } // extern "C" diff --git a/ext/CrashServer/CrashHandler/CrashHandler/projectinfo.h b/ext/CrashServer/CrashHandler/CrashHandler/projectinfo.h index c693c6f35..aa5f2e1f9 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/projectinfo.h +++ b/ext/CrashServer/CrashHandler/CrashHandler/projectinfo.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -21,6 +21,6 @@ #define VERSION_INTERNALNAME_STR "crshhndl" #define VERSION_FILEDESCRIPTION_STR "Crash handler library" -#include <../solutioninfo.h> +#include "../solutioninfo.h" #endif// __PROJECTINFO_H diff --git a/ext/CrashServer/CrashHandler/CrashHandler/stdafx.cpp b/ext/CrashServer/CrashHandler/CrashHandler/stdafx.cpp index 359df47d3..41c9e8fa3 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/stdafx.cpp +++ b/ext/CrashServer/CrashHandler/CrashHandler/stdafx.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. diff --git a/ext/CrashServer/CrashHandler/CrashHandler/stdafx.h b/ext/CrashServer/CrashHandler/CrashHandler/stdafx.h index 4ebeb8166..89eeba7df 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/stdafx.h +++ b/ext/CrashServer/CrashHandler/CrashHandler/stdafx.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -26,6 +26,7 @@ #include #include #include +#include #include #include diff --git a/ext/CrashServer/CrashHandler/CrashHandler/targetver.h b/ext/CrashServer/CrashHandler/CrashHandler/targetver.h index a00a2ffb0..8ce951d69 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/targetver.h +++ b/ext/CrashServer/CrashHandler/CrashHandler/targetver.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploader3.wsdl b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploader3.wsdl new file mode 100644 index 000000000..f6345a68a --- /dev/null +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploader3.wsdl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj index 467e5bbf3..a2733434d 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj @@ -27,7 +27,9 @@ StaticLibrary MultiByte - false + + + true @@ -37,7 +39,7 @@ - ..\..\external\$(GsoapDir);%(AdditionalIncludeDirectories) + .;%(AdditionalIncludeDirectories) NotUsing @@ -57,18 +59,19 @@ - - - + + + - + + - + diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj.filters b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj.filters index 8ec63ab57..fb752a3d3 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj.filters +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderServiceLib.vcxproj.filters @@ -1,33 +1,39 @@  - - {9f314959-9ba7-479b-b05a-025e645bfab2} - - {50821e9f-1df0-439d-a01f-3eb08d75d5ad} + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - {d8a64ebc-1418-444d-8330-490c7e290c67} + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - {9e54fce8-6d3d-45f1-934c-c5ba6a7e43d6} + {db00495d-2b06-45d8-8086-64902f518c55} + + + {9ddbc61f-814e-47cb-aff0-120a14e8e639} - - Gsoap Files - Source Files Source Files + + Gsoap Files + DumpUploadService Files - + DumpUploadService Files @@ -38,13 +44,16 @@ Header Files + + DumpUploadService Files + DumpUploadService Files DumpUploadService Files - + DumpUploadService Files diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.cpp index 8248a17e2..69fd76c2b 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.cpp +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -16,15 +16,16 @@ // along with this program. If not, see . #include "DumpUploaderWebService.h" -#include "generated\UploaderSoap.nsmap" +#include "generated/CustomBinding_DumpUploadService3_Uploader.nsmap" #include "gsoapWinInet.h" #include #include #include DumpUploaderWebService::DumpUploaderWebService(int responseTimeoutSec) - : UploaderSoapProxy(SOAP_ENC_MTOM|SOAP_IO_KEEPALIVE|SOAP_C_UTFSTRING/*SOAP_C_MBSTRING*/) - , m_serviceUrl("https://www.crash-server.com") + : Base(SOAP_ENC_MTOM|SOAP_IO_KEEPALIVE|SOAP_C_UTFSTRING/*SOAP_C_MBSTRING*/) + , m_testMode(false) + , m_serviceUrl("https://www.drdump.com") { CRegKey reg; if (ERROR_SUCCESS == reg.Open(HKEY_LOCAL_MACHINE, _T("Software\\Idol Software\\DumpUploader"), KEY_READ)) @@ -41,6 +42,10 @@ DumpUploaderWebService::DumpUploaderWebService(int responseTimeoutSec) if (ERROR_SUCCESS == reg.QueryDWORDValue(_T("ResponseTimeoutSec"), cfgResponseTimeoutSec) && cfgResponseTimeoutSec != 0) responseTimeoutSec = static_cast(cfgResponseTimeoutSec); + DWORD testMode = 0; + if (ERROR_SUCCESS == reg.QueryDWORDValue(_T("TestMode"), testMode)) + m_testMode = testMode != 0; + #ifdef _DEBUG // soap_set_*_logfile defined only in DEBUG build of GSOAP DWORD traceEnable = FALSE; if (ERROR_SUCCESS == reg.QueryDWORDValue(_T("TraceEnable"), traceEnable) && traceEnable != FALSE) @@ -57,7 +62,7 @@ DumpUploaderWebService::DumpUploaderWebService(int responseTimeoutSec) #endif } - m_serviceUrl += "/DumpUploader.asmx"; + m_serviceUrl += "/Service/DumpUploader3.svc"; soap_endpoint = m_serviceUrl.c_str(); recv_timeout = responseTimeoutSec; @@ -78,3 +83,26 @@ void DumpUploaderWebService::SetProgressCallback(pfnProgressCallback progressCal { wininet_set_progress_callback(this, progressCallback, context); } + +int DumpUploaderWebService::Hello(_ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse) +{ + if (!m_testMode) + return Base::Hello(ns1__Hello, ns1__HelloResponse); + + return Base::Hello(ns1__Hello, ns1__HelloResponse); +} + +int DumpUploaderWebService::UploadMiniDump(_ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse) +{ + return Base::UploadMiniDump(ns1__UploadMiniDump, ns1__UploadMiniDumpResponse); +} + +int DumpUploaderWebService::UploadAdditionalInfo(_ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse) +{ + return Base::UploadAdditionalInfo(ns1__UploadAdditionalInfo, ns1__UploadAdditionalInfoResponse); +} + +int DumpUploaderWebService::UploadSymbol(_ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse) +{ + return Base::UploadSymbol(ns1__UploadSymbol, ns1__UploadSymbolResponse); +} \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.h index a24a2e3de..45b0880af 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.h +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -17,15 +17,22 @@ #pragma once -#include "generated\soapUploaderSoapProxy.h" +#include "generated/soapCustomBinding_DumpUploadService3_UploaderProxy.h" -class DumpUploaderWebService : public UploaderSoapProxy +class DumpUploaderWebService : public CustomBinding_DumpUploadService3_UploaderProxy { + typedef CustomBinding_DumpUploadService3_UploaderProxy Base; std::string m_serviceUrl; + bool m_testMode; public: DumpUploaderWebService(int responseTimeoutSec = 0); std::wstring GetErrorText(); typedef void (*pfnProgressCallback)(BOOL send, SIZE_T bytesCount, LPVOID context); void SetProgressCallback(pfnProgressCallback progressCallback, LPVOID context); + + int Hello(_ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse) override; + int UploadMiniDump(_ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse) override; + int UploadAdditionalInfo(_ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse) override; + int UploadSymbol(_ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse) override; }; diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/UploaderSoap.nsmap b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/CustomBinding_DumpUploadService3_Uploader.nsmap similarity index 53% rename from ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/UploaderSoap.nsmap rename to ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/CustomBinding_DumpUploadService3_Uploader.nsmap index 5c12fa6c5..a5b003138 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/UploaderSoap.nsmap +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/CustomBinding_DumpUploadService3_Uploader.nsmap @@ -2,14 +2,14 @@ #include "soapH.h" SOAP_NMAC struct Namespace namespaces[] = { - {"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://www.w3.org/2003/05/soap-envelope", NULL}, - {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://www.w3.org/2003/05/soap-encoding", NULL}, + {"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://schemas.xmlsoap.org/soap/envelope/", NULL}, + {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://schemas.xmlsoap.org/soap/encoding/", NULL}, {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL}, {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL}, {"xop", "http://www.w3.org/2004/08/xop/include", NULL, NULL}, - {"ns2", "http://microsoft.com/wsdl/types/", NULL, NULL}, - {"ns3", "https://www.crash-server.com/UploaderSoap", NULL, NULL}, - {"ns1", "https://www.crash-server.com/", NULL, NULL}, - {"ns4", "https://www.crash-server.com/UploaderSoap12", NULL, NULL}, + {"ns5", "http://schemas.microsoft.com/2003/10/Serialization/Arrays", NULL, NULL}, + {"ns3", "http://schemas.microsoft.com/2003/10/Serialization/", NULL, NULL}, + {"ns4", "http://schemas.datacontract.org/2004/07/DumpUploadService3", NULL, NULL}, + {"ns1", "https://www.drdump.com/services", NULL, NULL}, {NULL, NULL, NULL, NULL} }; diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/DumpUploader.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/DumpUploader.h index 5500abd5c..3b8b86fc6 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/DumpUploader.h +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/DumpUploader.h @@ -1,13 +1,13 @@ // Reminder: Modify typemap.dat to customize the header file generated by wsdl2h /* DumpUploader.h - Generated by wsdl2h 2.8.0 from http://localhost:59175/DumpUploader.asmx?WSDL and C:\CrashServer\Sources\ClientSide\DumpUploaderServiceLib\\typemap.dat - 2012-01-09 21:40:50 GMT + Generated by wsdl2h 2.8.17r from http://localhost:59175/Service/DumpUploader3.svc?WSDL + 2014-08-13 22:23:36 GMT DO NOT INCLUDE THIS FILE DIRECTLY INTO YOUR PROJECT BUILDS USE THE soapcpp2-GENERATED SOURCE CODE FILES FOR YOUR PROJECT BUILDS gSOAP XML Web services tools. - Copyright (C) 2001-2010 Robert van Engelen, Genivia Inc. All Rights Reserved. + Copyright (C) 2000-2013 Robert van Engelen, Genivia Inc. All Rights Reserved. Part of this software is released under one of the following licenses: GPL or Genivia's license for commercial use. */ @@ -17,25 +17,28 @@ NOTE: - Run soapcpp2 on DumpUploader.h to generate the SOAP/XML processing logic. - Use soapcpp2 option -I to specify paths for #import + Use soapcpp2 -I to specify paths for #import To build with STL, 'stlvector.h' is imported from 'import' dir in package. - Use soapcpp2 option -i to generate improved proxy and server classes. - - Use wsdl2h options -c and -s to generate pure C code or C++ code without STL. + Use soapcpp2 -j to generate improved proxy and server classes. + - Use wsdl2h -c and -s to generate pure C code or C++ code without STL. - Use 'typemap.dat' to control namespace bindings and type mappings. It is strongly recommended to customize the names of the namespace prefixes generated by wsdl2h. To do so, modify the prefix bindings in the Namespaces section below and add the modified lines to 'typemap.dat' to rerun wsdl2h. - Use Doxygen (www.doxygen.org) on this file to generate documentation. - - Use wsdl2h options -nname and -Nname to globally rename the prefix 'ns'. - - Use wsdl2h option -d to enable DOM support for xsd:anyType. - - Use wsdl2h option -g to auto-generate readers and writers for root elements. + - Use wsdl2h -R to generate REST operations. + - Use wsdl2h -nname to use name as the base namespace prefix instead of 'ns'. + - Use wsdl2h -Nname for service prefix and produce multiple service bindings + - Use wsdl2h -d to enable DOM support for xsd:anyType. + - Use wsdl2h -g to auto-generate readers and writers for root elements. + - Use wsdl2h -b to auto-generate bi-directional operations (duplex ops). - Struct/class members serialized as XML attributes are annotated with a '@'. - Struct/class members that have a special role are annotated with a '$'. WARNING: - DO NOT INCLUDE THIS FILE DIRECTLY INTO YOUR PROJECT BUILDS. - USE THE SOURCE CODE FILES GENERATED BY soapcpp2 FOR YOUR PROJECT BUILDS: + DO NOT INCLUDE THIS ANNOTATED FILE DIRECTLY IN YOUR PROJECT SOURCE CODE. + USE THE FILES GENERATED BY soapcpp2 FOR YOUR PROJECT'S SOURCE CODE: THE soapStub.h FILE CONTAINS THIS CONTENT WITHOUT ANNOTATIONS. LICENSE: @@ -43,12 +46,12 @@ LICENSE: @verbatim -------------------------------------------------------------------------------- gSOAP XML Web services tools -Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. +Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. -This software is released under one of the following two licenses: -1) GPL or 2) Genivia's license for commercial use. +This software is released under one of the following licenses: +GPL or Genivia's license for commercial use. -------------------------------------------------------------------------------- -1) GPL license. +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 @@ -65,8 +68,11 @@ 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. -------------------------------------------------------------------------------- -2) A commercial-use license is available from Genivia, Inc., contact@genivia.com +A commercial-use license is available from Genivia, Inc., contact@genivia.com -------------------------------------------------------------------------------- @endverbatim @@ -78,7 +84,7 @@ engelen@genivia.com / engelen@acm.org /******************************************************************************\ * * * Definitions * - * https://www.crash-server.com/ * + * https://www.drdump.com/services * * * \******************************************************************************/ @@ -99,9 +105,6 @@ engelen@genivia.com / engelen@acm.org * * \******************************************************************************/ -// This service uses SOAP 1.2 namespaces: -//gsoap SOAP-ENV schema namespace: http://www.w3.org/2003/05/soap-envelope -//gsoap SOAP-ENC schema namespace: http://www.w3.org/2003/05/soap-encoding /* NOTE: @@ -109,20 +112,37 @@ It is strongly recommended to customize the names of the namespace prefixes generated by wsdl2h. To do so, modify the prefix bindings below and add the modified lines to typemap.dat to rerun wsdl2h: -ns1 = "https://www.crash-server.com/" -ns2 = "http://microsoft.com/wsdl/types/" +ns1 = "https://www.drdump.com/services" +ns2 = "https://www.drdump.com/services/Imports" +ns3 = "http://schemas.microsoft.com/2003/10/Serialization/" +ns4 = "http://schemas.datacontract.org/2004/07/DumpUploadService3" +ns5 = "http://schemas.microsoft.com/2003/10/Serialization/Arrays" */ -#define SOAP_NAMESPACE_OF_ns1 "https://www.crash-server.com/" -//gsoap ns1 schema namespace: https://www.crash-server.com/ +#define SOAP_NAMESPACE_OF_ns2 "https://www.drdump.com/services/Imports" +//gsoap ns2 schema namespace: https://www.drdump.com/services/Imports +//gsoap ns2 schema form: unqualified + +#define SOAP_NAMESPACE_OF_ns1 "https://www.drdump.com/services" +//gsoap ns1 schema namespace: https://www.drdump.com/services //gsoap ns1 schema elementForm: qualified //gsoap ns1 schema attributeForm: unqualified -#define SOAP_NAMESPACE_OF_ns2 "http://microsoft.com/wsdl/types/" -//gsoap ns2 schema namespace: http://microsoft.com/wsdl/types/ -//gsoap ns2 schema elementForm: qualified -//gsoap ns2 schema attributeForm: unqualified +#define SOAP_NAMESPACE_OF_ns3 "http://schemas.microsoft.com/2003/10/Serialization/" +//gsoap ns3 schema namespace: http://schemas.microsoft.com/2003/10/Serialization/ +//gsoap ns3 schema form: qualified + +#define SOAP_NAMESPACE_OF_ns4 "http://schemas.datacontract.org/2004/07/DumpUploadService3" +//gsoap ns4 schema namespace: http://schemas.datacontract.org/2004/07/DumpUploadService3 +//gsoap ns4 schema elementForm: qualified +//gsoap ns4 schema attributeForm: unqualified + +#define SOAP_NAMESPACE_OF_ns5 "http://schemas.microsoft.com/2003/10/Serialization/Arrays" +//gsoap ns5 schema namespace: http://schemas.microsoft.com/2003/10/Serialization/Arrays +//gsoap ns5 schema elementForm: qualified +//gsoap ns5 schema attributeForm: unqualified +class xsd__anyType { _XML __item; struct soap *soap; }; /******************************************************************************\ * * @@ -131,9 +151,173 @@ ns2 = "http://microsoft.com/wsdl/types/" \******************************************************************************/ +/// Built-in type "xs:QName". +typedef std::string xsd__QName; + /// Built-in type "xs:base64Binary". #import "xop.h" +/// Built-in type "xs:byte". +typedef char xsd__byte; + +/// Built-in type "xs:unsignedByte". +typedef unsigned char xsd__unsignedByte; + +/// Primitive built-in type "xs:ID" +typedef std::wstring xsd__ID; + +/// Class wrapper for built-in type "xs:ID" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__ID_ to check runtime type (see soapStub.h) +class xsd__ID_ : public xsd__anyType +{ public: + xsd__ID __item; +}; + +/// Primitive built-in type "xs:IDREF" +typedef std::wstring xsd__IDREF; + +/// Class wrapper for built-in type "xs:IDREF" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__IDREF_ to check runtime type (see soapStub.h) +class xsd__IDREF_ : public xsd__anyType +{ public: + xsd__IDREF __item; +}; + +/// Class wrapper for built-in type "xs:QName" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__QName_ to check runtime type (see soapStub.h) +class xsd__QName_ : public xsd__anyType +{ public: + xsd__QName __item; +}; + +/// Primitive built-in type "xs:anyURI" +typedef std::wstring xsd__anyURI; + +/// Class wrapper for built-in type "xs:anyURI" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__anyURI_ to check runtime type (see soapStub.h) +class xsd__anyURI_ : public xsd__anyType +{ public: + xsd__anyURI __item; +}; + +/// Class wrapper for built-in type "xs:base64Binary" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__base64Binary to check runtime type (see soapStub.h) +class xsd__base64Binary : public xsd__anyType +{ public: + _xop__Include __item; +}; + +/// Class wrapper for built-in type "xs:boolean" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__boolean to check runtime type (see soapStub.h) +class xsd__boolean : public xsd__anyType +{ public: + bool __item; +}; + +/// Class wrapper for built-in type "xs:byte" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__byte_ to check runtime type (see soapStub.h) +class xsd__byte_ : public xsd__anyType +{ public: + xsd__byte __item; +}; + +/// Class wrapper for built-in type "xs:dateTime" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__dateTime to check runtime type (see soapStub.h) +class xsd__dateTime : public xsd__anyType +{ public: + time_t __item; +}; + +/// Primitive built-in type "xs:decimal" +typedef std::wstring xsd__decimal; + +/// Class wrapper for built-in type "xs:decimal" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__decimal_ to check runtime type (see soapStub.h) +class xsd__decimal_ : public xsd__anyType +{ public: + xsd__decimal __item; +}; + +/// Class wrapper for built-in type "xs:double" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__double to check runtime type (see soapStub.h) +class xsd__double : public xsd__anyType +{ public: + double __item; +}; + +/// Primitive built-in type "xs:duration" +typedef std::wstring xsd__duration; + +/// Class wrapper for built-in type "xs:duration" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__duration_ to check runtime type (see soapStub.h) +class xsd__duration_ : public xsd__anyType +{ public: + xsd__duration __item; +}; + +/// Class wrapper for built-in type "xs:float" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__float to check runtime type (see soapStub.h) +class xsd__float : public xsd__anyType +{ public: + float __item; +}; + +/// Class wrapper for built-in type "xs:int" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__int to check runtime type (see soapStub.h) +class xsd__int : public xsd__anyType +{ public: + int __item; +}; + +/// Class wrapper for built-in type "xs:long" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__long to check runtime type (see soapStub.h) +class xsd__long : public xsd__anyType +{ public: + LONG64 __item; +}; + +/// Class wrapper for built-in type "xs:short" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__short to check runtime type (see soapStub.h) +class xsd__short : public xsd__anyType +{ public: + short __item; +}; + +/// Class wrapper for built-in type "xs:string" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__string to check runtime type (see soapStub.h) +class xsd__string : public xsd__anyType +{ public: + std::wstring __item; +}; + +/// Class wrapper for built-in type "xs:unsignedByte" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__unsignedByte_ to check runtime type (see soapStub.h) +class xsd__unsignedByte_ : public xsd__anyType +{ public: + xsd__unsignedByte __item; +}; + +/// Class wrapper for built-in type "xs:unsignedInt" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__unsignedInt to check runtime type (see soapStub.h) +class xsd__unsignedInt : public xsd__anyType +{ public: + unsigned int __item; +}; + +/// Class wrapper for built-in type "xs:unsignedLong" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__unsignedLong to check runtime type (see soapStub.h) +class xsd__unsignedLong : public xsd__anyType +{ public: + ULONG64 __item; +}; + +/// Class wrapper for built-in type "xs:unsignedShort" derived from xsd__anyType +/// Use virtual method soap_type() == SOAP_TYPE_xsd__unsignedShort to check runtime type (see soapStub.h) +class xsd__unsignedShort : public xsd__anyType +{ public: + unsigned short __item; +}; + /******************************************************************************\ * * * Forward Declarations * @@ -148,11 +332,44 @@ class ns1__ClientLib; // Forward declaration of class ns1__Application. class ns1__Application; +// Forward declaration of class ns1__AppAdditionalInfo. +class ns1__AppAdditionalInfo; + +// Forward declaration of class ns1__DumpAdditionalInfo. +class ns1__DumpAdditionalInfo; + +// Forward declaration of class ns1__ArrayOfModuleSymbolInfo. +class ns1__ArrayOfModuleSymbolInfo; + +// Forward declaration of class ns1__ModuleSymbolInfo. +class ns1__ModuleSymbolInfo; + +// Forward declaration of class ns1__Pdb70File. +class ns1__Pdb70File; + // Forward declaration of class ns1__Response. class ns1__Response; -// Forward declaration of class ns1__Solution. -class ns1__Solution; +// Forward declaration of class ns1__StopResponse. +class ns1__StopResponse; + +// Forward declaration of class ns1__ErrorResponse. +class ns1__ErrorResponse; + +// Forward declaration of class ns1__HaveSolutionResponse. +class ns1__HaveSolutionResponse; + +// Forward declaration of class ns1__NeedSymbolsThenMiniDumpResponse. +class ns1__NeedSymbolsThenMiniDumpResponse; + +// Forward declaration of class ns1__NeedMiniDumpResponse. +class ns1__NeedMiniDumpResponse; + +// Forward declaration of class ns1__NeedFullDumpResponse. +class ns1__NeedFullDumpResponse; + +// Forward declaration of class ns1__NeedMoreInfoResponse. +class ns1__NeedMoreInfoResponse; // Forward declaration of class _ns1__Hello. class _ns1__Hello; @@ -166,22 +383,37 @@ class _ns1__UploadMiniDump; // Forward declaration of class _ns1__UploadMiniDumpResponse. class _ns1__UploadMiniDumpResponse; +// Forward declaration of class _ns1__UploadFullDump. +class _ns1__UploadFullDump; + +// Forward declaration of class _ns1__UploadFullDumpResponse. +class _ns1__UploadFullDumpResponse; + // Forward declaration of class _ns1__UploadAdditionalInfo. class _ns1__UploadAdditionalInfo; // Forward declaration of class _ns1__UploadAdditionalInfoResponse. class _ns1__UploadAdditionalInfoResponse; +// Forward declaration of class _ns1__RejectedToSendAdditionalInfo. +class _ns1__RejectedToSendAdditionalInfo; + +// Forward declaration of class _ns1__RejectedToSendAdditionalInfoResponse. +class _ns1__RejectedToSendAdditionalInfoResponse; + // Forward declaration of class _ns1__UploadSymbol. class _ns1__UploadSymbol; // Forward declaration of class _ns1__UploadSymbolResponse. class _ns1__UploadSymbolResponse; +// Forward declaration of class ns5__ArrayOfstring. +class ns5__ArrayOfstring; + /******************************************************************************\ * * * Schema Types and Top-Level Elements and Attributes * - * https://www.crash-server.com/ * + * https://www.drdump.com/services/Imports * * * \******************************************************************************/ @@ -189,70 +421,165 @@ class _ns1__UploadSymbolResponse; /******************************************************************************\ * * * Schema Types and Top-Level Elements and Attributes * - * http://microsoft.com/wsdl/types/ * + * https://www.drdump.com/services * * * \******************************************************************************/ -/// "https://www.crash-server.com/":Architecture is a simpleType restriction of xs:string. -/// Note: enum values are prefixed with 'ns1__Architecture' to avoid name clashes, please use wsdl2h option -e to omit this prefix -enum ns1__Architecture -{ - ns1__Architecture__x32, ///< xs:string value="x32" - ns1__Architecture__x64, ///< xs:string value="x64" +/******************************************************************************\ + * * + * Schema Types and Top-Level Elements and Attributes * + * http://schemas.microsoft.com/2003/10/Serialization/ * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Schema Types and Top-Level Elements and Attributes * + * http://schemas.datacontract.org/2004/07/DumpUploadService3 * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Schema Types and Top-Level Elements and Attributes * + * http://schemas.microsoft.com/2003/10/Serialization/Arrays * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Schema Types and Top-Level Elements and Attributes * + * http://schemas.microsoft.com/2003/10/Serialization/ * + * * +\******************************************************************************/ + + +/// "http://schemas.microsoft.com/2003/10/Serialization/":char is a simpleType restriction of xs:int. +typedef int ns3__char; + +/// Class wrapper +class ns3__char__ : public xsd__anyType +{ public: + ns3__char __item; +}; + +/// "http://schemas.microsoft.com/2003/10/Serialization/":duration is a simpleType restriction of xs:duration. +/// Content pattern is "\\-?P(\\d*D)?(T(\\d*H)?(\\d*M)?(\\d*(\\.\\d*)?S)?)?" (note: not automatically enforced) +/// Value range is [-P10675199DT2H48M5.4775808S..P10675199DT2H48M5.4775807S] +typedef xsd__duration ns3__duration "\\-?P(\\d*D)?(T(\\d*H)?(\\d*M)?(\\d*(\\.\\d*)?S)?)?"; + +/// Class wrapper +class ns3__duration__ : public xsd__anyType +{ public: + ns3__duration __item; +}; + +/// "http://schemas.microsoft.com/2003/10/Serialization/":guid is a simpleType restriction of xs:string. +/// Content pattern is "[\\da-fA-F]{8}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{12}" (note: not automatically enforced) +typedef std::wstring ns3__guid "[\\da-fA-F]{8}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{12}"; + +/// Class wrapper +class ns3__guid__ : public xsd__anyType +{ public: + ns3__guid __item; }; -/// "https://www.crash-server.com/":ResponseType is a simpleType restriction of xs:string. -/// Note: enum values are prefixed with 'ns1__ResponseType' to avoid name clashes, please use wsdl2h option -e to omit this prefix -enum ns1__ResponseType +/******************************************************************************\ + * * + * Schema Types and Top-Level Elements and Attributes * + * http://schemas.datacontract.org/2004/07/DumpUploadService3 * + * * +\******************************************************************************/ + + +/// "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.Architecture is a simpleType restriction of xs:string. +/// Note: enum values are prefixed with 'ns4__ClientLib_Architecture' to avoid name clashes, please use wsdl2h option -e to omit this prefix +enum ns4__ClientLib_Architecture { - ns1__ResponseType__HaveSolution, ///< xs:string value="HaveSolution" - ns1__ResponseType__NeedMiniDump, ///< xs:string value="NeedMiniDump" - ns1__ResponseType__NeedMoreInfo, ///< xs:string value="NeedMoreInfo" - ns1__ResponseType__Stop, ///< xs:string value="Stop" - ns1__ResponseType__Error, ///< xs:string value="Error" + ns4__ClientLib_Architecture__x86, ///< xs:string value="x86" + ns4__ClientLib_Architecture__x64, ///< xs:string value="x64" + ns4__ClientLib_Architecture__DotNet, ///< xs:string value="DotNet" +}; + +/// Class wrapper +class ns4__ClientLib_Architecture_ : public xsd__anyType +{ public: + enum ns4__ClientLib_Architecture __item; }; -/// "https://www.crash-server.com/":SolutionType is a simpleType restriction of xs:string. -/// Note: enum values are prefixed with 'ns1__SolutionType' to avoid name clashes, please use wsdl2h option -e to omit this prefix -enum ns1__SolutionType +/// "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.ClientType is a simpleType restriction of xs:string. +/// Note: enum values are prefixed with 'ns4__ClientLib_ClientType' to avoid name clashes, please use wsdl2h option -e to omit this prefix +enum ns4__ClientLib_ClientType { - ns1__SolutionType__Url, ///< xs:string value="Url" - ns1__SolutionType__Exe, ///< xs:string value="Exe" + ns4__ClientLib_ClientType__CrashHandler_1_0, ///< xs:string value="CrashHandler_1_0" + ns4__ClientLib_ClientType__WebCrashRptGate, ///< xs:string value="WebCrashRptGate" + ns4__ClientLib_ClientType__DumpUploader, ///< xs:string value="DumpUploader" + ns4__ClientLib_ClientType__CrashHandler_2_0_CrashRptBased, ///< xs:string value="CrashHandler_2_0_CrashRptBased" + ns4__ClientLib_ClientType__SymbolUploader, ///< xs:string value="SymbolUploader" }; -/// "https://www.crash-server.com/":AdditionalInfoType is a simpleType restriction of xs:string. -/// Note: enum values are prefixed with 'ns1__AdditionalInfoType' to avoid name clashes, please use wsdl2h option -e to omit this prefix -enum ns1__AdditionalInfoType +/// Class wrapper +class ns4__ClientLib_ClientType_ : public xsd__anyType +{ public: + enum ns4__ClientLib_ClientType __item; +}; + +/// "http://schemas.datacontract.org/2004/07/DumpUploadService3":HaveSolutionResponse.SolutionType is a simpleType restriction of xs:string. +/// Note: enum values are prefixed with 'ns4__HaveSolutionResponse_SolutionType' to avoid name clashes, please use wsdl2h option -e to omit this prefix +enum ns4__HaveSolutionResponse_SolutionType { - ns1__AdditionalInfoType__None, ///< xs:string value="None" - ns1__AdditionalInfoType__FullDump, ///< xs:string value="FullDump" - ns1__AdditionalInfoType__Info, ///< xs:string value="Info" + ns4__HaveSolutionResponse_SolutionType__Url, ///< xs:string value="Url" + ns4__HaveSolutionResponse_SolutionType__Exe, ///< xs:string value="Exe" +}; + +/// Class wrapper +class ns4__HaveSolutionResponse_SolutionType_ : public xsd__anyType +{ public: + enum ns4__HaveSolutionResponse_SolutionType __item; }; /******************************************************************************\ * * * Schema Types and Top-Level Elements and Attributes * - * http://microsoft.com/wsdl/types/ * + * http://schemas.microsoft.com/2003/10/Serialization/Arrays * * * \******************************************************************************/ -/// "http://microsoft.com/wsdl/types/":guid is a simpleType restriction of xs:string. -/// Content pattern is "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" (note: not automatically enforced) -typedef std::wstring ns2__guid "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"; +/******************************************************************************\ + * * + * Schema Complex Types and Top-Level Elements * + * https://www.drdump.com/services/Imports * + * * +\******************************************************************************/ + /******************************************************************************\ * * * Schema Complex Types and Top-Level Elements * - * https://www.crash-server.com/ * + * https://www.drdump.com/services * * * \******************************************************************************/ -/// "https://www.crash-server.com/":ClientLib is a complexType. -class ns1__ClientLib +/// "https://www.drdump.com/services":ClientLib is a complexType. +/// class ns1__ClientLib operations: +/// - soap_new_ns1__ClientLib(soap*) allocate +/// - soap_new_ns1__ClientLib(soap*, int num) allocate array +/// - soap_new_req_ns1__ClientLib(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__ClientLib(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__ClientLib(soap*, ns1__ClientLib*) deserialize from a stream +/// - int soap_write_ns1__ClientLib(soap, ns1__ClientLib*) serialize to a stream +class ns1__ClientLib : public xsd__anyType { public: +/// Element arch of type "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.Architecture. + enum ns4__ClientLib_Architecture arch 1; ///< Required element. +/// Element type of type "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.ClientType. + enum ns4__ClientLib_ClientType type 1; ///< Required element. /// Element v1 of type xs:unsignedShort. unsigned short v1 1; ///< Required element. /// Element v2 of type xs:unsignedShort. @@ -261,17 +588,24 @@ class ns1__ClientLib unsigned short v3 1; ///< Required element. /// Element v4 of type xs:unsignedShort. unsigned short v4 1; ///< Required element. -/// Element arch of type "https://www.crash-server.com/":Architecture. - enum ns1__Architecture arch 1; ///< Required element. -/// A handle to the soap struct that manages this instance (automatically set) - struct soap *soap ; }; -/// "https://www.crash-server.com/":Application is a complexType. -class ns1__Application +/// "https://www.drdump.com/services":Application is a complexType. +/// class ns1__Application operations: +/// - soap_new_ns1__Application(soap*) allocate +/// - soap_new_ns1__Application(soap*, int num) allocate array +/// - soap_new_req_ns1__Application(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__Application(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__Application(soap*, ns1__Application*) deserialize from a stream +/// - int soap_write_ns1__Application(soap, ns1__Application*) serialize to a stream +class ns1__Application : public xsd__anyType { public: -/// Element applicationGUID of type "http://microsoft.com/wsdl/types/":guid. - ns2__guid applicationGUID 1; ///< Required element. +/// Element applicationGUID of type "http://schemas.microsoft.com/2003/10/Serialization/":guid. + ns3__guid applicationGUID 1; ///< Required element. +/// Element hotfix of type xs:unsignedShort. + unsigned short hotfix 1; ///< Required element. +/// Element mainModule of type xs:string. + std::wstring* mainModule ; ///< Nillable pointer. /// Element v1 of type xs:unsignedShort. unsigned short v1 1; ///< Required element. /// Element v2 of type xs:unsignedShort. @@ -280,202 +614,844 @@ class ns1__Application unsigned short v3 1; ///< Required element. /// Element v4 of type xs:unsignedShort. unsigned short v4 1; ///< Required element. -/// Element hotfix of type xs:unsignedShort. - unsigned short hotfix 1; ///< Required element. -/// A handle to the soap struct that manages this instance (automatically set) - struct soap *soap ; }; -/// "https://www.crash-server.com/":Response is a complexType. -class ns1__Response +/// "https://www.drdump.com/services":AppAdditionalInfo is a complexType. +/// class ns1__AppAdditionalInfo operations: +/// - soap_new_ns1__AppAdditionalInfo(soap*) allocate +/// - soap_new_ns1__AppAdditionalInfo(soap*, int num) allocate array +/// - soap_new_req_ns1__AppAdditionalInfo(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__AppAdditionalInfo(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__AppAdditionalInfo(soap*, ns1__AppAdditionalInfo*) deserialize from a stream +/// - int soap_write_ns1__AppAdditionalInfo(soap, ns1__AppAdditionalInfo*) serialize to a stream +class ns1__AppAdditionalInfo : public xsd__anyType +{ public: +/// Element appName of type xs:string. + std::wstring* appName ; ///< Nillable pointer. +/// Element companyName of type xs:string. + std::wstring* companyName ; ///< Nillable pointer. +}; + +/// "https://www.drdump.com/services":DumpAdditionalInfo is a complexType. +/// class ns1__DumpAdditionalInfo operations: +/// - soap_new_ns1__DumpAdditionalInfo(soap*) allocate +/// - soap_new_ns1__DumpAdditionalInfo(soap*, int num) allocate array +/// - soap_new_req_ns1__DumpAdditionalInfo(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__DumpAdditionalInfo(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__DumpAdditionalInfo(soap*, ns1__DumpAdditionalInfo*) deserialize from a stream +/// - int soap_write_ns1__DumpAdditionalInfo(soap, ns1__DumpAdditionalInfo*) serialize to a stream +class ns1__DumpAdditionalInfo : public xsd__anyType +{ public: +/// Element PCID of type xs:int. + int PCID 1; ///< Required element. +/// Element crashDate of type xs:dateTime. + time_t crashDate 1; ///< Required element. +/// Element description of type xs:string. + std::wstring* description 0; ///< Nillable pointer. +/// Element group of type xs:string. + std::wstring* group 0; ///< Nillable pointer. +/// Element submitterID of type xs:int. + int submitterID 1; ///< Required element. +}; + +/// "https://www.drdump.com/services":ArrayOfModuleSymbolInfo is a complexType. +/// class ns1__ArrayOfModuleSymbolInfo operations: +/// - soap_new_ns1__ArrayOfModuleSymbolInfo(soap*) allocate +/// - soap_new_ns1__ArrayOfModuleSymbolInfo(soap*, int num) allocate array +/// - soap_new_req_ns1__ArrayOfModuleSymbolInfo(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__ArrayOfModuleSymbolInfo(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__ArrayOfModuleSymbolInfo(soap*, ns1__ArrayOfModuleSymbolInfo*) deserialize from a stream +/// - int soap_write_ns1__ArrayOfModuleSymbolInfo(soap, ns1__ArrayOfModuleSymbolInfo*) serialize to a stream +class ns1__ArrayOfModuleSymbolInfo : public xsd__anyType +{ public: +/// Vector of ns1__ModuleSymbolInfo* with length 0..unbounded + std::vector ModuleSymbolInfo 0; ///< Nillable pointer. +}; + +/// "https://www.drdump.com/services":ModuleSymbolInfo is a complexType. +/// class ns1__ModuleSymbolInfo operations: +/// - soap_new_ns1__ModuleSymbolInfo(soap*) allocate +/// - soap_new_ns1__ModuleSymbolInfo(soap*, int num) allocate array +/// - soap_new_req_ns1__ModuleSymbolInfo(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__ModuleSymbolInfo(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__ModuleSymbolInfo(soap*, ns1__ModuleSymbolInfo*) deserialize from a stream +/// - int soap_write_ns1__ModuleSymbolInfo(soap, ns1__ModuleSymbolInfo*) serialize to a stream +class ns1__ModuleSymbolInfo : public xsd__anyType +{ public: +/// Element isMicrosoftModule of type xs:boolean. + bool isMicrosoftModule 1; ///< Required element. +/// Element path of type xs:string. + std::wstring* path ; ///< Nillable pointer. +/// Element pdb of type "https://www.drdump.com/services":Pdb70File. + ns1__Pdb70File* pdb 0; ///< Nillable pointer. +/// Element sizeOfImage of type xs:unsignedInt. + unsigned int sizeOfImage 1; ///< Required element. +/// Element timeDateStamp of type xs:unsignedInt. + unsigned int timeDateStamp 1; ///< Required element. +}; + +/// "https://www.drdump.com/services":Pdb70File is a complexType. +/// class ns1__Pdb70File operations: +/// - soap_new_ns1__Pdb70File(soap*) allocate +/// - soap_new_ns1__Pdb70File(soap*, int num) allocate array +/// - soap_new_req_ns1__Pdb70File(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__Pdb70File(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__Pdb70File(soap*, ns1__Pdb70File*) deserialize from a stream +/// - int soap_write_ns1__Pdb70File(soap, ns1__Pdb70File*) serialize to a stream +class ns1__Pdb70File : public xsd__anyType +{ public: +/// Element age of type xs:unsignedInt. + unsigned int age 1; ///< Required element. +/// Element path of type xs:string. + std::wstring* path ; ///< Nillable pointer. +/// Element signature of type "http://schemas.microsoft.com/2003/10/Serialization/":guid. + ns3__guid signature 1; ///< Required element. +}; + +/// "https://www.drdump.com/services":Response is a complexType. +/// class ns1__Response operations: +/// - soap_new_ns1__Response(soap*) allocate +/// - soap_new_ns1__Response(soap*, int num) allocate array +/// - soap_new_req_ns1__Response(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__Response(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__Response(soap*, ns1__Response*) deserialize from a stream +/// - int soap_write_ns1__Response(soap, ns1__Response*) serialize to a stream +class ns1__Response : public xsd__anyType { public: -/// Element type of type "https://www.crash-server.com/":ResponseType. - enum ns1__ResponseType type 1; ///< Required element. -/// Element error of type xs:string. - std::wstring* error 0; ///< Optional element. -/// Element solution of type "https://www.crash-server.com/":Solution. - ns1__Solution* solution 0; ///< Optional element. /// Element clientID of type xs:string. - std::wstring* clientID 0; ///< Optional element. -/// Element problemID of type xs:int. - int problemID 1; ///< Required element. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. /// Element dumpGroupID of type xs:int. - int dumpGroupID 1; ///< Required element. + int* dumpGroupID 0; ///< Optional element. /// Element dumpID of type xs:int. - int dumpID 1; ///< Required element. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. /// Element urlToProblem of type xs:string. - std::wstring* urlToProblem 0; ///< Optional element. -/// Element infoType of type "https://www.crash-server.com/":AdditionalInfoType. - enum ns1__AdditionalInfoType infoType 1; ///< Required element. -/// Element infoModule of type xs:base64Binary. - _xop__Include* infoModule 0; ///< Optional element. -/// Element infoModuleCfg of type xs:string. - std::wstring* infoModuleCfg 0; ///< Optional element. + std::wstring* urlToProblem 0; ///< Nillable pointer. +}; + + +/// Top-level root element "https://www.drdump.com/services":Hello + +/// "https://www.drdump.com/services":Hello is a complexType. +/// class _ns1__Hello operations: +/// - soap_new__ns1__Hello(soap*) allocate +/// - soap_new__ns1__Hello(soap*, int num) allocate array +/// - soap_new_req__ns1__Hello(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__Hello(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__Hello(soap*, _ns1__Hello*) deserialize from a stream +/// - int soap_write__ns1__Hello(soap, _ns1__Hello*) serialize to a stream +class _ns1__Hello +{ public: +/// Element clientLib of type "https://www.drdump.com/services":ClientLib. + ns1__ClientLib* clientLib 0; ///< Nillable pointer. +/// Element app of type "https://www.drdump.com/services":Application. + ns1__Application* app 0; ///< Nillable pointer. +/// Element appAddInfo of type "https://www.drdump.com/services":AppAdditionalInfo. + ns1__AppAdditionalInfo* appAddInfo 0; ///< Nillable pointer. +/// Element addInfo of type "https://www.drdump.com/services":DumpAdditionalInfo. + ns1__DumpAdditionalInfo* addInfo 0; ///< Nillable pointer. +/// Element availableSymbols of type "https://www.drdump.com/services":ArrayOfModuleSymbolInfo. + ns1__ArrayOfModuleSymbolInfo* availableSymbols 0; ///< Nillable pointer. +/// Element stack of type xs:base64Binary. + _xop__Include* stack 0; ///< Nillable pointer. /// A handle to the soap struct that manages this instance (automatically set) struct soap *soap ; }; -/// "https://www.crash-server.com/":Solution is a complexType. -class ns1__Solution + +/// Top-level root element "https://www.drdump.com/services":HelloResponse + +/// "https://www.drdump.com/services":HelloResponse is a complexType. +/// class _ns1__HelloResponse operations: +/// - soap_new__ns1__HelloResponse(soap*) allocate +/// - soap_new__ns1__HelloResponse(soap*, int num) allocate array +/// - soap_new_req__ns1__HelloResponse(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__HelloResponse(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__HelloResponse(soap*, _ns1__HelloResponse*) deserialize from a stream +/// - int soap_write__ns1__HelloResponse(soap, _ns1__HelloResponse*) serialize to a stream +class _ns1__HelloResponse { public: -/// Element askConfirmation of type xs:boolean. - bool askConfirmation 1; ///< Required element. -/// Element type of type "https://www.crash-server.com/":SolutionType. - enum ns1__SolutionType type 1; ///< Required element. -/// Element url of type xs:string. - std::wstring* url 0; ///< Optional element. -/// Element exe of type xs:base64Binary. - _xop__Include* exe 0; ///< Optional element. +/// Element HelloResult of type "https://www.drdump.com/services":Response. + ns1__Response* HelloResult 0; ///< Nillable pointer. /// A handle to the soap struct that manages this instance (automatically set) struct soap *soap ; }; -/// Top-level root element "https://www.crash-server.com/":Hello +/// Top-level root element "https://www.drdump.com/services":UploadMiniDump -/// "https://www.crash-server.com/":Hello is a complexType. -class _ns1__Hello +/// "https://www.drdump.com/services":UploadMiniDump is a complexType. +/// class _ns1__UploadMiniDump operations: +/// - soap_new__ns1__UploadMiniDump(soap*) allocate +/// - soap_new__ns1__UploadMiniDump(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadMiniDump(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadMiniDump(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadMiniDump(soap*, _ns1__UploadMiniDump*) deserialize from a stream +/// - int soap_write__ns1__UploadMiniDump(soap, _ns1__UploadMiniDump*) serialize to a stream +class _ns1__UploadMiniDump { public: -/// Element client of type "https://www.crash-server.com/":ClientLib. - ns1__ClientLib* client 0; ///< Optional element. -/// Element app of type "https://www.crash-server.com/":Application. - ns1__Application* app 0; ///< Optional element. -/// Element mainModule of type xs:string. - std::wstring* mainModule 0; ///< Optional element. +/// Element client of type "https://www.drdump.com/services":ClientLib. + ns1__ClientLib* client 0; ///< Nillable pointer. +/// Element app of type "https://www.drdump.com/services":Application. + ns1__Application* app 0; ///< Nillable pointer. +/// Element addInfo of type "https://www.drdump.com/services":DumpAdditionalInfo. + ns1__DumpAdditionalInfo* addInfo 0; ///< Nillable pointer. +/// Element dump of type xs:base64Binary. + _xop__Include* dump 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. /// A handle to the soap struct that manages this instance (automatically set) struct soap *soap ; }; -/// Top-level root element "https://www.crash-server.com/":HelloResponse +/// Top-level root element "https://www.drdump.com/services":UploadMiniDumpResponse -/// "https://www.crash-server.com/":HelloResponse is a complexType. -class _ns1__HelloResponse +/// "https://www.drdump.com/services":UploadMiniDumpResponse is a complexType. +/// class _ns1__UploadMiniDumpResponse operations: +/// - soap_new__ns1__UploadMiniDumpResponse(soap*) allocate +/// - soap_new__ns1__UploadMiniDumpResponse(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadMiniDumpResponse(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadMiniDumpResponse(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadMiniDumpResponse(soap*, _ns1__UploadMiniDumpResponse*) deserialize from a stream +/// - int soap_write__ns1__UploadMiniDumpResponse(soap, _ns1__UploadMiniDumpResponse*) serialize to a stream +class _ns1__UploadMiniDumpResponse { public: -/// Element HelloResult of type "https://www.crash-server.com/":Response. - ns1__Response* HelloResult 0; ///< Optional element. +/// Element UploadMiniDumpResult of type "https://www.drdump.com/services":Response. + ns1__Response* UploadMiniDumpResult 0; ///< Nillable pointer. /// A handle to the soap struct that manages this instance (automatically set) struct soap *soap ; }; -/// Top-level root element "https://www.crash-server.com/":UploadMiniDump +/// Top-level root element "https://www.drdump.com/services":UploadFullDump -/// "https://www.crash-server.com/":UploadMiniDump is a complexType. -class _ns1__UploadMiniDump +/// "https://www.drdump.com/services":UploadFullDump is a complexType. +/// class _ns1__UploadFullDump operations: +/// - soap_new__ns1__UploadFullDump(soap*) allocate +/// - soap_new__ns1__UploadFullDump(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadFullDump(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadFullDump(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadFullDump(soap*, _ns1__UploadFullDump*) deserialize from a stream +/// - int soap_write__ns1__UploadFullDump(soap, _ns1__UploadFullDump*) serialize to a stream +class _ns1__UploadFullDump { public: -/// Element client of type "https://www.crash-server.com/":ClientLib. - ns1__ClientLib* client 0; ///< Optional element. -/// Element app of type "https://www.crash-server.com/":Application. - ns1__Application* app 0; ///< Optional element. -/// Element mainModule of type xs:string. - std::wstring* mainModule 0; ///< Optional element. -/// Element PCID of type xs:int. - int PCID 1; ///< Required element. -/// Element submitterID of type xs:int. - int submitterID 1; ///< Required element. -/// Element dump of type xs:base64Binary. - _xop__Include* dump 0; ///< Optional element. +/// Element client of type "https://www.drdump.com/services":ClientLib. + ns1__ClientLib* client 0; ///< Nillable pointer. +/// Element app of type "https://www.drdump.com/services":Application. + ns1__Application* app 0; ///< Nillable pointer. +/// Element miniDumpID of type xs:int. + int* miniDumpID 0; ///< Optional element. +/// Element dumpInZip of type xs:base64Binary. + _xop__Include* dumpInZip 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. /// A handle to the soap struct that manages this instance (automatically set) struct soap *soap ; }; -/// Top-level root element "https://www.crash-server.com/":UploadMiniDumpResponse +/// Top-level root element "https://www.drdump.com/services":UploadFullDumpResponse -/// "https://www.crash-server.com/":UploadMiniDumpResponse is a complexType. -class _ns1__UploadMiniDumpResponse +/// "https://www.drdump.com/services":UploadFullDumpResponse is a complexType. +/// class _ns1__UploadFullDumpResponse operations: +/// - soap_new__ns1__UploadFullDumpResponse(soap*) allocate +/// - soap_new__ns1__UploadFullDumpResponse(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadFullDumpResponse(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadFullDumpResponse(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadFullDumpResponse(soap*, _ns1__UploadFullDumpResponse*) deserialize from a stream +/// - int soap_write__ns1__UploadFullDumpResponse(soap, _ns1__UploadFullDumpResponse*) serialize to a stream +class _ns1__UploadFullDumpResponse { public: -/// Element UploadMiniDumpResult of type "https://www.crash-server.com/":Response. - ns1__Response* UploadMiniDumpResult 0; ///< Optional element. +/// Element UploadFullDumpResult of type "https://www.drdump.com/services":Response. + ns1__Response* UploadFullDumpResult 0; ///< Nillable pointer. /// A handle to the soap struct that manages this instance (automatically set) struct soap *soap ; }; -/// Top-level root element "https://www.crash-server.com/":UploadAdditionalInfo +/// Top-level root element "https://www.drdump.com/services":UploadAdditionalInfo -/// "https://www.crash-server.com/":UploadAdditionalInfo is a complexType. +/// "https://www.drdump.com/services":UploadAdditionalInfo is a complexType. +/// class _ns1__UploadAdditionalInfo operations: +/// - soap_new__ns1__UploadAdditionalInfo(soap*) allocate +/// - soap_new__ns1__UploadAdditionalInfo(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadAdditionalInfo(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadAdditionalInfo(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadAdditionalInfo(soap*, _ns1__UploadAdditionalInfo*) deserialize from a stream +/// - int soap_write__ns1__UploadAdditionalInfo(soap, _ns1__UploadAdditionalInfo*) serialize to a stream class _ns1__UploadAdditionalInfo { public: -/// Element client of type "https://www.crash-server.com/":ClientLib. - ns1__ClientLib* client 0; ///< Optional element. -/// Element app of type "https://www.crash-server.com/":Application. - ns1__Application* app 0; ///< Optional element. -/// Element mainModule of type xs:string. - std::wstring* mainModule 0; ///< Optional element. +/// Element client of type "https://www.drdump.com/services":ClientLib. + ns1__ClientLib* client 0; ///< Nillable pointer. +/// Element app of type "https://www.drdump.com/services":Application. + ns1__Application* app 0; ///< Nillable pointer. /// Element miniDumpID of type xs:int. - int miniDumpID 1; ///< Required element. + int* miniDumpID 0; ///< Optional element. /// Element info of type xs:base64Binary. - _xop__Include* info 0; ///< Optional element. -/// Element infoType of type "https://www.crash-server.com/":AdditionalInfoType. - enum ns1__AdditionalInfoType infoType 1; ///< Required element. + _xop__Include* info 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// A handle to the soap struct that manages this instance (automatically set) + struct soap *soap ; +}; + + +/// Top-level root element "https://www.drdump.com/services":UploadAdditionalInfoResponse + +/// "https://www.drdump.com/services":UploadAdditionalInfoResponse is a complexType. +/// class _ns1__UploadAdditionalInfoResponse operations: +/// - soap_new__ns1__UploadAdditionalInfoResponse(soap*) allocate +/// - soap_new__ns1__UploadAdditionalInfoResponse(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadAdditionalInfoResponse(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadAdditionalInfoResponse(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadAdditionalInfoResponse(soap*, _ns1__UploadAdditionalInfoResponse*) deserialize from a stream +/// - int soap_write__ns1__UploadAdditionalInfoResponse(soap, _ns1__UploadAdditionalInfoResponse*) serialize to a stream +class _ns1__UploadAdditionalInfoResponse +{ public: +/// Element UploadAdditionalInfoResult of type "https://www.drdump.com/services":Response. + ns1__Response* UploadAdditionalInfoResult 0; ///< Nillable pointer. +/// A handle to the soap struct that manages this instance (automatically set) + struct soap *soap ; +}; + + +/// Top-level root element "https://www.drdump.com/services":RejectedToSendAdditionalInfo + +/// "https://www.drdump.com/services":RejectedToSendAdditionalInfo is a complexType. +/// class _ns1__RejectedToSendAdditionalInfo operations: +/// - soap_new__ns1__RejectedToSendAdditionalInfo(soap*) allocate +/// - soap_new__ns1__RejectedToSendAdditionalInfo(soap*, int num) allocate array +/// - soap_new_req__ns1__RejectedToSendAdditionalInfo(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__RejectedToSendAdditionalInfo(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__RejectedToSendAdditionalInfo(soap*, _ns1__RejectedToSendAdditionalInfo*) deserialize from a stream +/// - int soap_write__ns1__RejectedToSendAdditionalInfo(soap, _ns1__RejectedToSendAdditionalInfo*) serialize to a stream +class _ns1__RejectedToSendAdditionalInfo +{ public: +/// Element client of type "https://www.drdump.com/services":ClientLib. + ns1__ClientLib* client 0; ///< Nillable pointer. +/// Element app of type "https://www.drdump.com/services":Application. + ns1__Application* app 0; ///< Nillable pointer. +/// Element miniDumpID of type xs:int. + int* miniDumpID 0; ///< Optional element. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// A handle to the soap struct that manages this instance (automatically set) + struct soap *soap ; +}; + + +/// Top-level root element "https://www.drdump.com/services":RejectedToSendAdditionalInfoResponse + +/// "https://www.drdump.com/services":RejectedToSendAdditionalInfoResponse is a complexType. +/// class _ns1__RejectedToSendAdditionalInfoResponse operations: +/// - soap_new__ns1__RejectedToSendAdditionalInfoResponse(soap*) allocate +/// - soap_new__ns1__RejectedToSendAdditionalInfoResponse(soap*, int num) allocate array +/// - soap_new_req__ns1__RejectedToSendAdditionalInfoResponse(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__RejectedToSendAdditionalInfoResponse(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__RejectedToSendAdditionalInfoResponse(soap*, _ns1__RejectedToSendAdditionalInfoResponse*) deserialize from a stream +/// - int soap_write__ns1__RejectedToSendAdditionalInfoResponse(soap, _ns1__RejectedToSendAdditionalInfoResponse*) serialize to a stream +class _ns1__RejectedToSendAdditionalInfoResponse +{ public: +/// Element RejectedToSendAdditionalInfoResult of type "https://www.drdump.com/services":Response. + ns1__Response* RejectedToSendAdditionalInfoResult 0; ///< Nillable pointer. +/// A handle to the soap struct that manages this instance (automatically set) + struct soap *soap ; +}; + + +/// Top-level root element "https://www.drdump.com/services":UploadSymbol + +/// "https://www.drdump.com/services":UploadSymbol is a complexType. +/// class _ns1__UploadSymbol operations: +/// - soap_new__ns1__UploadSymbol(soap*) allocate +/// - soap_new__ns1__UploadSymbol(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadSymbol(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadSymbol(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadSymbol(soap*, _ns1__UploadSymbol*) deserialize from a stream +/// - int soap_write__ns1__UploadSymbol(soap, _ns1__UploadSymbol*) serialize to a stream +class _ns1__UploadSymbol +{ public: +/// Element client of type "https://www.drdump.com/services":ClientLib. + ns1__ClientLib* client 0; ///< Nillable pointer. +/// Element app of type "https://www.drdump.com/services":Application. + ns1__Application* app 0; ///< Nillable pointer. +/// Element publish of type xs:boolean. + bool* publish 0; ///< Optional element. +/// Element sym of type xs:base64Binary. + _xop__Include* sym 0; ///< Nillable pointer. +/// A handle to the soap struct that manages this instance (automatically set) + struct soap *soap ; +}; + + +/// Top-level root element "https://www.drdump.com/services":UploadSymbolResponse + +/// "https://www.drdump.com/services":UploadSymbolResponse is a complexType. +/// class _ns1__UploadSymbolResponse operations: +/// - soap_new__ns1__UploadSymbolResponse(soap*) allocate +/// - soap_new__ns1__UploadSymbolResponse(soap*, int num) allocate array +/// - soap_new_req__ns1__UploadSymbolResponse(soap*, ...) allocate, set required members +/// - soap_new_set__ns1__UploadSymbolResponse(soap*, ...) allocate, set all public members +/// - int soap_read__ns1__UploadSymbolResponse(soap*, _ns1__UploadSymbolResponse*) deserialize from a stream +/// - int soap_write__ns1__UploadSymbolResponse(soap, _ns1__UploadSymbolResponse*) serialize to a stream +class _ns1__UploadSymbolResponse +{ public: +/// Element UploadSymbolResult of type xs:string. + std::wstring* UploadSymbolResult 0; ///< Nillable pointer. /// A handle to the soap struct that manages this instance (automatically set) struct soap *soap ; }; +/******************************************************************************\ + * * + * Schema Complex Types and Top-Level Elements * + * http://schemas.microsoft.com/2003/10/Serialization/ * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Schema Complex Types and Top-Level Elements * + * http://schemas.datacontract.org/2004/07/DumpUploadService3 * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Schema Complex Types and Top-Level Elements * + * http://schemas.microsoft.com/2003/10/Serialization/Arrays * + * * +\******************************************************************************/ + + +/// "http://schemas.microsoft.com/2003/10/Serialization/Arrays":ArrayOfstring is a complexType. +/// class ns5__ArrayOfstring operations: +/// - soap_new_ns5__ArrayOfstring(soap*) allocate +/// - soap_new_ns5__ArrayOfstring(soap*, int num) allocate array +/// - soap_new_req_ns5__ArrayOfstring(soap*, ...) allocate, set required members +/// - soap_new_set_ns5__ArrayOfstring(soap*, ...) allocate, set all public members +/// - int soap_read_ns5__ArrayOfstring(soap*, ns5__ArrayOfstring*) deserialize from a stream +/// - int soap_write_ns5__ArrayOfstring(soap, ns5__ArrayOfstring*) serialize to a stream +class ns5__ArrayOfstring : public xsd__anyType +{ public: +/// Vector of std::wstring with length 0..unbounded + std::vector string 0; ///< Nillable pointer. +}; + +/// "https://www.drdump.com/services":StopResponse is a complexType with complexContent extension of "https://www.drdump.com/services":Response. +/// class ns1__StopResponse operations: +/// - soap_new_ns1__StopResponse(soap*) allocate +/// - soap_new_ns1__StopResponse(soap*, int num) allocate array +/// - soap_new_req_ns1__StopResponse(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__StopResponse(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__StopResponse(soap*, ns1__StopResponse*) deserialize from a stream +/// - int soap_write_ns1__StopResponse(soap, ns1__StopResponse*) serialize to a stream +class ns1__StopResponse : public ns1__Response +{ public: +/* INHERITED FROM ns1__Response: +/// Element clientID of type xs:string. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// Element dumpGroupID of type xs:int. + int* dumpGroupID 0; ///< Optional element. +/// Element dumpID of type xs:int. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. +/// Element urlToProblem of type xs:string. + std::wstring* urlToProblem 0; ///< Nillable pointer. + END OF INHERITED FROM ns1__Response */ +}; + +/// "https://www.drdump.com/services":ErrorResponse is a complexType with complexContent extension of "https://www.drdump.com/services":Response. +/// class ns1__ErrorResponse operations: +/// - soap_new_ns1__ErrorResponse(soap*) allocate +/// - soap_new_ns1__ErrorResponse(soap*, int num) allocate array +/// - soap_new_req_ns1__ErrorResponse(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__ErrorResponse(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__ErrorResponse(soap*, ns1__ErrorResponse*) deserialize from a stream +/// - int soap_write_ns1__ErrorResponse(soap, ns1__ErrorResponse*) serialize to a stream +class ns1__ErrorResponse : public ns1__Response +{ public: +/* INHERITED FROM ns1__Response: +/// Element clientID of type xs:string. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// Element dumpGroupID of type xs:int. + int* dumpGroupID 0; ///< Optional element. +/// Element dumpID of type xs:int. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. +/// Element urlToProblem of type xs:string. + std::wstring* urlToProblem 0; ///< Nillable pointer. + END OF INHERITED FROM ns1__Response */ +/// Element error of type xs:string. + std::wstring* error ; ///< Nillable pointer. +}; + +/// "https://www.drdump.com/services":HaveSolutionResponse is a complexType with complexContent extension of "https://www.drdump.com/services":Response. +/// class ns1__HaveSolutionResponse operations: +/// - soap_new_ns1__HaveSolutionResponse(soap*) allocate +/// - soap_new_ns1__HaveSolutionResponse(soap*, int num) allocate array +/// - soap_new_req_ns1__HaveSolutionResponse(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__HaveSolutionResponse(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__HaveSolutionResponse(soap*, ns1__HaveSolutionResponse*) deserialize from a stream +/// - int soap_write_ns1__HaveSolutionResponse(soap, ns1__HaveSolutionResponse*) serialize to a stream +class ns1__HaveSolutionResponse : public ns1__Response +{ public: +/* INHERITED FROM ns1__Response: +/// Element clientID of type xs:string. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// Element dumpGroupID of type xs:int. + int* dumpGroupID 0; ///< Optional element. +/// Element dumpID of type xs:int. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. +/// Element urlToProblem of type xs:string. + std::wstring* urlToProblem 0; ///< Nillable pointer. + END OF INHERITED FROM ns1__Response */ +/// Element askConfirmation of type xs:boolean. + bool askConfirmation 1; ///< Required element. +/// Element exe of type xs:base64Binary. + _xop__Include* exe 0; ///< Nillable pointer. +/// Element type of type "http://schemas.datacontract.org/2004/07/DumpUploadService3":HaveSolutionResponse.SolutionType. + enum ns4__HaveSolutionResponse_SolutionType type 1; ///< Required element. +/// Element url of type xs:string. + std::wstring* url 0; ///< Nillable pointer. +}; + +/// "https://www.drdump.com/services":NeedSymbolsThenMiniDumpResponse is a complexType with complexContent extension of "https://www.drdump.com/services":Response. +/// class ns1__NeedSymbolsThenMiniDumpResponse operations: +/// - soap_new_ns1__NeedSymbolsThenMiniDumpResponse(soap*) allocate +/// - soap_new_ns1__NeedSymbolsThenMiniDumpResponse(soap*, int num) allocate array +/// - soap_new_req_ns1__NeedSymbolsThenMiniDumpResponse(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__NeedSymbolsThenMiniDumpResponse(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__NeedSymbolsThenMiniDumpResponse(soap*, ns1__NeedSymbolsThenMiniDumpResponse*) deserialize from a stream +/// - int soap_write_ns1__NeedSymbolsThenMiniDumpResponse(soap, ns1__NeedSymbolsThenMiniDumpResponse*) serialize to a stream +class ns1__NeedSymbolsThenMiniDumpResponse : public ns1__Response +{ public: +/* INHERITED FROM ns1__Response: +/// Element clientID of type xs:string. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// Element dumpGroupID of type xs:int. + int* dumpGroupID 0; ///< Optional element. +/// Element dumpID of type xs:int. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. +/// Element urlToProblem of type xs:string. + std::wstring* urlToProblem 0; ///< Nillable pointer. + END OF INHERITED FROM ns1__Response */ +/// Element askConfirmation of type xs:boolean. + bool askConfirmation 1; ///< Required element. +/// Element msSymbols of type "http://schemas.microsoft.com/2003/10/Serialization/Arrays":ArrayOfstring. + ns5__ArrayOfstring* msSymbols ; ///< Nillable pointer. +/// Element symbols of type "http://schemas.microsoft.com/2003/10/Serialization/Arrays":ArrayOfstring. + ns5__ArrayOfstring* symbols ; ///< Nillable pointer. +}; + +/// "https://www.drdump.com/services":NeedMiniDumpResponse is a complexType with complexContent extension of "https://www.drdump.com/services":Response. +/// class ns1__NeedMiniDumpResponse operations: +/// - soap_new_ns1__NeedMiniDumpResponse(soap*) allocate +/// - soap_new_ns1__NeedMiniDumpResponse(soap*, int num) allocate array +/// - soap_new_req_ns1__NeedMiniDumpResponse(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__NeedMiniDumpResponse(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__NeedMiniDumpResponse(soap*, ns1__NeedMiniDumpResponse*) deserialize from a stream +/// - int soap_write_ns1__NeedMiniDumpResponse(soap, ns1__NeedMiniDumpResponse*) serialize to a stream +class ns1__NeedMiniDumpResponse : public ns1__Response +{ public: +/* INHERITED FROM ns1__Response: +/// Element clientID of type xs:string. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// Element dumpGroupID of type xs:int. + int* dumpGroupID 0; ///< Optional element. +/// Element dumpID of type xs:int. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. +/// Element urlToProblem of type xs:string. + std::wstring* urlToProblem 0; ///< Nillable pointer. + END OF INHERITED FROM ns1__Response */ +}; + +/// "https://www.drdump.com/services":NeedFullDumpResponse is a complexType with complexContent extension of "https://www.drdump.com/services":Response. +/// class ns1__NeedFullDumpResponse operations: +/// - soap_new_ns1__NeedFullDumpResponse(soap*) allocate +/// - soap_new_ns1__NeedFullDumpResponse(soap*, int num) allocate array +/// - soap_new_req_ns1__NeedFullDumpResponse(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__NeedFullDumpResponse(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__NeedFullDumpResponse(soap*, ns1__NeedFullDumpResponse*) deserialize from a stream +/// - int soap_write_ns1__NeedFullDumpResponse(soap, ns1__NeedFullDumpResponse*) serialize to a stream +class ns1__NeedFullDumpResponse : public ns1__Response +{ public: +/* INHERITED FROM ns1__Response: +/// Element clientID of type xs:string. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// Element dumpGroupID of type xs:int. + int* dumpGroupID 0; ///< Optional element. +/// Element dumpID of type xs:int. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. +/// Element urlToProblem of type xs:string. + std::wstring* urlToProblem 0; ///< Nillable pointer. + END OF INHERITED FROM ns1__Response */ +/// Element attachUserInfo of type xs:boolean. + bool attachUserInfo 1; ///< Required element. +/// Element restrictedDumpType of type xs:unsignedInt. + unsigned int restrictedDumpType 1; ///< Required element. +}; + +/// "https://www.drdump.com/services":NeedMoreInfoResponse is a complexType with complexContent extension of "https://www.drdump.com/services":Response. +/// class ns1__NeedMoreInfoResponse operations: +/// - soap_new_ns1__NeedMoreInfoResponse(soap*) allocate +/// - soap_new_ns1__NeedMoreInfoResponse(soap*, int num) allocate array +/// - soap_new_req_ns1__NeedMoreInfoResponse(soap*, ...) allocate, set required members +/// - soap_new_set_ns1__NeedMoreInfoResponse(soap*, ...) allocate, set all public members +/// - int soap_read_ns1__NeedMoreInfoResponse(soap*, ns1__NeedMoreInfoResponse*) deserialize from a stream +/// - int soap_write_ns1__NeedMoreInfoResponse(soap, ns1__NeedMoreInfoResponse*) serialize to a stream +class ns1__NeedMoreInfoResponse : public ns1__Response +{ public: +/* INHERITED FROM ns1__Response: +/// Element clientID of type xs:string. + std::wstring* clientID 0; ///< Nillable pointer. +/// Element context of type xs:base64Binary. + _xop__Include* context 0; ///< Nillable pointer. +/// Element dumpGroupID of type xs:int. + int* dumpGroupID 0; ///< Optional element. +/// Element dumpID of type xs:int. + int* dumpID 0; ///< Optional element. +/// Element garbage of type xs:base64Binary. + _xop__Include* garbage 0; ///< Nillable pointer. +/// Element problemID of type xs:int. + int* problemID 0; ///< Optional element. +/// Element urlToProblem of type xs:string. + std::wstring* urlToProblem 0; ///< Nillable pointer. + END OF INHERITED FROM ns1__Response */ +/// Element infoModule of type xs:base64Binary. + _xop__Include* infoModule 0; ///< Nillable pointer. +/// Element infoModuleCfg of type xs:string. + std::wstring* infoModuleCfg 0; ///< Nillable pointer. +}; + +/******************************************************************************\ + * * + * Additional Top-Level Elements * + * https://www.drdump.com/services/Imports * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Additional Top-Level Attributes * + * https://www.drdump.com/services/Imports * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Additional Top-Level Elements * + * https://www.drdump.com/services * + * * +\******************************************************************************/ + + +/// Top-level root element "https://www.drdump.com/services":ClientLib of type "https://www.drdump.com/services":ClientLib. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":Application of type "https://www.drdump.com/services":Application. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":AppAdditionalInfo of type "https://www.drdump.com/services":AppAdditionalInfo. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":DumpAdditionalInfo of type "https://www.drdump.com/services":DumpAdditionalInfo. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":ArrayOfModuleSymbolInfo of type "https://www.drdump.com/services":ArrayOfModuleSymbolInfo. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":ModuleSymbolInfo of type "https://www.drdump.com/services":ModuleSymbolInfo. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":Pdb70File of type "https://www.drdump.com/services":Pdb70File. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":Response of type "https://www.drdump.com/services":Response. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":StopResponse of type "https://www.drdump.com/services":StopResponse. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":ErrorResponse of type "https://www.drdump.com/services":ErrorResponse. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":HaveSolutionResponse of type "https://www.drdump.com/services":HaveSolutionResponse. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":NeedSymbolsThenMiniDumpResponse of type "https://www.drdump.com/services":NeedSymbolsThenMiniDumpResponse. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":NeedMiniDumpResponse of type "https://www.drdump.com/services":NeedMiniDumpResponse. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":NeedFullDumpResponse of type "https://www.drdump.com/services":NeedFullDumpResponse. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "https://www.drdump.com/services":NeedMoreInfoResponse of type "https://www.drdump.com/services":NeedMoreInfoResponse. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/******************************************************************************\ + * * + * Additional Top-Level Attributes * + * https://www.drdump.com/services * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Additional Top-Level Elements * + * http://schemas.microsoft.com/2003/10/Serialization/ * + * * +\******************************************************************************/ + + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":anyType of type xs:anyType. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":anyURI of type xs:anyURI. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":base64Binary of type xs:base64Binary. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":boolean of type xs:boolean. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":byte of type xs:byte. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":dateTime of type xs:dateTime. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":decimal of type xs:decimal. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":double of type xs:double. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. -/// Top-level root element "https://www.crash-server.com/":UploadAdditionalInfoResponse +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":float of type xs:float. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. -/// "https://www.crash-server.com/":UploadAdditionalInfoResponse is a complexType. -class _ns1__UploadAdditionalInfoResponse -{ public: -/// Element UploadAdditionalInfoResult of type "https://www.crash-server.com/":Response. - ns1__Response* UploadAdditionalInfoResult 0; ///< Optional element. -/// A handle to the soap struct that manages this instance (automatically set) - struct soap *soap ; -}; +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":int of type xs:int. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":long of type xs:long. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. -/// Top-level root element "https://www.crash-server.com/":UploadSymbol +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":QName of type xs:QName. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. -/// "https://www.crash-server.com/":UploadSymbol is a complexType. -class _ns1__UploadSymbol -{ public: -/// Element client of type "https://www.crash-server.com/":ClientLib. - ns1__ClientLib* client 0; ///< Optional element. -/// Element app of type "https://www.crash-server.com/":Application. - ns1__Application* app 0; ///< Optional element. -/// Element publish of type xs:boolean. - bool publish 1; ///< Required element. -/// Element sym of type xs:base64Binary. - _xop__Include* sym 0; ///< Optional element. -/// A handle to the soap struct that manages this instance (automatically set) - struct soap *soap ; -}; +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":short of type xs:short. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":string of type xs:string. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. -/// Top-level root element "https://www.crash-server.com/":UploadSymbolResponse +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":unsignedByte of type xs:unsignedByte. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. -/// "https://www.crash-server.com/":UploadSymbolResponse is a complexType. -class _ns1__UploadSymbolResponse -{ public: -/// Element UploadSymbolResult of type xs:string. - std::wstring* UploadSymbolResult 0; ///< Optional element. -/// A handle to the soap struct that manages this instance (automatically set) - struct soap *soap ; -}; +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":unsignedInt of type xs:unsignedInt. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":unsignedLong of type xs:unsignedLong. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":unsignedShort of type xs:unsignedShort. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":char of type "http://schemas.microsoft.com/2003/10/Serialization/":char. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":duration of type "http://schemas.microsoft.com/2003/10/Serialization/":duration. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/":guid of type "http://schemas.microsoft.com/2003/10/Serialization/":guid. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. /******************************************************************************\ * * - * Schema Complex Types and Top-Level Elements * - * http://microsoft.com/wsdl/types/ * + * Additional Top-Level Attributes * + * http://schemas.microsoft.com/2003/10/Serialization/ * * * \******************************************************************************/ +/// Top-level attribute "http://schemas.microsoft.com/2003/10/Serialization/":FactoryType of simpleType xs:QName. +/// Note: use wsdl2h option -g to auto-generate a top-level attribute declaration and processing code. + +/// Top-level attribute "http://schemas.microsoft.com/2003/10/Serialization/":Id of simpleType xs:ID. +/// Note: use wsdl2h option -g to auto-generate a top-level attribute declaration and processing code. + +/// Top-level attribute "http://schemas.microsoft.com/2003/10/Serialization/":Ref of simpleType xs:IDREF. +/// Note: use wsdl2h option -g to auto-generate a top-level attribute declaration and processing code. + /******************************************************************************\ * * * Additional Top-Level Elements * - * https://www.crash-server.com/ * + * http://schemas.datacontract.org/2004/07/DumpUploadService3 * * * \******************************************************************************/ +/// Top-level root element "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.Architecture of type "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.Architecture. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.ClientType of type "http://schemas.datacontract.org/2004/07/DumpUploadService3":ClientLib.ClientType. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + +/// Top-level root element "http://schemas.datacontract.org/2004/07/DumpUploadService3":HaveSolutionResponse.SolutionType of type "http://schemas.datacontract.org/2004/07/DumpUploadService3":HaveSolutionResponse.SolutionType. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + /******************************************************************************\ * * * Additional Top-Level Attributes * - * https://www.crash-server.com/ * + * http://schemas.datacontract.org/2004/07/DumpUploadService3 * * * \******************************************************************************/ @@ -483,15 +1459,18 @@ class _ns1__UploadSymbolResponse /******************************************************************************\ * * * Additional Top-Level Elements * - * http://microsoft.com/wsdl/types/ * + * http://schemas.microsoft.com/2003/10/Serialization/Arrays * * * \******************************************************************************/ +/// Top-level root element "http://schemas.microsoft.com/2003/10/Serialization/Arrays":ArrayOfstring of type "http://schemas.microsoft.com/2003/10/Serialization/Arrays":ArrayOfstring. +/// Note: use wsdl2h option -g to auto-generate a top-level root element declaration and processing code. + /******************************************************************************\ * * * Additional Top-Level Attributes * - * http://microsoft.com/wsdl/types/ * + * http://schemas.microsoft.com/2003/10/Serialization/Arrays * * * \******************************************************************************/ @@ -502,28 +1481,22 @@ class _ns1__UploadSymbolResponse * * \******************************************************************************/ +// This service supports SOAP 1.2 namespaces: +#import "soap12.h" -//gsoap ns3 service name: UploaderSoap -//gsoap ns3 service type: UploaderSoap -//gsoap ns3 service port: http://localhost:59175/DumpUploader.asmx -//gsoap ns3 service namespace: https://www.crash-server.com/UploaderSoap -//gsoap ns3 service transport: http://schemas.xmlsoap.org/soap/http +//gsoap ns1 service name: CustomBinding_DumpUploadService3_Uploader +//gsoap ns1 service type: DumpUploadService3_Uploader +//gsoap ns1 service port: http://localhost:59175/Service/DumpUploader3.svc +//gsoap ns1 service namespace: https://www.drdump.com/services +//gsoap ns1 service transport: http://schemas.xmlsoap.org/soap/http -//gsoap ns4 service name: UploaderSoap12 -//gsoap ns4 service type: UploaderSoap -//gsoap ns4 service port: http://localhost:59175/DumpUploader.asmx -//gsoap ns4 service namespace: https://www.crash-server.com/UploaderSoap12 -//gsoap ns4 service transport: http://schemas.xmlsoap.org/soap/http +/** @mainpage Uploader Definitions -/** @mainpage Service Definitions +@section Uploader_bindings Service Bindings -@section Service_bindings Service Bindings + - @ref CustomBinding_DumpUploadService3_Uploader - - @ref UploaderSoap - - - @ref UploaderSoap12 - -@section Service_more More Information +@section Uploader_more More Information - @ref page_notes "Usage Notes" @@ -538,52 +1511,47 @@ class _ns1__UploadSymbolResponse /** -@page UploaderSoap Binding "UploaderSoap" - -@section UploaderSoap_operations Operations of Binding "UploaderSoap" - - - @ref __ns3__Hello +@page CustomBinding_DumpUploadService3_Uploader Binding "CustomBinding_DumpUploadService3_Uploader" - - @ref __ns3__UploadMiniDump +@section CustomBinding_DumpUploadService3_Uploader_operations Operations of Binding "CustomBinding_DumpUploadService3_Uploader" - - @ref __ns3__UploadAdditionalInfo + - @ref __ns1__Hello - - @ref __ns3__UploadSymbol + - @ref __ns1__UploadMiniDump -@section UploaderSoap_ports Endpoints of Binding "UploaderSoap" - - - http://localhost:59175/DumpUploader.asmx - -Note: use wsdl2h option -N to change the service binding prefix name - -*/ + - @ref __ns1__UploadFullDump -/** + - @ref __ns1__UploadAdditionalInfo -@page UploaderSoap12 Binding "UploaderSoap12" + - @ref __ns1__RejectedToSendAdditionalInfo -@section UploaderSoap12_operations Operations of Binding "UploaderSoap12" + - @ref __ns1__UploadSymbol - - @ref __ns4__Hello +@section CustomBinding_DumpUploadService3_Uploader_ports Endpoints of Binding "CustomBinding_DumpUploadService3_Uploader" - - @ref __ns4__UploadMiniDump + - http://localhost:59175/Service/DumpUploader3.svc - - @ref __ns4__UploadAdditionalInfo +@section CustomBinding_DumpUploadService3_Uploader_policy Policy of Binding "CustomBinding_DumpUploadService3_Uploader" - - @ref __ns4__UploadSymbol +See Section @ref CustomBinding_DumpUploadService3_Uploader_policy_enablers -@section UploaderSoap12_ports Endpoints of Binding "UploaderSoap12" + - WS-Policy applicable to the service endpoint ports: + - Exactly one of the following: + - All of the following: + - Other policy requirements: + @verbatim + + @endverbatim - - http://localhost:59175/DumpUploader.asmx +Note: use wsdl2h option -Nname to change the service binding prefix name -Note: use wsdl2h option -N to change the service binding prefix name */ /******************************************************************************\ * * * Service Binding * - * UploaderSoap * + * CustomBinding_DumpUploadService3_Uploader * * * \******************************************************************************/ @@ -591,530 +1559,496 @@ Note: use wsdl2h option -N to change the service binding prefix name /******************************************************************************\ * * * Service Operation * - * __ns3__Hello * + * __ns1__Hello * * * \******************************************************************************/ -/// Operation "__ns3__Hello" of service binding "UploaderSoap" +/// Operation "__ns1__Hello" of service binding "CustomBinding_DumpUploadService3_Uploader" /** Operation details: - - SOAP document/literal style messaging - - SOAP action="https://www.crash-server.com/Hello" + - Action: "https://www.drdump.com/services/DumpUploadService3.Uploader/Hello" + + - Addressing input action: "https://www.drdump.com/services/DumpUploadService3.Uploader/Hello" + + - Addressing output action: "https://www.drdump.com/services/DumpUploadService3.Uploader/HelloResponse" C stub function (defined in soapClient.c[pp] generated by soapcpp2): @code - int soap_call___ns3__Hello( + int soap_call___ns1__Hello( struct soap *soap, NULL, // char *endpoint = NULL selects default endpoint for this operation NULL, // char *action = NULL selects default action for this operation - // request parameters: + // input parameters: _ns1__Hello* ns1__Hello, - // response parameters: + // output parameters: _ns1__HelloResponse* ns1__HelloResponse ); @endcode C server function (called from the service dispatcher defined in soapServer.c[pp]): @code - int __ns3__Hello( + int __ns1__Hello( struct soap *soap, - // request parameters: + // input parameters: _ns1__Hello* ns1__Hello, - // response parameters: + // output parameters: _ns1__HelloResponse* ns1__HelloResponse ); @endcode -C++ proxy class (defined in soapUploaderSoapProxy.h): +C++ proxy class (defined in soapCustomBinding_DumpUploadService3_UploaderProxy.h): @code - class UploaderSoapProxy; + class CustomBinding_DumpUploadService3_UploaderProxy; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use proxy classes; -C++ service class (defined in soapUploaderSoapService.h): +C++ service class (defined in soapCustomBinding_DumpUploadService3_UploaderService.h): @code - class UploaderSoapService; + class CustomBinding_DumpUploadService3_UploaderService; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use service classes; */ -//gsoap ns3 service method-style: Hello document -//gsoap ns3 service method-encoding: Hello literal -//gsoap ns3 service method-action: Hello https://www.crash-server.com/Hello -int __ns3__Hello( - _ns1__Hello* ns1__Hello, ///< Request parameter - _ns1__HelloResponse* ns1__HelloResponse ///< Response parameter +//gsoap ns1 service method-protocol: Hello SOAP +//gsoap ns1 service method-style: Hello document +//gsoap ns1 service method-encoding: Hello literal +//gsoap ns1 service method-input-action: Hello https://www.drdump.com/services/DumpUploadService3.Uploader/Hello +//gsoap ns1 service method-output-action: Hello https://www.drdump.com/services/DumpUploadService3.Uploader/HelloResponse +int __ns1__Hello( + _ns1__Hello* ns1__Hello, ///< Input parameter + _ns1__HelloResponse* ns1__HelloResponse ///< Output parameter ); /******************************************************************************\ * * * Service Operation * - * __ns3__UploadMiniDump * + * __ns1__UploadMiniDump * * * \******************************************************************************/ -/// Operation "__ns3__UploadMiniDump" of service binding "UploaderSoap" +/// Operation "__ns1__UploadMiniDump" of service binding "CustomBinding_DumpUploadService3_Uploader" /** Operation details: - - SOAP document/literal style messaging - - SOAP action="https://www.crash-server.com/UploadMiniDump" + - Action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadMiniDump" + + - Addressing input action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadMiniDump" + + - Addressing output action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadMiniDumpResponse" C stub function (defined in soapClient.c[pp] generated by soapcpp2): @code - int soap_call___ns3__UploadMiniDump( + int soap_call___ns1__UploadMiniDump( struct soap *soap, NULL, // char *endpoint = NULL selects default endpoint for this operation NULL, // char *action = NULL selects default action for this operation - // request parameters: + // input parameters: _ns1__UploadMiniDump* ns1__UploadMiniDump, - // response parameters: + // output parameters: _ns1__UploadMiniDumpResponse* ns1__UploadMiniDumpResponse ); @endcode C server function (called from the service dispatcher defined in soapServer.c[pp]): @code - int __ns3__UploadMiniDump( + int __ns1__UploadMiniDump( struct soap *soap, - // request parameters: + // input parameters: _ns1__UploadMiniDump* ns1__UploadMiniDump, - // response parameters: + // output parameters: _ns1__UploadMiniDumpResponse* ns1__UploadMiniDumpResponse ); @endcode -C++ proxy class (defined in soapUploaderSoapProxy.h): +C++ proxy class (defined in soapCustomBinding_DumpUploadService3_UploaderProxy.h): @code - class UploaderSoapProxy; + class CustomBinding_DumpUploadService3_UploaderProxy; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use proxy classes; -C++ service class (defined in soapUploaderSoapService.h): +C++ service class (defined in soapCustomBinding_DumpUploadService3_UploaderService.h): @code - class UploaderSoapService; + class CustomBinding_DumpUploadService3_UploaderService; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use service classes; */ -//gsoap ns3 service method-style: UploadMiniDump document -//gsoap ns3 service method-encoding: UploadMiniDump literal -//gsoap ns3 service method-action: UploadMiniDump https://www.crash-server.com/UploadMiniDump -int __ns3__UploadMiniDump( - _ns1__UploadMiniDump* ns1__UploadMiniDump, ///< Request parameter - _ns1__UploadMiniDumpResponse* ns1__UploadMiniDumpResponse ///< Response parameter +//gsoap ns1 service method-protocol: UploadMiniDump SOAP +//gsoap ns1 service method-style: UploadMiniDump document +//gsoap ns1 service method-encoding: UploadMiniDump literal +//gsoap ns1 service method-input-action: UploadMiniDump https://www.drdump.com/services/DumpUploadService3.Uploader/UploadMiniDump +//gsoap ns1 service method-output-action: UploadMiniDump https://www.drdump.com/services/DumpUploadService3.Uploader/UploadMiniDumpResponse +int __ns1__UploadMiniDump( + _ns1__UploadMiniDump* ns1__UploadMiniDump, ///< Input parameter + _ns1__UploadMiniDumpResponse* ns1__UploadMiniDumpResponse ///< Output parameter ); /******************************************************************************\ * * * Service Operation * - * __ns3__UploadAdditionalInfo * + * __ns1__UploadFullDump * * * \******************************************************************************/ -/// Operation "__ns3__UploadAdditionalInfo" of service binding "UploaderSoap" +/// Operation "__ns1__UploadFullDump" of service binding "CustomBinding_DumpUploadService3_Uploader" /** Operation details: - - SOAP document/literal style messaging - - SOAP action="https://www.crash-server.com/UploadAdditionalInfo" - -C stub function (defined in soapClient.c[pp] generated by soapcpp2): -@code - int soap_call___ns3__UploadAdditionalInfo( - struct soap *soap, - NULL, // char *endpoint = NULL selects default endpoint for this operation - NULL, // char *action = NULL selects default action for this operation - // request parameters: - _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, - // response parameters: - _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse - ); -@endcode - -C server function (called from the service dispatcher defined in soapServer.c[pp]): -@code - int __ns3__UploadAdditionalInfo( - struct soap *soap, - // request parameters: - _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, - // response parameters: - _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse - ); -@endcode - -C++ proxy class (defined in soapUploaderSoapProxy.h): -@code - class UploaderSoapProxy; -@endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; - -C++ service class (defined in soapUploaderSoapService.h): -@code - class UploaderSoapService; -@endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; - -*/ - -//gsoap ns3 service method-style: UploadAdditionalInfo document -//gsoap ns3 service method-encoding: UploadAdditionalInfo literal -//gsoap ns3 service method-action: UploadAdditionalInfo https://www.crash-server.com/UploadAdditionalInfo -int __ns3__UploadAdditionalInfo( - _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, ///< Request parameter - _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse ///< Response parameter -); - -/******************************************************************************\ - * * - * Service Operation * - * __ns3__UploadSymbol * - * * -\******************************************************************************/ - - -/// Operation "__ns3__UploadSymbol" of service binding "UploaderSoap" - -/** - -Operation details: - + - Action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadFullDump" - - SOAP document/literal style messaging + - Addressing input action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadFullDump" - - SOAP action="https://www.crash-server.com/UploadSymbol" + - Addressing output action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadFullDumpResponse" C stub function (defined in soapClient.c[pp] generated by soapcpp2): @code - int soap_call___ns3__UploadSymbol( + int soap_call___ns1__UploadFullDump( struct soap *soap, NULL, // char *endpoint = NULL selects default endpoint for this operation NULL, // char *action = NULL selects default action for this operation - // request parameters: - _ns1__UploadSymbol* ns1__UploadSymbol, - // response parameters: - _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse + // input parameters: + _ns1__UploadFullDump* ns1__UploadFullDump, + // output parameters: + _ns1__UploadFullDumpResponse* ns1__UploadFullDumpResponse ); @endcode C server function (called from the service dispatcher defined in soapServer.c[pp]): @code - int __ns3__UploadSymbol( + int __ns1__UploadFullDump( struct soap *soap, - // request parameters: - _ns1__UploadSymbol* ns1__UploadSymbol, - // response parameters: - _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse + // input parameters: + _ns1__UploadFullDump* ns1__UploadFullDump, + // output parameters: + _ns1__UploadFullDumpResponse* ns1__UploadFullDumpResponse ); @endcode -C++ proxy class (defined in soapUploaderSoapProxy.h): +C++ proxy class (defined in soapCustomBinding_DumpUploadService3_UploaderProxy.h): @code - class UploaderSoapProxy; + class CustomBinding_DumpUploadService3_UploaderProxy; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use proxy classes; -C++ service class (defined in soapUploaderSoapService.h): +C++ service class (defined in soapCustomBinding_DumpUploadService3_UploaderService.h): @code - class UploaderSoapService; + class CustomBinding_DumpUploadService3_UploaderService; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use service classes; */ -//gsoap ns3 service method-style: UploadSymbol document -//gsoap ns3 service method-encoding: UploadSymbol literal -//gsoap ns3 service method-action: UploadSymbol https://www.crash-server.com/UploadSymbol -int __ns3__UploadSymbol( - _ns1__UploadSymbol* ns1__UploadSymbol, ///< Request parameter - _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse ///< Response parameter +//gsoap ns1 service method-protocol: UploadFullDump SOAP +//gsoap ns1 service method-style: UploadFullDump document +//gsoap ns1 service method-encoding: UploadFullDump literal +//gsoap ns1 service method-input-action: UploadFullDump https://www.drdump.com/services/DumpUploadService3.Uploader/UploadFullDump +//gsoap ns1 service method-output-action: UploadFullDump https://www.drdump.com/services/DumpUploadService3.Uploader/UploadFullDumpResponse +int __ns1__UploadFullDump( + _ns1__UploadFullDump* ns1__UploadFullDump, ///< Input parameter + _ns1__UploadFullDumpResponse* ns1__UploadFullDumpResponse ///< Output parameter ); /******************************************************************************\ * * - * Service Binding * - * UploaderSoap12 * - * * -\******************************************************************************/ - - -/******************************************************************************\ - * * * Service Operation * - * __ns4__Hello * + * __ns1__UploadAdditionalInfo * * * \******************************************************************************/ -/// Operation "__ns4__Hello" of service binding "UploaderSoap12" +/// Operation "__ns1__UploadAdditionalInfo" of service binding "CustomBinding_DumpUploadService3_Uploader" /** Operation details: - - SOAP document/literal style messaging - - SOAP action="https://www.crash-server.com/Hello" + - Action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadAdditionalInfo" + + - Addressing input action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadAdditionalInfo" + + - Addressing output action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadAdditionalInfoResponse" C stub function (defined in soapClient.c[pp] generated by soapcpp2): @code - int soap_call___ns4__Hello( + int soap_call___ns1__UploadAdditionalInfo( struct soap *soap, NULL, // char *endpoint = NULL selects default endpoint for this operation NULL, // char *action = NULL selects default action for this operation - // request parameters: - _ns1__Hello* ns1__Hello, - // response parameters: - _ns1__HelloResponse* ns1__HelloResponse + // input parameters: + _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, + // output parameters: + _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse ); @endcode C server function (called from the service dispatcher defined in soapServer.c[pp]): @code - int __ns4__Hello( + int __ns1__UploadAdditionalInfo( struct soap *soap, - // request parameters: - _ns1__Hello* ns1__Hello, - // response parameters: - _ns1__HelloResponse* ns1__HelloResponse + // input parameters: + _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, + // output parameters: + _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse ); @endcode -C++ proxy class (defined in soapUploaderSoap12Proxy.h): +C++ proxy class (defined in soapCustomBinding_DumpUploadService3_UploaderProxy.h): @code - class UploaderSoap12Proxy; + class CustomBinding_DumpUploadService3_UploaderProxy; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use proxy classes; -C++ service class (defined in soapUploaderSoap12Service.h): +C++ service class (defined in soapCustomBinding_DumpUploadService3_UploaderService.h): @code - class UploaderSoap12Service; + class CustomBinding_DumpUploadService3_UploaderService; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use service classes; */ -//gsoap ns4 service method-style: Hello document -//gsoap ns4 service method-encoding: Hello literal -//gsoap ns4 service method-action: Hello https://www.crash-server.com/Hello -int __ns4__Hello( - _ns1__Hello* ns1__Hello, ///< Request parameter - _ns1__HelloResponse* ns1__HelloResponse ///< Response parameter +//gsoap ns1 service method-protocol: UploadAdditionalInfo SOAP +//gsoap ns1 service method-style: UploadAdditionalInfo document +//gsoap ns1 service method-encoding: UploadAdditionalInfo literal +//gsoap ns1 service method-input-action: UploadAdditionalInfo https://www.drdump.com/services/DumpUploadService3.Uploader/UploadAdditionalInfo +//gsoap ns1 service method-output-action: UploadAdditionalInfo https://www.drdump.com/services/DumpUploadService3.Uploader/UploadAdditionalInfoResponse +int __ns1__UploadAdditionalInfo( + _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, ///< Input parameter + _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse ///< Output parameter ); /******************************************************************************\ * * * Service Operation * - * __ns4__UploadMiniDump * + * __ns1__RejectedToSendAdditionalInfo * * * \******************************************************************************/ -/// Operation "__ns4__UploadMiniDump" of service binding "UploaderSoap12" +/// Operation "__ns1__RejectedToSendAdditionalInfo" of service binding "CustomBinding_DumpUploadService3_Uploader" /** Operation details: - - SOAP document/literal style messaging - - SOAP action="https://www.crash-server.com/UploadMiniDump" + - Action: "https://www.drdump.com/services/DumpUploadService3.Uploader/RejectedToSendAdditionalInfo" + + - Addressing input action: "https://www.drdump.com/services/DumpUploadService3.Uploader/RejectedToSendAdditionalInfo" + + - Addressing output action: "https://www.drdump.com/services/DumpUploadService3.Uploader/RejectedToSendAdditionalInfoResponse" C stub function (defined in soapClient.c[pp] generated by soapcpp2): @code - int soap_call___ns4__UploadMiniDump( + int soap_call___ns1__RejectedToSendAdditionalInfo( struct soap *soap, NULL, // char *endpoint = NULL selects default endpoint for this operation NULL, // char *action = NULL selects default action for this operation - // request parameters: - _ns1__UploadMiniDump* ns1__UploadMiniDump, - // response parameters: - _ns1__UploadMiniDumpResponse* ns1__UploadMiniDumpResponse + // input parameters: + _ns1__RejectedToSendAdditionalInfo* ns1__RejectedToSendAdditionalInfo, + // output parameters: + _ns1__RejectedToSendAdditionalInfoResponse* ns1__RejectedToSendAdditionalInfoResponse ); @endcode C server function (called from the service dispatcher defined in soapServer.c[pp]): @code - int __ns4__UploadMiniDump( + int __ns1__RejectedToSendAdditionalInfo( struct soap *soap, - // request parameters: - _ns1__UploadMiniDump* ns1__UploadMiniDump, - // response parameters: - _ns1__UploadMiniDumpResponse* ns1__UploadMiniDumpResponse + // input parameters: + _ns1__RejectedToSendAdditionalInfo* ns1__RejectedToSendAdditionalInfo, + // output parameters: + _ns1__RejectedToSendAdditionalInfoResponse* ns1__RejectedToSendAdditionalInfoResponse ); @endcode -C++ proxy class (defined in soapUploaderSoap12Proxy.h): +C++ proxy class (defined in soapCustomBinding_DumpUploadService3_UploaderProxy.h): @code - class UploaderSoap12Proxy; + class CustomBinding_DumpUploadService3_UploaderProxy; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use proxy classes; -C++ service class (defined in soapUploaderSoap12Service.h): +C++ service class (defined in soapCustomBinding_DumpUploadService3_UploaderService.h): @code - class UploaderSoap12Service; + class CustomBinding_DumpUploadService3_UploaderService; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use service classes; */ -//gsoap ns4 service method-style: UploadMiniDump document -//gsoap ns4 service method-encoding: UploadMiniDump literal -//gsoap ns4 service method-action: UploadMiniDump https://www.crash-server.com/UploadMiniDump -int __ns4__UploadMiniDump( - _ns1__UploadMiniDump* ns1__UploadMiniDump, ///< Request parameter - _ns1__UploadMiniDumpResponse* ns1__UploadMiniDumpResponse ///< Response parameter +//gsoap ns1 service method-protocol: RejectedToSendAdditionalInfo SOAP +//gsoap ns1 service method-style: RejectedToSendAdditionalInfo document +//gsoap ns1 service method-encoding: RejectedToSendAdditionalInfo literal +//gsoap ns1 service method-input-action: RejectedToSendAdditionalInfo https://www.drdump.com/services/DumpUploadService3.Uploader/RejectedToSendAdditionalInfo +//gsoap ns1 service method-output-action: RejectedToSendAdditionalInfo https://www.drdump.com/services/DumpUploadService3.Uploader/RejectedToSendAdditionalInfoResponse +int __ns1__RejectedToSendAdditionalInfo( + _ns1__RejectedToSendAdditionalInfo* ns1__RejectedToSendAdditionalInfo, ///< Input parameter + _ns1__RejectedToSendAdditionalInfoResponse* ns1__RejectedToSendAdditionalInfoResponse ///< Output parameter ); /******************************************************************************\ * * * Service Operation * - * __ns4__UploadAdditionalInfo * + * __ns1__UploadSymbol * * * \******************************************************************************/ -/// Operation "__ns4__UploadAdditionalInfo" of service binding "UploaderSoap12" +/// Operation "__ns1__UploadSymbol" of service binding "CustomBinding_DumpUploadService3_Uploader" /** Operation details: - - SOAP document/literal style messaging - - SOAP action="https://www.crash-server.com/UploadAdditionalInfo" + - Action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadSymbol" + + - Addressing input action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadSymbol" + + - Addressing output action: "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadSymbolResponse" C stub function (defined in soapClient.c[pp] generated by soapcpp2): @code - int soap_call___ns4__UploadAdditionalInfo( + int soap_call___ns1__UploadSymbol( struct soap *soap, NULL, // char *endpoint = NULL selects default endpoint for this operation NULL, // char *action = NULL selects default action for this operation - // request parameters: - _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, - // response parameters: - _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse + // input parameters: + _ns1__UploadSymbol* ns1__UploadSymbol, + // output parameters: + _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse ); @endcode C server function (called from the service dispatcher defined in soapServer.c[pp]): @code - int __ns4__UploadAdditionalInfo( + int __ns1__UploadSymbol( struct soap *soap, - // request parameters: - _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, - // response parameters: - _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse + // input parameters: + _ns1__UploadSymbol* ns1__UploadSymbol, + // output parameters: + _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse ); @endcode -C++ proxy class (defined in soapUploaderSoap12Proxy.h): +C++ proxy class (defined in soapCustomBinding_DumpUploadService3_UploaderProxy.h): @code - class UploaderSoap12Proxy; + class CustomBinding_DumpUploadService3_UploaderProxy; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use proxy classes; -C++ service class (defined in soapUploaderSoap12Service.h): +C++ service class (defined in soapCustomBinding_DumpUploadService3_UploaderService.h): @code - class UploaderSoap12Service; + class CustomBinding_DumpUploadService3_UploaderService; @endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; +Important: use soapcpp2 option '-j' (or '-i') to generate greatly improved and easy-to-use service classes; */ -//gsoap ns4 service method-style: UploadAdditionalInfo document -//gsoap ns4 service method-encoding: UploadAdditionalInfo literal -//gsoap ns4 service method-action: UploadAdditionalInfo https://www.crash-server.com/UploadAdditionalInfo -int __ns4__UploadAdditionalInfo( - _ns1__UploadAdditionalInfo* ns1__UploadAdditionalInfo, ///< Request parameter - _ns1__UploadAdditionalInfoResponse* ns1__UploadAdditionalInfoResponse ///< Response parameter +//gsoap ns1 service method-protocol: UploadSymbol SOAP +//gsoap ns1 service method-style: UploadSymbol document +//gsoap ns1 service method-encoding: UploadSymbol literal +//gsoap ns1 service method-input-action: UploadSymbol https://www.drdump.com/services/DumpUploadService3.Uploader/UploadSymbol +//gsoap ns1 service method-output-action: UploadSymbol https://www.drdump.com/services/DumpUploadService3.Uploader/UploadSymbolResponse +int __ns1__UploadSymbol( + _ns1__UploadSymbol* ns1__UploadSymbol, ///< Input parameter + _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse ///< Output parameter ); -/******************************************************************************\ - * * - * Service Operation * - * __ns4__UploadSymbol * - * * -\******************************************************************************/ - - -/// Operation "__ns4__UploadSymbol" of service binding "UploaderSoap12" - /** -Operation details: - - - - SOAP document/literal style messaging - - - SOAP action="https://www.crash-server.com/UploadSymbol" - -C stub function (defined in soapClient.c[pp] generated by soapcpp2): -@code - int soap_call___ns4__UploadSymbol( - struct soap *soap, - NULL, // char *endpoint = NULL selects default endpoint for this operation - NULL, // char *action = NULL selects default action for this operation - // request parameters: - _ns1__UploadSymbol* ns1__UploadSymbol, - // response parameters: - _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse - ); -@endcode - -C server function (called from the service dispatcher defined in soapServer.c[pp]): -@code - int __ns4__UploadSymbol( - struct soap *soap, - // request parameters: - _ns1__UploadSymbol* ns1__UploadSymbol, - // response parameters: - _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse - ); -@endcode +@page CustomBinding_DumpUploadService3_Uploader Binding "CustomBinding_DumpUploadService3_Uploader" -C++ proxy class (defined in soapUploaderSoap12Proxy.h): -@code - class UploaderSoap12Proxy; -@endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use proxy classes; +@section CustomBinding_DumpUploadService3_Uploader_policy_enablers Policy Enablers of Binding "CustomBinding_DumpUploadService3_Uploader" -C++ service class (defined in soapUploaderSoap12Service.h): -@code - class UploaderSoap12Service; -@endcode -Important: use soapcpp2 option '-i' to generate greatly improved and easy-to-use service classes; +Based on policies, this service imports + - WS-Policy reminders and enablers: + - WS-Addressing 1.0 (2005/08, accepts 2004/08): + @code + #import "wsa5.h" // to be added to this header file for the soapcpp2 build step + @endcode + @code + #include "plugin/wsaapi.h" + soap_register_plugin(soap, soap_wsa); // register the wsa plugin in your code + // See the user guide gsoap/doc/wsa/html/index.html + @endcode + - WS-Addressing (2004/08): + @code + #import "wsa.h" // to be added to this header file for the soapcpp2 build step + @endcode + @code + #include "plugin/wsaapi.h" + soap_register_plugin(soap, soap_wsa); // register the wsa plugin in your code + // See the user guide gsoap/doc/wsa/html/index.html + @endcode + - WS-ReliableMessaging 1.0: + @code + #import "wsrm5.h" // to be added to this header file for the soapcpp2 build step + @endcode + @code + #include "plugin/wsrmapi.h" + soap_register_plugin(soap, soap_wsa); // register the wsa plugin in your code + soap_register_plugin(soap, soap_wsrm); // register the wsrm plugin in your code + // See the user guide gsoap/doc/wsrm/html/index.html + @endcode + - WS-ReliableMessaging 1.1: + @code + #import "wsrm.h" // to be added to this header file for the soapcpp2 build step + @endcode + @code + #include "plugin/wsrmapi.h" + soap_register_plugin(soap, soap_wsa); // register the wsa plugin in your code + soap_register_plugin(soap, soap_wsrm); // register the wsrm plugin in your code + // See the user guide gsoap/doc/wsrm/html/index.html + @endcode + - WS-Security (SOAP Message Security) 1.0 (accepts 1.1): + @code + #import "wsse.h" // to be added to this header file for the soapcpp2 build step + @endcode + @code + #include "plugin/wsseapi.h" + soap_register_plugin(soap, soap_wsse); // register the wsse plugin in your code + // See the user guide gsoap/doc/wsse/html/index.html + @endcode + - WS-Security (SOAP Message Security) 1.1 (accepts 1.0): + @code + #import "wsse11.h" // to be added to this header file for the soapcpp2 build step + @endcode + @code + #include "plugin/wsseapi.h" + soap_register_plugin(soap, soap_wsse); // register the wsse plugin in your code + // See the user guide gsoap/doc/wsse/html/index.html + @endcode + - HTTP Digest Authentication: + @code + #include "plugin/httpda.h" + soap_register_plugin(soap, soap_http_da); // register the HTTP DA plugin in your code + // See the user guide gsoap/doc/httpda/html/index.html + @endcode */ -//gsoap ns4 service method-style: UploadSymbol document -//gsoap ns4 service method-encoding: UploadSymbol literal -//gsoap ns4 service method-action: UploadSymbol https://www.crash-server.com/UploadSymbol -int __ns4__UploadSymbol( - _ns1__UploadSymbol* ns1__UploadSymbol, ///< Request parameter - _ns1__UploadSymbolResponse* ns1__UploadSymbolResponse ///< Response parameter -); /******************************************************************************\ * * @@ -1139,20 +2073,28 @@ your code to import these data type and function declarations. Only use the soapcpp2-generated files in your project build. Do not include the wsdl2h- generated .h file in your code. -XML content can be retrieved from: +Data can be read in XML and deserialized from: - a file descriptor, using soap->recvfd = fd - a socket, using soap->socket = ... - a C++ stream, using soap->is = ... - a buffer, using the soap->frecv() callback -XML content can be stored to: +Data can be serialized in XML and written to: - a file descriptor, using soap->sendfd = fd - a socket, using soap->socket = ... - a C++ stream, using soap->os = ... - a buffer, using the soap->fsend() callback +The following options are available for (de)serialization control: + - soap->encodingStyle = NULL; to remove SOAP 1.1/1.2 encodingStyle + - soap_mode(soap, SOAP_XML_TREE); XML without id-ref (no cycles!) + - soap_mode(soap, SOAP_XML_GRAPH); XML with id-ref (including cycles) + - soap_set_namespaces(soap, struct Namespace *nsmap); to set xmlns bindings -@section ns1 Top-level root elements of schema "https://www.crash-server.com/" + +@section ns2 Top-level root elements of schema "https://www.drdump.com/services/Imports" + +@section ns1 Top-level root elements of schema "https://www.drdump.com/services" - @ref _ns1__Hello @code @@ -1162,6 +2104,20 @@ XML content can be stored to: soap_write__ns1__Hello(struct soap*, _ns1__Hello*); @endcode + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + - @ref _ns1__HelloResponse @code // Reader (returns SOAP_OK on success): @@ -1170,6 +2126,22 @@ XML content can be stored to: soap_write__ns1__HelloResponse(struct soap*, _ns1__HelloResponse*); @endcode + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + - @ref _ns1__UploadMiniDump @code // Reader (returns SOAP_OK on success): @@ -1186,6 +2158,22 @@ XML content can be stored to: soap_write__ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse*); @endcode + - @ref _ns1__UploadFullDump + @code + // Reader (returns SOAP_OK on success): + soap_read__ns1__UploadFullDump(struct soap*, _ns1__UploadFullDump*); + // Writer (returns SOAP_OK on success): + soap_write__ns1__UploadFullDump(struct soap*, _ns1__UploadFullDump*); + @endcode + + - @ref _ns1__UploadFullDumpResponse + @code + // Reader (returns SOAP_OK on success): + soap_read__ns1__UploadFullDumpResponse(struct soap*, _ns1__UploadFullDumpResponse*); + // Writer (returns SOAP_OK on success): + soap_write__ns1__UploadFullDumpResponse(struct soap*, _ns1__UploadFullDumpResponse*); + @endcode + - @ref _ns1__UploadAdditionalInfo @code // Reader (returns SOAP_OK on success): @@ -1202,6 +2190,22 @@ XML content can be stored to: soap_write__ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse*); @endcode + - @ref _ns1__RejectedToSendAdditionalInfo + @code + // Reader (returns SOAP_OK on success): + soap_read__ns1__RejectedToSendAdditionalInfo(struct soap*, _ns1__RejectedToSendAdditionalInfo*); + // Writer (returns SOAP_OK on success): + soap_write__ns1__RejectedToSendAdditionalInfo(struct soap*, _ns1__RejectedToSendAdditionalInfo*); + @endcode + + - @ref _ns1__RejectedToSendAdditionalInfoResponse + @code + // Reader (returns SOAP_OK on success): + soap_read__ns1__RejectedToSendAdditionalInfoResponse(struct soap*, _ns1__RejectedToSendAdditionalInfoResponse*); + // Writer (returns SOAP_OK on success): + soap_write__ns1__RejectedToSendAdditionalInfoResponse(struct soap*, _ns1__RejectedToSendAdditionalInfoResponse*); + @endcode + - @ref _ns1__UploadSymbol @code // Reader (returns SOAP_OK on success): @@ -1218,7 +2222,61 @@ XML content can be stored to: soap_write__ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse*); @endcode -@section ns2 Top-level root elements of schema "http://microsoft.com/wsdl/types/" +@section ns3 Top-level root elements of schema "http://schemas.microsoft.com/2003/10/Serialization/" + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + +@section ns4 Top-level root elements of schema "http://schemas.datacontract.org/2004/07/DumpUploadService3" + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + + - (use wsdl2h option -g to auto-generate) + +@section ns5 Top-level root elements of schema "http://schemas.microsoft.com/2003/10/Serialization/Arrays" + + - (use wsdl2h option -g to auto-generate) */ diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/UploaderSoap12.nsmap b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/UploaderSoap12.nsmap deleted file mode 100644 index 5c12fa6c5..000000000 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/UploaderSoap12.nsmap +++ /dev/null @@ -1,15 +0,0 @@ - -#include "soapH.h" -SOAP_NMAC struct Namespace namespaces[] = -{ - {"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://www.w3.org/2003/05/soap-envelope", NULL}, - {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://www.w3.org/2003/05/soap-encoding", NULL}, - {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL}, - {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL}, - {"xop", "http://www.w3.org/2004/08/xop/include", NULL, NULL}, - {"ns2", "http://microsoft.com/wsdl/types/", NULL, NULL}, - {"ns3", "https://www.crash-server.com/UploaderSoap", NULL, NULL}, - {"ns1", "https://www.crash-server.com/", NULL, NULL}, - {"ns4", "https://www.crash-server.com/UploaderSoap12", NULL, NULL}, - {NULL, NULL, NULL, NULL} -}; diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapC.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapC.cpp index 5dc96179b..3ec9109fd 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapC.cpp +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapC.cpp @@ -1,8 +1,11 @@ /* soapC.cpp - Generated by gSOAP 2.8.0 from DumpUploader.h - Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. - The generated code is released under one of the following licenses: - GPL, the gSOAP public license, or Genivia's license for commercial use. + Generated by gSOAP 2.8.17r from DumpUploader.h + +Copyright(C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. +The generated code is released under one of the following licenses: +GPL or Genivia's license for commercial use. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. */ #if defined(__BORLANDC__) @@ -12,20 +15,22 @@ #include "soapH.h" -SOAP_SOURCE_STAMP("@(#) soapC.cpp ver 2.8.0 2012-01-09 21:40:51 GMT") +SOAP_SOURCE_STAMP("@(#) soapC.cpp ver 2.8.17r 2014-08-13 22:23:36 GMT") #ifndef WITH_NOGLOBAL -SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap) +SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap) { - if (soap->header) - soap_serialize_SOAP_ENV__Header(soap, soap->header); + soap->part = SOAP_IN_HEADER; + soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", soap->header, NULL); + soap->part = SOAP_END_HEADER; + return soap->header == NULL; } SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap) { - if (soap->header) + if (soap->version && soap->header) { soap->part = SOAP_IN_HEADER; if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, NULL)) return soap->error; @@ -34,17 +39,15 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap) return SOAP_OK; } -SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap) +SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(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; + if (soap->version && soap->header) + soap_serialize_SOAP_ENV__Header(soap, soap->header); } SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap *soap) { - if (!soap->header) + if (soap->header == NULL) { if ((soap->header = soap_new_SOAP_ENV__Header(soap, -1))) soap_default_SOAP_ENV__Header(soap, soap->header); } @@ -52,9 +55,9 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap *soap) SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap) { - if (!soap->fault) + if (soap->fault == NULL) { soap->fault = soap_new_SOAP_ENV__Fault(soap, -1); - if (!soap->fault) + if (soap->fault == NULL) return; soap_default_SOAP_ENV__Fault(soap, soap->fault); } @@ -90,7 +93,7 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap) SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *soap) { soap_fault(soap); - if (soap->version == 2) + if (soap->version == 2 && soap->fault->SOAP_ENV__Code) return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value; return (const char**)&soap->fault->faultcode; } @@ -99,7 +102,7 @@ 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) + { if (soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode == NULL) { 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); } @@ -108,6 +111,17 @@ SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultsubcode(struct soap *soap) return (const char**)&soap->fault->faultcode; } +SOAP_FMAC3 const char * SOAP_FMAC4 soap_check_faultsubcode(struct soap *soap) +{ + soap_fault(soap); + if (soap->version == 2) + { if (soap->fault->SOAP_ENV__Code && soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode && soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode) + return soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value; + return NULL; + } + return soap->fault->faultcode; +} + SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap) { soap_fault(soap); @@ -119,18 +133,28 @@ SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap) 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); + if (soap->version == 2) + { if (soap->fault->SOAP_ENV__Detail == NULL) + { 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->detail->__any; + return (const char**)&soap->fault->SOAP_ENV__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); + if (soap->fault->detail == NULL) + { soap->fault->detail = soap_new_SOAP_ENV__Detail(soap, -1); + soap_default_SOAP_ENV__Detail(soap, soap->fault->detail); } - return (const char**)&soap->fault->SOAP_ENV__Detail->__any; + return (const char**)&soap->fault->detail->__any; +} + +SOAP_FMAC3 const char * SOAP_FMAC4 soap_check_faultdetail(struct soap *soap) +{ + soap_fault(soap); + if (soap->version == 2 && soap->fault->SOAP_ENV__Detail) + return soap->fault->SOAP_ENV__Detail->__any; + if (soap->fault->detail) + return soap->fault->detail->__any; + return NULL; } #endif @@ -152,61 +176,176 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap) } #endif -#ifndef WITH_NOIDREF - #ifdef __cplusplus extern "C" { #endif SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) -{ +{ (void)type; if (soap_peek_element(soap)) return NULL; +#ifndef WITH_NOIDREF if (!*soap->id || !(*type = soap_lookup_type(soap, soap->id))) *type = soap_lookup_type(soap, soap->href); switch (*type) { + case SOAP_TYPE_xsd__byte: + return soap_in_xsd__byte(soap, NULL, NULL, "xsd:byte"); case SOAP_TYPE_byte: return soap_in_byte(soap, NULL, NULL, "xsd:byte"); case SOAP_TYPE_short: return soap_in_short(soap, NULL, NULL, "xsd:short"); + case SOAP_TYPE_ns3__char: + return soap_in_ns3__char(soap, NULL, NULL, "ns3:char"); case SOAP_TYPE_int: return soap_in_int(soap, NULL, NULL, "xsd:int"); + case SOAP_TYPE_LONG64: + return soap_in_LONG64(soap, NULL, NULL, "xsd:long"); + case SOAP_TYPE_float: + return soap_in_float(soap, NULL, NULL, "xsd:float"); + case SOAP_TYPE_double: + return soap_in_double(soap, NULL, NULL, "xsd:double"); + case SOAP_TYPE_xsd__unsignedByte: + return soap_in_xsd__unsignedByte(soap, NULL, NULL, "xsd:unsignedByte"); case SOAP_TYPE_unsignedByte: return soap_in_unsignedByte(soap, NULL, NULL, "xsd:unsignedByte"); case SOAP_TYPE_unsignedShort: return soap_in_unsignedShort(soap, NULL, NULL, "xsd:unsignedShort"); case SOAP_TYPE_unsignedInt: return soap_in_unsignedInt(soap, NULL, NULL, "xsd:unsignedInt"); + case SOAP_TYPE_unsignedLONG64: + return soap_in_unsignedLONG64(soap, NULL, NULL, "xsd:unsignedLong"); + case SOAP_TYPE_time: + return soap_in_time(soap, NULL, NULL, "xsd:dateTime"); + case SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType: + return soap_in_ns4__HaveSolutionResponse_SolutionType(soap, NULL, NULL, "ns4:HaveSolutionResponse.SolutionType"); + case SOAP_TYPE_ns4__ClientLib_ClientType: + return soap_in_ns4__ClientLib_ClientType(soap, NULL, NULL, "ns4:ClientLib.ClientType"); + case SOAP_TYPE_ns4__ClientLib_Architecture: + return soap_in_ns4__ClientLib_Architecture(soap, NULL, NULL, "ns4:ClientLib.Architecture"); case SOAP_TYPE_bool: return soap_in_bool(soap, NULL, NULL, "xsd:boolean"); - case SOAP_TYPE_ns1__AdditionalInfoType: - return soap_in_ns1__AdditionalInfoType(soap, NULL, NULL, "ns1:AdditionalInfoType"); - case SOAP_TYPE_ns1__SolutionType: - return soap_in_ns1__SolutionType(soap, NULL, NULL, "ns1:SolutionType"); - case SOAP_TYPE_ns1__ResponseType: - return soap_in_ns1__ResponseType(soap, NULL, NULL, "ns1:ResponseType"); - case SOAP_TYPE_ns1__Architecture: - return soap_in_ns1__Architecture(soap, NULL, NULL, "ns1:Architecture"); - case SOAP_TYPE_ns2__guid: - return soap_in_ns2__guid(soap, NULL, NULL, "ns2:guid"); - case SOAP_TYPE_std__wstring: - return soap_in_std__wstring(soap, NULL, NULL, "xsd:string"); - case SOAP_TYPE_ns1__Solution: - return soap_in_ns1__Solution(soap, NULL, NULL, "ns1:Solution"); + case SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_: + return soap_in_ns4__HaveSolutionResponse_SolutionType_(soap, NULL, NULL, "ns4:HaveSolutionResponse.SolutionType"); + case SOAP_TYPE_ns4__ClientLib_ClientType_: + return soap_in_ns4__ClientLib_ClientType_(soap, NULL, NULL, "ns4:ClientLib.ClientType"); + case SOAP_TYPE_ns4__ClientLib_Architecture_: + return soap_in_ns4__ClientLib_Architecture_(soap, NULL, NULL, "ns4:ClientLib.Architecture"); + case SOAP_TYPE_ns3__guid__: + return soap_in_ns3__guid__(soap, NULL, NULL, "ns3:guid"); + case SOAP_TYPE_ns3__guid: + return soap_in_ns3__guid(soap, NULL, NULL, "ns3:guid"); + case SOAP_TYPE_ns3__duration__: + return soap_in_ns3__duration__(soap, NULL, NULL, "ns3:duration"); + case SOAP_TYPE_ns3__duration: + return soap_in_ns3__duration(soap, NULL, NULL, "ns3:duration"); + case SOAP_TYPE_ns3__char__: + return soap_in_ns3__char__(soap, NULL, NULL, "ns3:char"); + case SOAP_TYPE_ns5__ArrayOfstring: + return soap_in_ns5__ArrayOfstring(soap, NULL, NULL, "ns5:ArrayOfstring"); + case SOAP_TYPE_ns1__NeedMoreInfoResponse: + return soap_in_ns1__NeedMoreInfoResponse(soap, NULL, NULL, "ns1:NeedMoreInfoResponse"); + case SOAP_TYPE_ns1__NeedFullDumpResponse: + return soap_in_ns1__NeedFullDumpResponse(soap, NULL, NULL, "ns1:NeedFullDumpResponse"); + case SOAP_TYPE_ns1__NeedMiniDumpResponse: + return soap_in_ns1__NeedMiniDumpResponse(soap, NULL, NULL, "ns1:NeedMiniDumpResponse"); + case SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse: + return soap_in_ns1__NeedSymbolsThenMiniDumpResponse(soap, NULL, NULL, "ns1:NeedSymbolsThenMiniDumpResponse"); + case SOAP_TYPE_ns1__HaveSolutionResponse: + return soap_in_ns1__HaveSolutionResponse(soap, NULL, NULL, "ns1:HaveSolutionResponse"); + case SOAP_TYPE_ns1__ErrorResponse: + return soap_in_ns1__ErrorResponse(soap, NULL, NULL, "ns1:ErrorResponse"); + case SOAP_TYPE_ns1__StopResponse: + return soap_in_ns1__StopResponse(soap, NULL, NULL, "ns1:StopResponse"); case SOAP_TYPE_ns1__Response: return soap_in_ns1__Response(soap, NULL, NULL, "ns1:Response"); + case SOAP_TYPE_ns1__Pdb70File: + return soap_in_ns1__Pdb70File(soap, NULL, NULL, "ns1:Pdb70File"); + case SOAP_TYPE_ns1__ModuleSymbolInfo: + return soap_in_ns1__ModuleSymbolInfo(soap, NULL, NULL, "ns1:ModuleSymbolInfo"); + case SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo: + return soap_in_ns1__ArrayOfModuleSymbolInfo(soap, NULL, NULL, "ns1:ArrayOfModuleSymbolInfo"); + case SOAP_TYPE_ns1__DumpAdditionalInfo: + return soap_in_ns1__DumpAdditionalInfo(soap, NULL, NULL, "ns1:DumpAdditionalInfo"); + case SOAP_TYPE_ns1__AppAdditionalInfo: + return soap_in_ns1__AppAdditionalInfo(soap, NULL, NULL, "ns1:AppAdditionalInfo"); case SOAP_TYPE_ns1__Application: return soap_in_ns1__Application(soap, NULL, NULL, "ns1:Application"); case SOAP_TYPE_ns1__ClientLib: return soap_in_ns1__ClientLib(soap, NULL, NULL, "ns1:ClientLib"); + case SOAP_TYPE_xsd__unsignedShort: + return soap_in_xsd__unsignedShort(soap, NULL, NULL, "xsd:unsignedShort"); + case SOAP_TYPE_xsd__unsignedLong: + return soap_in_xsd__unsignedLong(soap, NULL, NULL, "xsd:unsignedLong"); + case SOAP_TYPE_xsd__unsignedInt: + return soap_in_xsd__unsignedInt(soap, NULL, NULL, "xsd:unsignedInt"); + case SOAP_TYPE_xsd__unsignedByte_: + return soap_in_xsd__unsignedByte_(soap, NULL, NULL, "xsd:unsignedByte"); + case SOAP_TYPE_xsd__string: + return soap_in_xsd__string(soap, NULL, NULL, "xsd:string"); + case SOAP_TYPE_xsd__short: + return soap_in_xsd__short(soap, NULL, NULL, "xsd:short"); + case SOAP_TYPE_xsd__long: + return soap_in_xsd__long(soap, NULL, NULL, "xsd:long"); + case SOAP_TYPE_xsd__int: + return soap_in_xsd__int(soap, NULL, NULL, "xsd:int"); + case SOAP_TYPE_xsd__float: + return soap_in_xsd__float(soap, NULL, NULL, "xsd:float"); + case SOAP_TYPE_xsd__duration_: + return soap_in_xsd__duration_(soap, NULL, NULL, "xsd:duration"); + case SOAP_TYPE_xsd__duration: + return soap_in_xsd__duration(soap, NULL, NULL, "xsd:duration"); + case SOAP_TYPE_xsd__double: + return soap_in_xsd__double(soap, NULL, NULL, "xsd:double"); + case SOAP_TYPE_xsd__decimal_: + return soap_in_xsd__decimal_(soap, NULL, NULL, "xsd:decimal"); + case SOAP_TYPE_xsd__decimal: + return soap_in_xsd__decimal(soap, NULL, NULL, "xsd:decimal"); + case SOAP_TYPE_xsd__dateTime: + return soap_in_xsd__dateTime(soap, NULL, NULL, "xsd:dateTime"); + case SOAP_TYPE_xsd__byte_: + return soap_in_xsd__byte_(soap, NULL, NULL, "xsd:byte"); + case SOAP_TYPE_xsd__boolean: + return soap_in_xsd__boolean(soap, NULL, NULL, "xsd:boolean"); + case SOAP_TYPE_xsd__base64Binary: + return soap_in_xsd__base64Binary(soap, NULL, NULL, "xsd:base64Binary"); + case SOAP_TYPE_xsd__anyURI_: + return soap_in_xsd__anyURI_(soap, NULL, NULL, "xsd:anyURI"); + case SOAP_TYPE_xsd__anyURI: + return soap_in_xsd__anyURI(soap, NULL, NULL, "xsd:anyURI"); + case SOAP_TYPE_xsd__QName_: + return soap_in_xsd__QName_(soap, NULL, NULL, "xsd:QName"); + case SOAP_TYPE_xsd__IDREF_: + return soap_in_xsd__IDREF_(soap, NULL, NULL, "xsd:IDREF"); + case SOAP_TYPE_xsd__IDREF: + return soap_in_xsd__IDREF(soap, NULL, NULL, "xsd:IDREF"); + case SOAP_TYPE_xsd__ID_: + return soap_in_xsd__ID_(soap, NULL, NULL, "xsd:ID"); + case SOAP_TYPE_xsd__ID: + return soap_in_xsd__ID(soap, NULL, NULL, "xsd:ID"); + case SOAP_TYPE_std__wstring: + return soap_in_std__wstring(soap, NULL, NULL, "xsd:string"); + case SOAP_TYPE_xsd__QName: + return soap_in_xsd__QName(soap, NULL, NULL, "xsd:QName"); + case SOAP_TYPE_std__string: + return soap_in_std__string(soap, NULL, NULL, "xsd:string"); + case SOAP_TYPE_xsd__anyType: + return soap_in_xsd__anyType(soap, NULL, NULL, "xsd:anyType"); case SOAP_TYPE_PointerTo_ns1__UploadSymbolResponse: return soap_in_PointerTo_ns1__UploadSymbolResponse(soap, NULL, NULL, "ns1:UploadSymbolResponse"); case SOAP_TYPE_PointerTo_ns1__UploadSymbol: return soap_in_PointerTo_ns1__UploadSymbol(soap, NULL, NULL, "ns1:UploadSymbol"); + case SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfoResponse: + return soap_in_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, NULL, NULL, "ns1:RejectedToSendAdditionalInfoResponse"); + case SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfo: + return soap_in_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, NULL, NULL, "ns1:RejectedToSendAdditionalInfo"); case SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse: return soap_in_PointerTo_ns1__UploadAdditionalInfoResponse(soap, NULL, NULL, "ns1:UploadAdditionalInfoResponse"); case SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo: return soap_in_PointerTo_ns1__UploadAdditionalInfo(soap, NULL, NULL, "ns1:UploadAdditionalInfo"); + case SOAP_TYPE_PointerTo_ns1__UploadFullDumpResponse: + return soap_in_PointerTo_ns1__UploadFullDumpResponse(soap, NULL, NULL, "ns1:UploadFullDumpResponse"); + case SOAP_TYPE_PointerTo_ns1__UploadFullDump: + return soap_in_PointerTo_ns1__UploadFullDump(soap, NULL, NULL, "ns1:UploadFullDump"); case SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse: return soap_in_PointerTo_ns1__UploadMiniDumpResponse(soap, NULL, NULL, "ns1:UploadMiniDumpResponse"); case SOAP_TYPE_PointerTo_ns1__UploadMiniDump: @@ -215,16 +354,30 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) return soap_in_PointerTo_ns1__HelloResponse(soap, NULL, NULL, "ns1:HelloResponse"); case SOAP_TYPE_PointerTo_ns1__Hello: return soap_in_PointerTo_ns1__Hello(soap, NULL, NULL, "ns1:Hello"); + case SOAP_TYPE_PointerTons5__ArrayOfstring: + return soap_in_PointerTons5__ArrayOfstring(soap, NULL, NULL, "ns5:ArrayOfstring"); + case SOAP_TYPE_PointerTobool: + return soap_in_PointerTobool(soap, NULL, NULL, "xsd:boolean"); case SOAP_TYPE_PointerTons1__Response: return soap_in_PointerTons1__Response(soap, NULL, NULL, "ns1:Response"); + case SOAP_TYPE_PointerTons1__ArrayOfModuleSymbolInfo: + return soap_in_PointerTons1__ArrayOfModuleSymbolInfo(soap, NULL, NULL, "ns1:ArrayOfModuleSymbolInfo"); + case SOAP_TYPE_PointerTons1__DumpAdditionalInfo: + return soap_in_PointerTons1__DumpAdditionalInfo(soap, NULL, NULL, "ns1:DumpAdditionalInfo"); + case SOAP_TYPE_PointerTons1__AppAdditionalInfo: + return soap_in_PointerTons1__AppAdditionalInfo(soap, NULL, NULL, "ns1:AppAdditionalInfo"); case SOAP_TYPE_PointerTons1__Application: return soap_in_PointerTons1__Application(soap, NULL, NULL, "ns1:Application"); case SOAP_TYPE_PointerTons1__ClientLib: return soap_in_PointerTons1__ClientLib(soap, NULL, NULL, "ns1:ClientLib"); + case SOAP_TYPE_PointerToint: + return soap_in_PointerToint(soap, NULL, NULL, "xsd:int"); case SOAP_TYPE_PointerTo_xop__Include: return soap_in_PointerTo_xop__Include(soap, NULL, NULL, "xop:Include"); - case SOAP_TYPE_PointerTons1__Solution: - return soap_in_PointerTons1__Solution(soap, NULL, NULL, "ns1:Solution"); + case SOAP_TYPE_PointerTons1__Pdb70File: + return soap_in_PointerTons1__Pdb70File(soap, NULL, NULL, "ns1:Pdb70File"); + case SOAP_TYPE_PointerTons1__ModuleSymbolInfo: + return soap_in_PointerTons1__ModuleSymbolInfo(soap, NULL, NULL, "ns1:ModuleSymbolInfo"); case SOAP_TYPE_PointerTostd__wstring: return soap_in_PointerTostd__wstring(soap, NULL, NULL, "xsd:string"); case SOAP_TYPE_PointerTounsignedByte: @@ -240,25 +393,100 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) return s ? *s : NULL; } default: +#else + *type = 0; +#endif { const char *t = soap->type; if (!*t) t = soap->tag; - if (!soap_match_tag(soap, t, "ns2:guid")) - { *type = SOAP_TYPE_ns2__guid; - return soap_in_ns2__guid(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "ns4:HaveSolutionResponse.SolutionType")) + { *type = SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_; + return soap_in_ns4__HaveSolutionResponse_SolutionType_(soap, NULL, NULL, NULL); } - if (!soap_match_tag(soap, t, "xsd:string")) - { *type = SOAP_TYPE_std__wstring; - return soap_in_std__wstring(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "ns4:ClientLib.ClientType")) + { *type = SOAP_TYPE_ns4__ClientLib_ClientType_; + return soap_in_ns4__ClientLib_ClientType_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns4:ClientLib.Architecture")) + { *type = SOAP_TYPE_ns4__ClientLib_Architecture_; + return soap_in_ns4__ClientLib_Architecture_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns3:guid")) + { *type = SOAP_TYPE_ns3__guid__; + return soap_in_ns3__guid__(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns3:guid")) + { *type = SOAP_TYPE_ns3__guid; + return soap_in_ns3__guid(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns3:duration")) + { *type = SOAP_TYPE_ns3__duration__; + return soap_in_ns3__duration__(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns3:duration")) + { *type = SOAP_TYPE_ns3__duration; + return soap_in_ns3__duration(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns3:char")) + { *type = SOAP_TYPE_ns3__char__; + return soap_in_ns3__char__(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns5:ArrayOfstring")) + { *type = SOAP_TYPE_ns5__ArrayOfstring; + return soap_in_ns5__ArrayOfstring(soap, NULL, NULL, NULL); } - if (!soap_match_tag(soap, t, "ns1:Solution")) - { *type = SOAP_TYPE_ns1__Solution; - return soap_in_ns1__Solution(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "ns1:NeedMoreInfoResponse")) + { *type = SOAP_TYPE_ns1__NeedMoreInfoResponse; + return soap_in_ns1__NeedMoreInfoResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:NeedFullDumpResponse")) + { *type = SOAP_TYPE_ns1__NeedFullDumpResponse; + return soap_in_ns1__NeedFullDumpResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:NeedMiniDumpResponse")) + { *type = SOAP_TYPE_ns1__NeedMiniDumpResponse; + return soap_in_ns1__NeedMiniDumpResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:NeedSymbolsThenMiniDumpResponse")) + { *type = SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse; + return soap_in_ns1__NeedSymbolsThenMiniDumpResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:HaveSolutionResponse")) + { *type = SOAP_TYPE_ns1__HaveSolutionResponse; + return soap_in_ns1__HaveSolutionResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:ErrorResponse")) + { *type = SOAP_TYPE_ns1__ErrorResponse; + return soap_in_ns1__ErrorResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:StopResponse")) + { *type = SOAP_TYPE_ns1__StopResponse; + return soap_in_ns1__StopResponse(soap, NULL, NULL, NULL); } if (!soap_match_tag(soap, t, "ns1:Response")) { *type = SOAP_TYPE_ns1__Response; return soap_in_ns1__Response(soap, NULL, NULL, NULL); } + if (!soap_match_tag(soap, t, "ns1:Pdb70File")) + { *type = SOAP_TYPE_ns1__Pdb70File; + return soap_in_ns1__Pdb70File(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:ModuleSymbolInfo")) + { *type = SOAP_TYPE_ns1__ModuleSymbolInfo; + return soap_in_ns1__ModuleSymbolInfo(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:ArrayOfModuleSymbolInfo")) + { *type = SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo; + return soap_in_ns1__ArrayOfModuleSymbolInfo(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:DumpAdditionalInfo")) + { *type = SOAP_TYPE_ns1__DumpAdditionalInfo; + return soap_in_ns1__DumpAdditionalInfo(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:AppAdditionalInfo")) + { *type = SOAP_TYPE_ns1__AppAdditionalInfo; + return soap_in_ns1__AppAdditionalInfo(soap, NULL, NULL, NULL); + } if (!soap_match_tag(soap, t, "ns1:Application")) { *type = SOAP_TYPE_ns1__Application; return soap_in_ns1__Application(soap, NULL, NULL, NULL); @@ -267,6 +495,126 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) { *type = SOAP_TYPE_ns1__ClientLib; return soap_in_ns1__ClientLib(soap, NULL, NULL, NULL); } + if (!soap_match_tag(soap, t, "xsd:unsignedShort")) + { *type = SOAP_TYPE_xsd__unsignedShort; + return soap_in_xsd__unsignedShort(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:unsignedLong")) + { *type = SOAP_TYPE_xsd__unsignedLong; + return soap_in_xsd__unsignedLong(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:unsignedInt")) + { *type = SOAP_TYPE_xsd__unsignedInt; + return soap_in_xsd__unsignedInt(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:unsignedByte")) + { *type = SOAP_TYPE_xsd__unsignedByte_; + return soap_in_xsd__unsignedByte_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:string")) + { *type = SOAP_TYPE_xsd__string; + return soap_in_xsd__string(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:short")) + { *type = SOAP_TYPE_xsd__short; + return soap_in_xsd__short(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:long")) + { *type = SOAP_TYPE_xsd__long; + return soap_in_xsd__long(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:int")) + { *type = SOAP_TYPE_xsd__int; + return soap_in_xsd__int(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:float")) + { *type = SOAP_TYPE_xsd__float; + return soap_in_xsd__float(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:duration")) + { *type = SOAP_TYPE_xsd__duration_; + return soap_in_xsd__duration_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:duration")) + { *type = SOAP_TYPE_xsd__duration; + return soap_in_xsd__duration(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:double")) + { *type = SOAP_TYPE_xsd__double; + return soap_in_xsd__double(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:decimal")) + { *type = SOAP_TYPE_xsd__decimal_; + return soap_in_xsd__decimal_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:decimal")) + { *type = SOAP_TYPE_xsd__decimal; + return soap_in_xsd__decimal(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:dateTime")) + { *type = SOAP_TYPE_xsd__dateTime; + return soap_in_xsd__dateTime(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:byte")) + { *type = SOAP_TYPE_xsd__byte_; + return soap_in_xsd__byte_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:boolean")) + { *type = SOAP_TYPE_xsd__boolean; + return soap_in_xsd__boolean(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:base64Binary")) + { *type = SOAP_TYPE_xsd__base64Binary; + return soap_in_xsd__base64Binary(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:anyURI")) + { *type = SOAP_TYPE_xsd__anyURI_; + return soap_in_xsd__anyURI_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:anyURI")) + { *type = SOAP_TYPE_xsd__anyURI; + return soap_in_xsd__anyURI(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:QName")) + { *type = SOAP_TYPE_xsd__QName_; + return soap_in_xsd__QName_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:IDREF")) + { *type = SOAP_TYPE_xsd__IDREF_; + return soap_in_xsd__IDREF_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:IDREF")) + { *type = SOAP_TYPE_xsd__IDREF; + return soap_in_xsd__IDREF(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:ID")) + { *type = SOAP_TYPE_xsd__ID_; + return soap_in_xsd__ID_(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:ID")) + { *type = SOAP_TYPE_xsd__ID; + return soap_in_xsd__ID(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:string")) + { *type = SOAP_TYPE_std__wstring; + return soap_in_std__wstring(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:QName")) + { *type = SOAP_TYPE_xsd__QName; + return soap_in_xsd__QName(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:string")) + { *type = SOAP_TYPE_std__string; + return soap_in_std__string(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:anyType")) + { *type = SOAP_TYPE_xsd__anyType; + return soap_in_xsd__anyType(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:byte")) + { *type = SOAP_TYPE_xsd__byte; + return soap_in_xsd__byte(soap, NULL, NULL, NULL); + } if (!soap_match_tag(soap, t, "xsd:byte")) { *type = SOAP_TYPE_byte; return soap_in_byte(soap, NULL, NULL, NULL); @@ -275,10 +623,30 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) { *type = SOAP_TYPE_short; return soap_in_short(soap, NULL, NULL, NULL); } + if (!soap_match_tag(soap, t, "ns3:char")) + { *type = SOAP_TYPE_ns3__char; + return soap_in_ns3__char(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:long")) + { *type = SOAP_TYPE_LONG64; + return soap_in_LONG64(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:float")) + { *type = SOAP_TYPE_float; + return soap_in_float(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:double")) + { *type = SOAP_TYPE_double; + return soap_in_double(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:unsignedByte")) + { *type = SOAP_TYPE_xsd__unsignedByte; + return soap_in_xsd__unsignedByte(soap, NULL, NULL, NULL); + } if (!soap_match_tag(soap, t, "xsd:unsignedByte")) { *type = SOAP_TYPE_unsignedByte; return soap_in_unsignedByte(soap, NULL, NULL, NULL); @@ -291,25 +659,29 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) { *type = SOAP_TYPE_unsignedInt; return soap_in_unsignedInt(soap, NULL, NULL, NULL); } - if (!soap_match_tag(soap, t, "xsd:boolean")) - { *type = SOAP_TYPE_bool; - return soap_in_bool(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "xsd:unsignedLong")) + { *type = SOAP_TYPE_unsignedLONG64; + return soap_in_unsignedLONG64(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:dateTime")) + { *type = SOAP_TYPE_time; + return soap_in_time(soap, NULL, NULL, NULL); } - if (!soap_match_tag(soap, t, "ns1:AdditionalInfoType")) - { *type = SOAP_TYPE_ns1__AdditionalInfoType; - return soap_in_ns1__AdditionalInfoType(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "ns4:HaveSolutionResponse.SolutionType")) + { *type = SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType; + return soap_in_ns4__HaveSolutionResponse_SolutionType(soap, NULL, NULL, NULL); } - if (!soap_match_tag(soap, t, "ns1:SolutionType")) - { *type = SOAP_TYPE_ns1__SolutionType; - return soap_in_ns1__SolutionType(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "ns4:ClientLib.ClientType")) + { *type = SOAP_TYPE_ns4__ClientLib_ClientType; + return soap_in_ns4__ClientLib_ClientType(soap, NULL, NULL, NULL); } - if (!soap_match_tag(soap, t, "ns1:ResponseType")) - { *type = SOAP_TYPE_ns1__ResponseType; - return soap_in_ns1__ResponseType(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "ns4:ClientLib.Architecture")) + { *type = SOAP_TYPE_ns4__ClientLib_Architecture; + return soap_in_ns4__ClientLib_Architecture(soap, NULL, NULL, NULL); } - if (!soap_match_tag(soap, t, "ns1:Architecture")) - { *type = SOAP_TYPE_ns1__Architecture; - return soap_in_ns1__Architecture(soap, NULL, NULL, NULL); + if (!soap_match_tag(soap, t, "xsd:boolean")) + { *type = SOAP_TYPE_bool; + return soap_in_bool(soap, NULL, NULL, NULL); } if (!soap_match_tag(soap, t, "xsd:QName")) { char **s; @@ -332,6 +704,14 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) { *type = SOAP_TYPE__ns1__UploadSymbol; return soap_in__ns1__UploadSymbol(soap, NULL, NULL, NULL); } + if (!soap_match_tag(soap, t, "ns1:RejectedToSendAdditionalInfoResponse")) + { *type = SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse; + return soap_in__ns1__RejectedToSendAdditionalInfoResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:RejectedToSendAdditionalInfo")) + { *type = SOAP_TYPE__ns1__RejectedToSendAdditionalInfo; + return soap_in__ns1__RejectedToSendAdditionalInfo(soap, NULL, NULL, NULL); + } if (!soap_match_tag(soap, t, "ns1:UploadAdditionalInfoResponse")) { *type = SOAP_TYPE__ns1__UploadAdditionalInfoResponse; return soap_in__ns1__UploadAdditionalInfoResponse(soap, NULL, NULL, NULL); @@ -340,6 +720,14 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) { *type = SOAP_TYPE__ns1__UploadAdditionalInfo; return soap_in__ns1__UploadAdditionalInfo(soap, NULL, NULL, NULL); } + if (!soap_match_tag(soap, t, "ns1:UploadFullDumpResponse")) + { *type = SOAP_TYPE__ns1__UploadFullDumpResponse; + return soap_in__ns1__UploadFullDumpResponse(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "ns1:UploadFullDump")) + { *type = SOAP_TYPE__ns1__UploadFullDump; + return soap_in__ns1__UploadFullDump(soap, NULL, NULL, NULL); + } if (!soap_match_tag(soap, t, "ns1:UploadMiniDumpResponse")) { *type = SOAP_TYPE__ns1__UploadMiniDumpResponse; return soap_in__ns1__UploadMiniDumpResponse(soap, NULL, NULL, NULL); @@ -360,7 +748,9 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) { *type = SOAP_TYPE__xop__Include; return soap_in__xop__Include(soap, NULL, NULL, NULL); } +#ifndef WITH_NOIDREF } +#endif } soap->error = SOAP_TAG_MISMATCH; return NULL; @@ -369,7 +759,6 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type) #ifdef __cplusplus } #endif -#endif SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap) { @@ -416,49 +805,83 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap *soap) } #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) -{ +{ (void)tag; switch (type) { + case SOAP_TYPE_xsd__byte: + return soap_out_xsd__byte(soap, tag, id, (const char *)ptr, "xsd:byte"); case SOAP_TYPE_byte: return soap_out_byte(soap, tag, id, (const char *)ptr, "xsd:byte"); case SOAP_TYPE_short: return soap_out_short(soap, tag, id, (const short *)ptr, "xsd:short"); + case SOAP_TYPE_ns3__char: + return soap_out_ns3__char(soap, tag, id, (const int *)ptr, "ns3:char"); case SOAP_TYPE_int: return soap_out_int(soap, tag, id, (const int *)ptr, "xsd:int"); + case SOAP_TYPE_LONG64: + return soap_out_LONG64(soap, tag, id, (const LONG64 *)ptr, "xsd:long"); + case SOAP_TYPE_float: + return soap_out_float(soap, tag, id, (const float *)ptr, "xsd:float"); + case SOAP_TYPE_double: + return soap_out_double(soap, tag, id, (const double *)ptr, "xsd:double"); + case SOAP_TYPE_xsd__unsignedByte: + return soap_out_xsd__unsignedByte(soap, tag, id, (const unsigned char *)ptr, "xsd:unsignedByte"); case SOAP_TYPE_unsignedByte: return soap_out_unsignedByte(soap, tag, id, (const unsigned char *)ptr, "xsd:unsignedByte"); case SOAP_TYPE_unsignedShort: return soap_out_unsignedShort(soap, tag, id, (const unsigned short *)ptr, "xsd:unsignedShort"); case SOAP_TYPE_unsignedInt: return soap_out_unsignedInt(soap, tag, id, (const unsigned int *)ptr, "xsd:unsignedInt"); + case SOAP_TYPE_unsignedLONG64: + return soap_out_unsignedLONG64(soap, tag, id, (const ULONG64 *)ptr, "xsd:unsignedLong"); + case SOAP_TYPE_time: + return soap_out_time(soap, tag, id, (const time_t *)ptr, "xsd:dateTime"); + case SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType: + return soap_out_ns4__HaveSolutionResponse_SolutionType(soap, tag, id, (const enum ns4__HaveSolutionResponse_SolutionType *)ptr, "ns4:HaveSolutionResponse.SolutionType"); + case SOAP_TYPE_ns4__ClientLib_ClientType: + return soap_out_ns4__ClientLib_ClientType(soap, tag, id, (const enum ns4__ClientLib_ClientType *)ptr, "ns4:ClientLib.ClientType"); + case SOAP_TYPE_ns4__ClientLib_Architecture: + return soap_out_ns4__ClientLib_Architecture(soap, tag, id, (const enum ns4__ClientLib_Architecture *)ptr, "ns4:ClientLib.Architecture"); case SOAP_TYPE_bool: return soap_out_bool(soap, tag, id, (const bool *)ptr, "xsd:boolean"); - case SOAP_TYPE_ns1__AdditionalInfoType: - return soap_out_ns1__AdditionalInfoType(soap, tag, id, (const enum ns1__AdditionalInfoType *)ptr, "ns1:AdditionalInfoType"); - case SOAP_TYPE_ns1__SolutionType: - return soap_out_ns1__SolutionType(soap, tag, id, (const enum ns1__SolutionType *)ptr, "ns1:SolutionType"); - case SOAP_TYPE_ns1__ResponseType: - return soap_out_ns1__ResponseType(soap, tag, id, (const enum ns1__ResponseType *)ptr, "ns1:ResponseType"); - case SOAP_TYPE_ns1__Architecture: - return soap_out_ns1__Architecture(soap, tag, id, (const enum ns1__Architecture *)ptr, "ns1:Architecture"); - case SOAP_TYPE_ns2__guid: - return soap_out_ns2__guid(soap, tag, id, (const std::wstring *)ptr, "ns2:guid"); - case SOAP_TYPE_std__wstring: - return soap_out_std__wstring(soap, tag, id, (const std::wstring *)ptr, "xsd:string"); + case SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_: + return ((ns4__HaveSolutionResponse_SolutionType_ *)ptr)->soap_out(soap, tag, id, "ns4:HaveSolutionResponse.SolutionType"); + case SOAP_TYPE_ns4__ClientLib_ClientType_: + return ((ns4__ClientLib_ClientType_ *)ptr)->soap_out(soap, tag, id, "ns4:ClientLib.ClientType"); + case SOAP_TYPE_ns4__ClientLib_Architecture_: + return ((ns4__ClientLib_Architecture_ *)ptr)->soap_out(soap, tag, id, "ns4:ClientLib.Architecture"); + case SOAP_TYPE_ns3__guid__: + return ((ns3__guid__ *)ptr)->soap_out(soap, tag, id, "ns3:guid"); + case SOAP_TYPE_ns3__guid: + return soap_out_ns3__guid(soap, tag, id, (const std::wstring *)ptr, "ns3:guid"); + case SOAP_TYPE_ns3__duration__: + return ((ns3__duration__ *)ptr)->soap_out(soap, tag, id, "ns3:duration"); + case SOAP_TYPE_ns3__duration: + return soap_out_ns3__duration(soap, tag, id, (const std::wstring *)ptr, "ns3:duration"); + case SOAP_TYPE_ns3__char__: + return ((ns3__char__ *)ptr)->soap_out(soap, tag, id, "ns3:char"); + case SOAP_TYPE_ns5__ArrayOfstring: + return ((ns5__ArrayOfstring *)ptr)->soap_out(soap, tag, id, "ns5:ArrayOfstring"); case SOAP_TYPE__ns1__UploadSymbolResponse: return ((_ns1__UploadSymbolResponse *)ptr)->soap_out(soap, "ns1:UploadSymbolResponse", id, NULL); case SOAP_TYPE__ns1__UploadSymbol: return ((_ns1__UploadSymbol *)ptr)->soap_out(soap, "ns1:UploadSymbol", id, NULL); + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse: + return ((_ns1__RejectedToSendAdditionalInfoResponse *)ptr)->soap_out(soap, "ns1:RejectedToSendAdditionalInfoResponse", id, NULL); + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfo: + return ((_ns1__RejectedToSendAdditionalInfo *)ptr)->soap_out(soap, "ns1:RejectedToSendAdditionalInfo", id, NULL); case SOAP_TYPE__ns1__UploadAdditionalInfoResponse: return ((_ns1__UploadAdditionalInfoResponse *)ptr)->soap_out(soap, "ns1:UploadAdditionalInfoResponse", id, NULL); case SOAP_TYPE__ns1__UploadAdditionalInfo: return ((_ns1__UploadAdditionalInfo *)ptr)->soap_out(soap, "ns1:UploadAdditionalInfo", id, NULL); + case SOAP_TYPE__ns1__UploadFullDumpResponse: + return ((_ns1__UploadFullDumpResponse *)ptr)->soap_out(soap, "ns1:UploadFullDumpResponse", id, NULL); + case SOAP_TYPE__ns1__UploadFullDump: + return ((_ns1__UploadFullDump *)ptr)->soap_out(soap, "ns1:UploadFullDump", id, NULL); case SOAP_TYPE__ns1__UploadMiniDumpResponse: return ((_ns1__UploadMiniDumpResponse *)ptr)->soap_out(soap, "ns1:UploadMiniDumpResponse", id, NULL); case SOAP_TYPE__ns1__UploadMiniDump: @@ -467,24 +890,112 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, co return ((_ns1__HelloResponse *)ptr)->soap_out(soap, "ns1:HelloResponse", id, NULL); case SOAP_TYPE__ns1__Hello: return ((_ns1__Hello *)ptr)->soap_out(soap, "ns1:Hello", id, NULL); - case SOAP_TYPE_ns1__Solution: - return ((ns1__Solution *)ptr)->soap_out(soap, tag, id, "ns1:Solution"); + case SOAP_TYPE_ns1__NeedMoreInfoResponse: + return ((ns1__NeedMoreInfoResponse *)ptr)->soap_out(soap, tag, id, "ns1:NeedMoreInfoResponse"); + case SOAP_TYPE_ns1__NeedFullDumpResponse: + return ((ns1__NeedFullDumpResponse *)ptr)->soap_out(soap, tag, id, "ns1:NeedFullDumpResponse"); + case SOAP_TYPE_ns1__NeedMiniDumpResponse: + return ((ns1__NeedMiniDumpResponse *)ptr)->soap_out(soap, tag, id, "ns1:NeedMiniDumpResponse"); + case SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse: + return ((ns1__NeedSymbolsThenMiniDumpResponse *)ptr)->soap_out(soap, tag, id, "ns1:NeedSymbolsThenMiniDumpResponse"); + case SOAP_TYPE_ns1__HaveSolutionResponse: + return ((ns1__HaveSolutionResponse *)ptr)->soap_out(soap, tag, id, "ns1:HaveSolutionResponse"); + case SOAP_TYPE_ns1__ErrorResponse: + return ((ns1__ErrorResponse *)ptr)->soap_out(soap, tag, id, "ns1:ErrorResponse"); + case SOAP_TYPE_ns1__StopResponse: + return ((ns1__StopResponse *)ptr)->soap_out(soap, tag, id, "ns1:StopResponse"); case SOAP_TYPE_ns1__Response: return ((ns1__Response *)ptr)->soap_out(soap, tag, id, "ns1:Response"); + case SOAP_TYPE_ns1__Pdb70File: + return ((ns1__Pdb70File *)ptr)->soap_out(soap, tag, id, "ns1:Pdb70File"); + case SOAP_TYPE_ns1__ModuleSymbolInfo: + return ((ns1__ModuleSymbolInfo *)ptr)->soap_out(soap, tag, id, "ns1:ModuleSymbolInfo"); + case SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo: + return ((ns1__ArrayOfModuleSymbolInfo *)ptr)->soap_out(soap, tag, id, "ns1:ArrayOfModuleSymbolInfo"); + case SOAP_TYPE_ns1__DumpAdditionalInfo: + return ((ns1__DumpAdditionalInfo *)ptr)->soap_out(soap, tag, id, "ns1:DumpAdditionalInfo"); + case SOAP_TYPE_ns1__AppAdditionalInfo: + return ((ns1__AppAdditionalInfo *)ptr)->soap_out(soap, tag, id, "ns1:AppAdditionalInfo"); case SOAP_TYPE_ns1__Application: return ((ns1__Application *)ptr)->soap_out(soap, tag, id, "ns1:Application"); case SOAP_TYPE_ns1__ClientLib: return ((ns1__ClientLib *)ptr)->soap_out(soap, tag, id, "ns1:ClientLib"); + case SOAP_TYPE_xsd__unsignedShort: + return ((xsd__unsignedShort *)ptr)->soap_out(soap, tag, id, "xsd:unsignedShort"); + case SOAP_TYPE_xsd__unsignedLong: + return ((xsd__unsignedLong *)ptr)->soap_out(soap, tag, id, "xsd:unsignedLong"); + case SOAP_TYPE_xsd__unsignedInt: + return ((xsd__unsignedInt *)ptr)->soap_out(soap, tag, id, "xsd:unsignedInt"); + case SOAP_TYPE_xsd__unsignedByte_: + return ((xsd__unsignedByte_ *)ptr)->soap_out(soap, tag, id, "xsd:unsignedByte"); + case SOAP_TYPE_xsd__string: + return ((xsd__string *)ptr)->soap_out(soap, tag, id, "xsd:string"); + case SOAP_TYPE_xsd__short: + return ((xsd__short *)ptr)->soap_out(soap, tag, id, "xsd:short"); + case SOAP_TYPE_xsd__long: + return ((xsd__long *)ptr)->soap_out(soap, tag, id, "xsd:long"); + case SOAP_TYPE_xsd__int: + return ((xsd__int *)ptr)->soap_out(soap, tag, id, "xsd:int"); + case SOAP_TYPE_xsd__float: + return ((xsd__float *)ptr)->soap_out(soap, tag, id, "xsd:float"); + case SOAP_TYPE_xsd__duration_: + return ((xsd__duration_ *)ptr)->soap_out(soap, tag, id, "xsd:duration"); + case SOAP_TYPE_xsd__duration: + return soap_out_xsd__duration(soap, tag, id, (const std::wstring *)ptr, "xsd:duration"); + case SOAP_TYPE_xsd__double: + return ((xsd__double *)ptr)->soap_out(soap, tag, id, "xsd:double"); + case SOAP_TYPE_xsd__decimal_: + return ((xsd__decimal_ *)ptr)->soap_out(soap, tag, id, "xsd:decimal"); + case SOAP_TYPE_xsd__decimal: + return soap_out_xsd__decimal(soap, tag, id, (const std::wstring *)ptr, "xsd:decimal"); + case SOAP_TYPE_xsd__dateTime: + return ((xsd__dateTime *)ptr)->soap_out(soap, tag, id, "xsd:dateTime"); + case SOAP_TYPE_xsd__byte_: + return ((xsd__byte_ *)ptr)->soap_out(soap, tag, id, "xsd:byte"); + case SOAP_TYPE_xsd__boolean: + return ((xsd__boolean *)ptr)->soap_out(soap, tag, id, "xsd:boolean"); + case SOAP_TYPE_xsd__base64Binary: + return ((xsd__base64Binary *)ptr)->soap_out(soap, tag, id, "xsd:base64Binary"); + case SOAP_TYPE_xsd__anyURI_: + return ((xsd__anyURI_ *)ptr)->soap_out(soap, tag, id, "xsd:anyURI"); + case SOAP_TYPE_xsd__anyURI: + return soap_out_xsd__anyURI(soap, tag, id, (const std::wstring *)ptr, "xsd:anyURI"); + case SOAP_TYPE_xsd__QName_: + return ((xsd__QName_ *)ptr)->soap_out(soap, tag, id, "xsd:QName"); + case SOAP_TYPE_xsd__IDREF_: + return ((xsd__IDREF_ *)ptr)->soap_out(soap, tag, id, "xsd:IDREF"); + case SOAP_TYPE_xsd__IDREF: + return soap_out_xsd__IDREF(soap, tag, id, (const std::wstring *)ptr, "xsd:IDREF"); + case SOAP_TYPE_xsd__ID_: + return ((xsd__ID_ *)ptr)->soap_out(soap, tag, id, "xsd:ID"); + case SOAP_TYPE_xsd__ID: + return soap_out_xsd__ID(soap, tag, id, (const std::wstring *)ptr, "xsd:ID"); + case SOAP_TYPE_std__wstring: + return soap_out_std__wstring(soap, tag, id, (const std::wstring *)ptr, "xsd:string"); + case SOAP_TYPE_xsd__QName: + return soap_out_xsd__QName(soap, tag, id, (const std::string *)ptr, "xsd:QName"); + case SOAP_TYPE_std__string: + return soap_out_std__string(soap, tag, id, (const std::string *)ptr, "xsd:string"); + case SOAP_TYPE_xsd__anyType: + return ((xsd__anyType *)ptr)->soap_out(soap, tag, id, "xsd:anyType"); case SOAP_TYPE__xop__Include: return soap_out__xop__Include(soap, "xop:Include", id, (const struct _xop__Include *)ptr, NULL); case SOAP_TYPE_PointerTo_ns1__UploadSymbolResponse: return soap_out_PointerTo_ns1__UploadSymbolResponse(soap, tag, id, (_ns1__UploadSymbolResponse *const*)ptr, "ns1:UploadSymbolResponse"); case SOAP_TYPE_PointerTo_ns1__UploadSymbol: return soap_out_PointerTo_ns1__UploadSymbol(soap, tag, id, (_ns1__UploadSymbol *const*)ptr, "ns1:UploadSymbol"); + case SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfoResponse: + return soap_out_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, tag, id, (_ns1__RejectedToSendAdditionalInfoResponse *const*)ptr, "ns1:RejectedToSendAdditionalInfoResponse"); + case SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfo: + return soap_out_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, tag, id, (_ns1__RejectedToSendAdditionalInfo *const*)ptr, "ns1:RejectedToSendAdditionalInfo"); case SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse: return soap_out_PointerTo_ns1__UploadAdditionalInfoResponse(soap, tag, id, (_ns1__UploadAdditionalInfoResponse *const*)ptr, "ns1:UploadAdditionalInfoResponse"); case SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo: return soap_out_PointerTo_ns1__UploadAdditionalInfo(soap, tag, id, (_ns1__UploadAdditionalInfo *const*)ptr, "ns1:UploadAdditionalInfo"); + case SOAP_TYPE_PointerTo_ns1__UploadFullDumpResponse: + return soap_out_PointerTo_ns1__UploadFullDumpResponse(soap, tag, id, (_ns1__UploadFullDumpResponse *const*)ptr, "ns1:UploadFullDumpResponse"); + case SOAP_TYPE_PointerTo_ns1__UploadFullDump: + return soap_out_PointerTo_ns1__UploadFullDump(soap, tag, id, (_ns1__UploadFullDump *const*)ptr, "ns1:UploadFullDump"); case SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse: return soap_out_PointerTo_ns1__UploadMiniDumpResponse(soap, tag, id, (_ns1__UploadMiniDumpResponse *const*)ptr, "ns1:UploadMiniDumpResponse"); case SOAP_TYPE_PointerTo_ns1__UploadMiniDump: @@ -493,16 +1004,30 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, co return soap_out_PointerTo_ns1__HelloResponse(soap, tag, id, (_ns1__HelloResponse *const*)ptr, "ns1:HelloResponse"); case SOAP_TYPE_PointerTo_ns1__Hello: return soap_out_PointerTo_ns1__Hello(soap, tag, id, (_ns1__Hello *const*)ptr, "ns1:Hello"); + case SOAP_TYPE_PointerTons5__ArrayOfstring: + return soap_out_PointerTons5__ArrayOfstring(soap, tag, id, (ns5__ArrayOfstring *const*)ptr, "ns5:ArrayOfstring"); + case SOAP_TYPE_PointerTobool: + return soap_out_PointerTobool(soap, tag, id, (bool *const*)ptr, "xsd:boolean"); case SOAP_TYPE_PointerTons1__Response: return soap_out_PointerTons1__Response(soap, tag, id, (ns1__Response *const*)ptr, "ns1:Response"); + case SOAP_TYPE_PointerTons1__ArrayOfModuleSymbolInfo: + return soap_out_PointerTons1__ArrayOfModuleSymbolInfo(soap, tag, id, (ns1__ArrayOfModuleSymbolInfo *const*)ptr, "ns1:ArrayOfModuleSymbolInfo"); + case SOAP_TYPE_PointerTons1__DumpAdditionalInfo: + return soap_out_PointerTons1__DumpAdditionalInfo(soap, tag, id, (ns1__DumpAdditionalInfo *const*)ptr, "ns1:DumpAdditionalInfo"); + case SOAP_TYPE_PointerTons1__AppAdditionalInfo: + return soap_out_PointerTons1__AppAdditionalInfo(soap, tag, id, (ns1__AppAdditionalInfo *const*)ptr, "ns1:AppAdditionalInfo"); case SOAP_TYPE_PointerTons1__Application: return soap_out_PointerTons1__Application(soap, tag, id, (ns1__Application *const*)ptr, "ns1:Application"); case SOAP_TYPE_PointerTons1__ClientLib: return soap_out_PointerTons1__ClientLib(soap, tag, id, (ns1__ClientLib *const*)ptr, "ns1:ClientLib"); + case SOAP_TYPE_PointerToint: + return soap_out_PointerToint(soap, tag, id, (int *const*)ptr, "xsd:int"); case SOAP_TYPE_PointerTo_xop__Include: return soap_out_PointerTo_xop__Include(soap, tag, id, (struct _xop__Include *const*)ptr, "xop:Include"); - case SOAP_TYPE_PointerTons1__Solution: - return soap_out_PointerTons1__Solution(soap, tag, id, (ns1__Solution *const*)ptr, "ns1:Solution"); + case SOAP_TYPE_PointerTons1__Pdb70File: + return soap_out_PointerTons1__Pdb70File(soap, tag, id, (ns1__Pdb70File *const*)ptr, "ns1:Pdb70File"); + case SOAP_TYPE_PointerTons1__ModuleSymbolInfo: + return soap_out_PointerTons1__ModuleSymbolInfo(soap, tag, id, (ns1__ModuleSymbolInfo *const*)ptr, "ns1:ModuleSymbolInfo"); case SOAP_TYPE_PointerTostd__wstring: return soap_out_PointerTostd__wstring(soap, tag, id, (std::wstring *const*)ptr, "xsd:string"); case SOAP_TYPE_PointerTounsignedByte: @@ -518,7 +1043,6 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, co #ifdef __cplusplus } #endif -#endif #ifndef WITH_NOIDREF @@ -530,11 +1054,32 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, (void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */ switch (type) { - case SOAP_TYPE_ns2__guid: - soap_serialize_ns2__guid(soap, (const std::wstring *)ptr); + case SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_: + ((ns4__HaveSolutionResponse_SolutionType_ *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE_std__wstring: - soap_serialize_std__wstring(soap, (const std::wstring *)ptr); + case SOAP_TYPE_ns4__ClientLib_ClientType_: + ((ns4__ClientLib_ClientType_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns4__ClientLib_Architecture_: + ((ns4__ClientLib_Architecture_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns3__guid__: + ((ns3__guid__ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns3__guid: + soap_serialize_ns3__guid(soap, (const std::wstring *)ptr); + break; + case SOAP_TYPE_ns3__duration__: + ((ns3__duration__ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns3__duration: + soap_serialize_ns3__duration(soap, (const std::wstring *)ptr); + break; + case SOAP_TYPE_ns3__char__: + ((ns3__char__ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns5__ArrayOfstring: + ((ns5__ArrayOfstring *)ptr)->soap_serialize(soap); break; case SOAP_TYPE__ns1__UploadSymbolResponse: ((_ns1__UploadSymbolResponse *)ptr)->soap_serialize(soap); @@ -542,12 +1087,24 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, case SOAP_TYPE__ns1__UploadSymbol: ((_ns1__UploadSymbol *)ptr)->soap_serialize(soap); break; + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse: + ((_ns1__RejectedToSendAdditionalInfoResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfo: + ((_ns1__RejectedToSendAdditionalInfo *)ptr)->soap_serialize(soap); + break; case SOAP_TYPE__ns1__UploadAdditionalInfoResponse: ((_ns1__UploadAdditionalInfoResponse *)ptr)->soap_serialize(soap); break; case SOAP_TYPE__ns1__UploadAdditionalInfo: ((_ns1__UploadAdditionalInfo *)ptr)->soap_serialize(soap); break; + case SOAP_TYPE__ns1__UploadFullDumpResponse: + ((_ns1__UploadFullDumpResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE__ns1__UploadFullDump: + ((_ns1__UploadFullDump *)ptr)->soap_serialize(soap); + break; case SOAP_TYPE__ns1__UploadMiniDumpResponse: ((_ns1__UploadMiniDumpResponse *)ptr)->soap_serialize(soap); break; @@ -560,41 +1117,155 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, case SOAP_TYPE__ns1__Hello: ((_ns1__Hello *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE_ns1__Solution: - ((ns1__Solution *)ptr)->soap_serialize(soap); + case SOAP_TYPE_ns1__NeedMoreInfoResponse: + ((ns1__NeedMoreInfoResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__NeedFullDumpResponse: + ((ns1__NeedFullDumpResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__NeedMiniDumpResponse: + ((ns1__NeedMiniDumpResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse: + ((ns1__NeedSymbolsThenMiniDumpResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__HaveSolutionResponse: + ((ns1__HaveSolutionResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__ErrorResponse: + ((ns1__ErrorResponse *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__StopResponse: + ((ns1__StopResponse *)ptr)->soap_serialize(soap); break; case SOAP_TYPE_ns1__Response: ((ns1__Response *)ptr)->soap_serialize(soap); break; + case SOAP_TYPE_ns1__Pdb70File: + ((ns1__Pdb70File *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__ModuleSymbolInfo: + ((ns1__ModuleSymbolInfo *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo: + ((ns1__ArrayOfModuleSymbolInfo *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__DumpAdditionalInfo: + ((ns1__DumpAdditionalInfo *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_ns1__AppAdditionalInfo: + ((ns1__AppAdditionalInfo *)ptr)->soap_serialize(soap); + break; case SOAP_TYPE_ns1__Application: ((ns1__Application *)ptr)->soap_serialize(soap); break; case SOAP_TYPE_ns1__ClientLib: ((ns1__ClientLib *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE___ns4__UploadSymbol: - soap_serialize___ns4__UploadSymbol(soap, (const struct __ns4__UploadSymbol *)ptr); + case SOAP_TYPE_xsd__unsignedShort: + ((xsd__unsignedShort *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__unsignedLong: + ((xsd__unsignedLong *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__unsignedInt: + ((xsd__unsignedInt *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__unsignedByte_: + ((xsd__unsignedByte_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__string: + ((xsd__string *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE___ns4__UploadAdditionalInfo: - soap_serialize___ns4__UploadAdditionalInfo(soap, (const struct __ns4__UploadAdditionalInfo *)ptr); + case SOAP_TYPE_xsd__short: + ((xsd__short *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE___ns4__UploadMiniDump: - soap_serialize___ns4__UploadMiniDump(soap, (const struct __ns4__UploadMiniDump *)ptr); + case SOAP_TYPE_xsd__long: + ((xsd__long *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE___ns4__Hello: - soap_serialize___ns4__Hello(soap, (const struct __ns4__Hello *)ptr); + case SOAP_TYPE_xsd__int: + ((xsd__int *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE___ns3__UploadSymbol: - soap_serialize___ns3__UploadSymbol(soap, (const struct __ns3__UploadSymbol *)ptr); + case SOAP_TYPE_xsd__float: + ((xsd__float *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE___ns3__UploadAdditionalInfo: - soap_serialize___ns3__UploadAdditionalInfo(soap, (const struct __ns3__UploadAdditionalInfo *)ptr); + case SOAP_TYPE_xsd__duration_: + ((xsd__duration_ *)ptr)->soap_serialize(soap); break; - case SOAP_TYPE___ns3__UploadMiniDump: - soap_serialize___ns3__UploadMiniDump(soap, (const struct __ns3__UploadMiniDump *)ptr); + case SOAP_TYPE_xsd__duration: + soap_serialize_xsd__duration(soap, (const std::wstring *)ptr); break; - case SOAP_TYPE___ns3__Hello: - soap_serialize___ns3__Hello(soap, (const struct __ns3__Hello *)ptr); + case SOAP_TYPE_xsd__double: + ((xsd__double *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__decimal_: + ((xsd__decimal_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__decimal: + soap_serialize_xsd__decimal(soap, (const std::wstring *)ptr); + break; + case SOAP_TYPE_xsd__dateTime: + ((xsd__dateTime *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__byte_: + ((xsd__byte_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__boolean: + ((xsd__boolean *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__base64Binary: + ((xsd__base64Binary *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__anyURI_: + ((xsd__anyURI_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__anyURI: + soap_serialize_xsd__anyURI(soap, (const std::wstring *)ptr); + break; + case SOAP_TYPE_xsd__QName_: + ((xsd__QName_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__IDREF_: + ((xsd__IDREF_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__IDREF: + soap_serialize_xsd__IDREF(soap, (const std::wstring *)ptr); + break; + case SOAP_TYPE_xsd__ID_: + ((xsd__ID_ *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE_xsd__ID: + soap_serialize_xsd__ID(soap, (const std::wstring *)ptr); + break; + case SOAP_TYPE_std__wstring: + soap_serialize_std__wstring(soap, (const std::wstring *)ptr); + break; + case SOAP_TYPE_xsd__QName: + soap_serialize_xsd__QName(soap, (const std::string *)ptr); + break; + case SOAP_TYPE_std__string: + soap_serialize_std__string(soap, (const std::string *)ptr); + break; + case SOAP_TYPE_xsd__anyType: + ((xsd__anyType *)ptr)->soap_serialize(soap); + break; + case SOAP_TYPE___ns1__UploadSymbol: + soap_serialize___ns1__UploadSymbol(soap, (const struct __ns1__UploadSymbol *)ptr); + break; + case SOAP_TYPE___ns1__RejectedToSendAdditionalInfo: + soap_serialize___ns1__RejectedToSendAdditionalInfo(soap, (const struct __ns1__RejectedToSendAdditionalInfo *)ptr); + break; + case SOAP_TYPE___ns1__UploadAdditionalInfo: + soap_serialize___ns1__UploadAdditionalInfo(soap, (const struct __ns1__UploadAdditionalInfo *)ptr); + break; + case SOAP_TYPE___ns1__UploadFullDump: + soap_serialize___ns1__UploadFullDump(soap, (const struct __ns1__UploadFullDump *)ptr); + break; + case SOAP_TYPE___ns1__UploadMiniDump: + soap_serialize___ns1__UploadMiniDump(soap, (const struct __ns1__UploadMiniDump *)ptr); + break; + case SOAP_TYPE___ns1__Hello: + soap_serialize___ns1__Hello(soap, (const struct __ns1__Hello *)ptr); break; case SOAP_TYPE__xop__Include: soap_serialize__xop__Include(soap, (const struct _xop__Include *)ptr); @@ -605,12 +1276,24 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, case SOAP_TYPE_PointerTo_ns1__UploadSymbol: soap_serialize_PointerTo_ns1__UploadSymbol(soap, (_ns1__UploadSymbol *const*)ptr); break; + case SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfoResponse: + soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, (_ns1__RejectedToSendAdditionalInfoResponse *const*)ptr); + break; + case SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfo: + soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, (_ns1__RejectedToSendAdditionalInfo *const*)ptr); + break; case SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse: soap_serialize_PointerTo_ns1__UploadAdditionalInfoResponse(soap, (_ns1__UploadAdditionalInfoResponse *const*)ptr); break; case SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo: soap_serialize_PointerTo_ns1__UploadAdditionalInfo(soap, (_ns1__UploadAdditionalInfo *const*)ptr); break; + case SOAP_TYPE_PointerTo_ns1__UploadFullDumpResponse: + soap_serialize_PointerTo_ns1__UploadFullDumpResponse(soap, (_ns1__UploadFullDumpResponse *const*)ptr); + break; + case SOAP_TYPE_PointerTo_ns1__UploadFullDump: + soap_serialize_PointerTo_ns1__UploadFullDump(soap, (_ns1__UploadFullDump *const*)ptr); + break; case SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse: soap_serialize_PointerTo_ns1__UploadMiniDumpResponse(soap, (_ns1__UploadMiniDumpResponse *const*)ptr); break; @@ -623,20 +1306,41 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, case SOAP_TYPE_PointerTo_ns1__Hello: soap_serialize_PointerTo_ns1__Hello(soap, (_ns1__Hello *const*)ptr); break; + case SOAP_TYPE_PointerTons5__ArrayOfstring: + soap_serialize_PointerTons5__ArrayOfstring(soap, (ns5__ArrayOfstring *const*)ptr); + break; + case SOAP_TYPE_PointerTobool: + soap_serialize_PointerTobool(soap, (bool *const*)ptr); + break; case SOAP_TYPE_PointerTons1__Response: soap_serialize_PointerTons1__Response(soap, (ns1__Response *const*)ptr); break; + case SOAP_TYPE_PointerTons1__ArrayOfModuleSymbolInfo: + soap_serialize_PointerTons1__ArrayOfModuleSymbolInfo(soap, (ns1__ArrayOfModuleSymbolInfo *const*)ptr); + break; + case SOAP_TYPE_PointerTons1__DumpAdditionalInfo: + soap_serialize_PointerTons1__DumpAdditionalInfo(soap, (ns1__DumpAdditionalInfo *const*)ptr); + break; + case SOAP_TYPE_PointerTons1__AppAdditionalInfo: + soap_serialize_PointerTons1__AppAdditionalInfo(soap, (ns1__AppAdditionalInfo *const*)ptr); + break; case SOAP_TYPE_PointerTons1__Application: soap_serialize_PointerTons1__Application(soap, (ns1__Application *const*)ptr); break; case SOAP_TYPE_PointerTons1__ClientLib: soap_serialize_PointerTons1__ClientLib(soap, (ns1__ClientLib *const*)ptr); break; + case SOAP_TYPE_PointerToint: + soap_serialize_PointerToint(soap, (int *const*)ptr); + break; case SOAP_TYPE_PointerTo_xop__Include: soap_serialize_PointerTo_xop__Include(soap, (struct _xop__Include *const*)ptr); break; - case SOAP_TYPE_PointerTons1__Solution: - soap_serialize_PointerTons1__Solution(soap, (ns1__Solution *const*)ptr); + case SOAP_TYPE_PointerTons1__Pdb70File: + soap_serialize_PointerTons1__Pdb70File(soap, (ns1__Pdb70File *const*)ptr); + break; + case SOAP_TYPE_PointerTons1__ModuleSymbolInfo: + soap_serialize_PointerTons1__ModuleSymbolInfo(soap, (ns1__ModuleSymbolInfo *const*)ptr); break; case SOAP_TYPE_PointerTostd__wstring: soap_serialize_PointerTostd__wstring(soap, (std::wstring *const*)ptr); @@ -659,21 +1363,85 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, #endif SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const char *type, const char *arrayType, size_t *n) -{ +{ (void)type; switch (t) { + case SOAP_TYPE_xsd__anyType: + return (void*)soap_instantiate_xsd__anyType(soap, -1, type, arrayType, n); + case SOAP_TYPE_std__string: + return (void*)soap_instantiate_std__string(soap, -1, type, arrayType, n); case SOAP_TYPE__xop__Include: return (void*)soap_instantiate__xop__Include(soap, -1, type, arrayType, n); case SOAP_TYPE_std__wstring: return (void*)soap_instantiate_std__wstring(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__ID_: + return (void*)soap_instantiate_xsd__ID_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__IDREF_: + return (void*)soap_instantiate_xsd__IDREF_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__QName_: + return (void*)soap_instantiate_xsd__QName_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__anyURI_: + return (void*)soap_instantiate_xsd__anyURI_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__base64Binary: + return (void*)soap_instantiate_xsd__base64Binary(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__boolean: + return (void*)soap_instantiate_xsd__boolean(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__byte_: + return (void*)soap_instantiate_xsd__byte_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__dateTime: + return (void*)soap_instantiate_xsd__dateTime(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__decimal_: + return (void*)soap_instantiate_xsd__decimal_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__double: + return (void*)soap_instantiate_xsd__double(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__duration_: + return (void*)soap_instantiate_xsd__duration_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__float: + return (void*)soap_instantiate_xsd__float(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__int: + return (void*)soap_instantiate_xsd__int(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__long: + return (void*)soap_instantiate_xsd__long(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__short: + return (void*)soap_instantiate_xsd__short(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__string: + return (void*)soap_instantiate_xsd__string(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__unsignedByte_: + return (void*)soap_instantiate_xsd__unsignedByte_(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__unsignedInt: + return (void*)soap_instantiate_xsd__unsignedInt(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__unsignedLong: + return (void*)soap_instantiate_xsd__unsignedLong(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__unsignedShort: + return (void*)soap_instantiate_xsd__unsignedShort(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns3__char__: + return (void*)soap_instantiate_ns3__char__(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns3__duration__: + return (void*)soap_instantiate_ns3__duration__(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns3__guid__: + return (void*)soap_instantiate_ns3__guid__(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns4__ClientLib_Architecture_: + return (void*)soap_instantiate_ns4__ClientLib_Architecture_(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns4__ClientLib_ClientType_: + return (void*)soap_instantiate_ns4__ClientLib_ClientType_(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_: + return (void*)soap_instantiate_ns4__HaveSolutionResponse_SolutionType_(soap, -1, type, arrayType, n); case SOAP_TYPE_ns1__ClientLib: return (void*)soap_instantiate_ns1__ClientLib(soap, -1, type, arrayType, n); case SOAP_TYPE_ns1__Application: return (void*)soap_instantiate_ns1__Application(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__AppAdditionalInfo: + return (void*)soap_instantiate_ns1__AppAdditionalInfo(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__DumpAdditionalInfo: + return (void*)soap_instantiate_ns1__DumpAdditionalInfo(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo: + return (void*)soap_instantiate_ns1__ArrayOfModuleSymbolInfo(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__ModuleSymbolInfo: + return (void*)soap_instantiate_ns1__ModuleSymbolInfo(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__Pdb70File: + return (void*)soap_instantiate_ns1__Pdb70File(soap, -1, type, arrayType, n); case SOAP_TYPE_ns1__Response: return (void*)soap_instantiate_ns1__Response(soap, -1, type, arrayType, n); - case SOAP_TYPE_ns1__Solution: - return (void*)soap_instantiate_ns1__Solution(soap, -1, type, arrayType, n); case SOAP_TYPE__ns1__Hello: return (void*)soap_instantiate__ns1__Hello(soap, -1, type, arrayType, n); case SOAP_TYPE__ns1__HelloResponse: @@ -682,30 +1450,50 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const ch return (void*)soap_instantiate__ns1__UploadMiniDump(soap, -1, type, arrayType, n); case SOAP_TYPE__ns1__UploadMiniDumpResponse: return (void*)soap_instantiate__ns1__UploadMiniDumpResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE__ns1__UploadFullDump: + return (void*)soap_instantiate__ns1__UploadFullDump(soap, -1, type, arrayType, n); + case SOAP_TYPE__ns1__UploadFullDumpResponse: + return (void*)soap_instantiate__ns1__UploadFullDumpResponse(soap, -1, type, arrayType, n); case SOAP_TYPE__ns1__UploadAdditionalInfo: return (void*)soap_instantiate__ns1__UploadAdditionalInfo(soap, -1, type, arrayType, n); case SOAP_TYPE__ns1__UploadAdditionalInfoResponse: return (void*)soap_instantiate__ns1__UploadAdditionalInfoResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfo: + return (void*)soap_instantiate__ns1__RejectedToSendAdditionalInfo(soap, -1, type, arrayType, n); + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse: + return (void*)soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(soap, -1, type, arrayType, n); case SOAP_TYPE__ns1__UploadSymbol: return (void*)soap_instantiate__ns1__UploadSymbol(soap, -1, type, arrayType, n); case SOAP_TYPE__ns1__UploadSymbolResponse: return (void*)soap_instantiate__ns1__UploadSymbolResponse(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns3__Hello: - return (void*)soap_instantiate___ns3__Hello(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns3__UploadMiniDump: - return (void*)soap_instantiate___ns3__UploadMiniDump(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns3__UploadAdditionalInfo: - return (void*)soap_instantiate___ns3__UploadAdditionalInfo(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns3__UploadSymbol: - return (void*)soap_instantiate___ns3__UploadSymbol(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns4__Hello: - return (void*)soap_instantiate___ns4__Hello(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns4__UploadMiniDump: - return (void*)soap_instantiate___ns4__UploadMiniDump(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns4__UploadAdditionalInfo: - return (void*)soap_instantiate___ns4__UploadAdditionalInfo(soap, -1, type, arrayType, n); - case SOAP_TYPE___ns4__UploadSymbol: - return (void*)soap_instantiate___ns4__UploadSymbol(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns5__ArrayOfstring: + return (void*)soap_instantiate_ns5__ArrayOfstring(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__StopResponse: + return (void*)soap_instantiate_ns1__StopResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__ErrorResponse: + return (void*)soap_instantiate_ns1__ErrorResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__HaveSolutionResponse: + return (void*)soap_instantiate_ns1__HaveSolutionResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse: + return (void*)soap_instantiate_ns1__NeedSymbolsThenMiniDumpResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__NeedMiniDumpResponse: + return (void*)soap_instantiate_ns1__NeedMiniDumpResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__NeedFullDumpResponse: + return (void*)soap_instantiate_ns1__NeedFullDumpResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns1__NeedMoreInfoResponse: + return (void*)soap_instantiate_ns1__NeedMoreInfoResponse(soap, -1, type, arrayType, n); + case SOAP_TYPE___ns1__Hello: + return (void*)soap_instantiate___ns1__Hello(soap, -1, type, arrayType, n); + case SOAP_TYPE___ns1__UploadMiniDump: + return (void*)soap_instantiate___ns1__UploadMiniDump(soap, -1, type, arrayType, n); + case SOAP_TYPE___ns1__UploadFullDump: + return (void*)soap_instantiate___ns1__UploadFullDump(soap, -1, type, arrayType, n); + case SOAP_TYPE___ns1__UploadAdditionalInfo: + return (void*)soap_instantiate___ns1__UploadAdditionalInfo(soap, -1, type, arrayType, n); + case SOAP_TYPE___ns1__RejectedToSendAdditionalInfo: + return (void*)soap_instantiate___ns1__RejectedToSendAdditionalInfo(soap, -1, type, arrayType, n); + case SOAP_TYPE___ns1__UploadSymbol: + return (void*)soap_instantiate___ns1__UploadSymbol(soap, -1, type, arrayType, n); #ifndef WITH_NOGLOBAL case SOAP_TYPE_SOAP_ENV__Header: return (void*)soap_instantiate_SOAP_ENV__Header(soap, -1, type, arrayType, n); @@ -726,8 +1514,26 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const ch case SOAP_TYPE_SOAP_ENV__Fault: return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n); #endif - case SOAP_TYPE_ns2__guid: - return (void*)soap_instantiate_ns2__guid(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__QName: + return (void*)soap_instantiate_xsd__QName(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__ID: + return (void*)soap_instantiate_xsd__ID(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__IDREF: + return (void*)soap_instantiate_xsd__IDREF(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__anyURI: + return (void*)soap_instantiate_xsd__anyURI(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__decimal: + return (void*)soap_instantiate_xsd__decimal(soap, -1, type, arrayType, n); + case SOAP_TYPE_xsd__duration: + return (void*)soap_instantiate_xsd__duration(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns3__duration: + return (void*)soap_instantiate_ns3__duration(soap, -1, type, arrayType, n); + case SOAP_TYPE_ns3__guid: + return (void*)soap_instantiate_ns3__guid(soap, -1, type, arrayType, n); + case SOAP_TYPE_std__vectorTemplateOfstd__wstring: + return (void*)soap_instantiate_std__vectorTemplateOfstd__wstring(soap, -1, type, arrayType, n); + case SOAP_TYPE_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo: + return (void*)soap_instantiate_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(soap, -1, type, arrayType, n); } return NULL; } @@ -735,6 +1541,18 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const ch SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p) { switch (p->type) { + case SOAP_TYPE_xsd__anyType: + if (p->size < 0) + SOAP_DELETE((xsd__anyType*)p->ptr); + else + SOAP_DELETE_ARRAY((xsd__anyType*)p->ptr); + break; + case SOAP_TYPE_std__string: + if (p->size < 0) + SOAP_DELETE((std::string*)p->ptr); + else + SOAP_DELETE_ARRAY((std::string*)p->ptr); + break; case SOAP_TYPE__xop__Include: if (p->size < 0) SOAP_DELETE((struct _xop__Include*)p->ptr); @@ -747,165 +1565,469 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p) else SOAP_DELETE_ARRAY((std::wstring*)p->ptr); break; - case SOAP_TYPE_ns1__ClientLib: + case SOAP_TYPE_xsd__ID_: if (p->size < 0) - SOAP_DELETE((ns1__ClientLib*)p->ptr); + SOAP_DELETE((xsd__ID_*)p->ptr); else - SOAP_DELETE_ARRAY((ns1__ClientLib*)p->ptr); + SOAP_DELETE_ARRAY((xsd__ID_*)p->ptr); break; - case SOAP_TYPE_ns1__Application: + case SOAP_TYPE_xsd__IDREF_: if (p->size < 0) - SOAP_DELETE((ns1__Application*)p->ptr); + SOAP_DELETE((xsd__IDREF_*)p->ptr); else - SOAP_DELETE_ARRAY((ns1__Application*)p->ptr); + SOAP_DELETE_ARRAY((xsd__IDREF_*)p->ptr); break; - case SOAP_TYPE_ns1__Response: + case SOAP_TYPE_xsd__QName_: if (p->size < 0) - SOAP_DELETE((ns1__Response*)p->ptr); + SOAP_DELETE((xsd__QName_*)p->ptr); else - SOAP_DELETE_ARRAY((ns1__Response*)p->ptr); + SOAP_DELETE_ARRAY((xsd__QName_*)p->ptr); break; - case SOAP_TYPE_ns1__Solution: + case SOAP_TYPE_xsd__anyURI_: if (p->size < 0) - SOAP_DELETE((ns1__Solution*)p->ptr); + SOAP_DELETE((xsd__anyURI_*)p->ptr); else - SOAP_DELETE_ARRAY((ns1__Solution*)p->ptr); + SOAP_DELETE_ARRAY((xsd__anyURI_*)p->ptr); break; - case SOAP_TYPE__ns1__Hello: + case SOAP_TYPE_xsd__base64Binary: if (p->size < 0) - SOAP_DELETE((_ns1__Hello*)p->ptr); + SOAP_DELETE((xsd__base64Binary*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__Hello*)p->ptr); + SOAP_DELETE_ARRAY((xsd__base64Binary*)p->ptr); break; - case SOAP_TYPE__ns1__HelloResponse: + case SOAP_TYPE_xsd__boolean: if (p->size < 0) - SOAP_DELETE((_ns1__HelloResponse*)p->ptr); + SOAP_DELETE((xsd__boolean*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__HelloResponse*)p->ptr); + SOAP_DELETE_ARRAY((xsd__boolean*)p->ptr); break; - case SOAP_TYPE__ns1__UploadMiniDump: + case SOAP_TYPE_xsd__byte_: if (p->size < 0) - SOAP_DELETE((_ns1__UploadMiniDump*)p->ptr); + SOAP_DELETE((xsd__byte_*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__UploadMiniDump*)p->ptr); + SOAP_DELETE_ARRAY((xsd__byte_*)p->ptr); break; - case SOAP_TYPE__ns1__UploadMiniDumpResponse: + case SOAP_TYPE_xsd__dateTime: if (p->size < 0) - SOAP_DELETE((_ns1__UploadMiniDumpResponse*)p->ptr); + SOAP_DELETE((xsd__dateTime*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__UploadMiniDumpResponse*)p->ptr); + SOAP_DELETE_ARRAY((xsd__dateTime*)p->ptr); break; - case SOAP_TYPE__ns1__UploadAdditionalInfo: + case SOAP_TYPE_xsd__decimal_: if (p->size < 0) - SOAP_DELETE((_ns1__UploadAdditionalInfo*)p->ptr); + SOAP_DELETE((xsd__decimal_*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__UploadAdditionalInfo*)p->ptr); + SOAP_DELETE_ARRAY((xsd__decimal_*)p->ptr); break; - case SOAP_TYPE__ns1__UploadAdditionalInfoResponse: + case SOAP_TYPE_xsd__double: if (p->size < 0) - SOAP_DELETE((_ns1__UploadAdditionalInfoResponse*)p->ptr); + SOAP_DELETE((xsd__double*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__UploadAdditionalInfoResponse*)p->ptr); + SOAP_DELETE_ARRAY((xsd__double*)p->ptr); break; - case SOAP_TYPE__ns1__UploadSymbol: + case SOAP_TYPE_xsd__duration_: if (p->size < 0) - SOAP_DELETE((_ns1__UploadSymbol*)p->ptr); + SOAP_DELETE((xsd__duration_*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__UploadSymbol*)p->ptr); + SOAP_DELETE_ARRAY((xsd__duration_*)p->ptr); break; - case SOAP_TYPE__ns1__UploadSymbolResponse: + case SOAP_TYPE_xsd__float: if (p->size < 0) - SOAP_DELETE((_ns1__UploadSymbolResponse*)p->ptr); + SOAP_DELETE((xsd__float*)p->ptr); else - SOAP_DELETE_ARRAY((_ns1__UploadSymbolResponse*)p->ptr); + SOAP_DELETE_ARRAY((xsd__float*)p->ptr); break; - case SOAP_TYPE___ns3__Hello: + case SOAP_TYPE_xsd__int: if (p->size < 0) - SOAP_DELETE((struct __ns3__Hello*)p->ptr); + SOAP_DELETE((xsd__int*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns3__Hello*)p->ptr); + SOAP_DELETE_ARRAY((xsd__int*)p->ptr); break; - case SOAP_TYPE___ns3__UploadMiniDump: + case SOAP_TYPE_xsd__long: if (p->size < 0) - SOAP_DELETE((struct __ns3__UploadMiniDump*)p->ptr); + SOAP_DELETE((xsd__long*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns3__UploadMiniDump*)p->ptr); + SOAP_DELETE_ARRAY((xsd__long*)p->ptr); break; - case SOAP_TYPE___ns3__UploadAdditionalInfo: + case SOAP_TYPE_xsd__short: if (p->size < 0) - SOAP_DELETE((struct __ns3__UploadAdditionalInfo*)p->ptr); + SOAP_DELETE((xsd__short*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns3__UploadAdditionalInfo*)p->ptr); + SOAP_DELETE_ARRAY((xsd__short*)p->ptr); break; - case SOAP_TYPE___ns3__UploadSymbol: + case SOAP_TYPE_xsd__string: if (p->size < 0) - SOAP_DELETE((struct __ns3__UploadSymbol*)p->ptr); + SOAP_DELETE((xsd__string*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns3__UploadSymbol*)p->ptr); + SOAP_DELETE_ARRAY((xsd__string*)p->ptr); break; - case SOAP_TYPE___ns4__Hello: + case SOAP_TYPE_xsd__unsignedByte_: if (p->size < 0) - SOAP_DELETE((struct __ns4__Hello*)p->ptr); + SOAP_DELETE((xsd__unsignedByte_*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns4__Hello*)p->ptr); + SOAP_DELETE_ARRAY((xsd__unsignedByte_*)p->ptr); break; - case SOAP_TYPE___ns4__UploadMiniDump: + case SOAP_TYPE_xsd__unsignedInt: if (p->size < 0) - SOAP_DELETE((struct __ns4__UploadMiniDump*)p->ptr); + SOAP_DELETE((xsd__unsignedInt*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns4__UploadMiniDump*)p->ptr); + SOAP_DELETE_ARRAY((xsd__unsignedInt*)p->ptr); break; - case SOAP_TYPE___ns4__UploadAdditionalInfo: + case SOAP_TYPE_xsd__unsignedLong: if (p->size < 0) - SOAP_DELETE((struct __ns4__UploadAdditionalInfo*)p->ptr); + SOAP_DELETE((xsd__unsignedLong*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns4__UploadAdditionalInfo*)p->ptr); + SOAP_DELETE_ARRAY((xsd__unsignedLong*)p->ptr); break; - case SOAP_TYPE___ns4__UploadSymbol: + case SOAP_TYPE_xsd__unsignedShort: if (p->size < 0) - SOAP_DELETE((struct __ns4__UploadSymbol*)p->ptr); + SOAP_DELETE((xsd__unsignedShort*)p->ptr); else - SOAP_DELETE_ARRAY((struct __ns4__UploadSymbol*)p->ptr); + SOAP_DELETE_ARRAY((xsd__unsignedShort*)p->ptr); break; - case SOAP_TYPE_SOAP_ENV__Header: + case SOAP_TYPE_ns3__char__: if (p->size < 0) - SOAP_DELETE((struct SOAP_ENV__Header*)p->ptr); + SOAP_DELETE((ns3__char__*)p->ptr); else - SOAP_DELETE_ARRAY((struct SOAP_ENV__Header*)p->ptr); + SOAP_DELETE_ARRAY((ns3__char__*)p->ptr); break; - case SOAP_TYPE_SOAP_ENV__Code: + case SOAP_TYPE_ns3__duration__: if (p->size < 0) - SOAP_DELETE((struct SOAP_ENV__Code*)p->ptr); + SOAP_DELETE((ns3__duration__*)p->ptr); else - SOAP_DELETE_ARRAY((struct SOAP_ENV__Code*)p->ptr); + SOAP_DELETE_ARRAY((ns3__duration__*)p->ptr); break; - case SOAP_TYPE_SOAP_ENV__Detail: + case SOAP_TYPE_ns3__guid__: if (p->size < 0) - SOAP_DELETE((struct SOAP_ENV__Detail*)p->ptr); + SOAP_DELETE((ns3__guid__*)p->ptr); else - SOAP_DELETE_ARRAY((struct SOAP_ENV__Detail*)p->ptr); + SOAP_DELETE_ARRAY((ns3__guid__*)p->ptr); break; - case SOAP_TYPE_SOAP_ENV__Reason: + case SOAP_TYPE_ns4__ClientLib_Architecture_: if (p->size < 0) - SOAP_DELETE((struct SOAP_ENV__Reason*)p->ptr); + SOAP_DELETE((ns4__ClientLib_Architecture_*)p->ptr); else - SOAP_DELETE_ARRAY((struct SOAP_ENV__Reason*)p->ptr); + SOAP_DELETE_ARRAY((ns4__ClientLib_Architecture_*)p->ptr); break; - case SOAP_TYPE_SOAP_ENV__Fault: + case SOAP_TYPE_ns4__ClientLib_ClientType_: if (p->size < 0) - SOAP_DELETE((struct SOAP_ENV__Fault*)p->ptr); + SOAP_DELETE((ns4__ClientLib_ClientType_*)p->ptr); else - SOAP_DELETE_ARRAY((struct SOAP_ENV__Fault*)p->ptr); + SOAP_DELETE_ARRAY((ns4__ClientLib_ClientType_*)p->ptr); break; - case SOAP_TYPE_ns2__guid: + case SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_: if (p->size < 0) - SOAP_DELETE((std::wstring*)p->ptr); + SOAP_DELETE((ns4__HaveSolutionResponse_SolutionType_*)p->ptr); else - SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + SOAP_DELETE_ARRAY((ns4__HaveSolutionResponse_SolutionType_*)p->ptr); break; - default: return SOAP_ERR; - } - return SOAP_OK; + case SOAP_TYPE_ns1__ClientLib: + if (p->size < 0) + SOAP_DELETE((ns1__ClientLib*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__ClientLib*)p->ptr); + break; + case SOAP_TYPE_ns1__Application: + if (p->size < 0) + SOAP_DELETE((ns1__Application*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__Application*)p->ptr); + break; + case SOAP_TYPE_ns1__AppAdditionalInfo: + if (p->size < 0) + SOAP_DELETE((ns1__AppAdditionalInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__AppAdditionalInfo*)p->ptr); + break; + case SOAP_TYPE_ns1__DumpAdditionalInfo: + if (p->size < 0) + SOAP_DELETE((ns1__DumpAdditionalInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__DumpAdditionalInfo*)p->ptr); + break; + case SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo: + if (p->size < 0) + SOAP_DELETE((ns1__ArrayOfModuleSymbolInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__ArrayOfModuleSymbolInfo*)p->ptr); + break; + case SOAP_TYPE_ns1__ModuleSymbolInfo: + if (p->size < 0) + SOAP_DELETE((ns1__ModuleSymbolInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__ModuleSymbolInfo*)p->ptr); + break; + case SOAP_TYPE_ns1__Pdb70File: + if (p->size < 0) + SOAP_DELETE((ns1__Pdb70File*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__Pdb70File*)p->ptr); + break; + case SOAP_TYPE_ns1__Response: + if (p->size < 0) + SOAP_DELETE((ns1__Response*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__Response*)p->ptr); + break; + case SOAP_TYPE__ns1__Hello: + if (p->size < 0) + SOAP_DELETE((_ns1__Hello*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__Hello*)p->ptr); + break; + case SOAP_TYPE__ns1__HelloResponse: + if (p->size < 0) + SOAP_DELETE((_ns1__HelloResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__HelloResponse*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadMiniDump: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadMiniDump*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadMiniDump*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadMiniDumpResponse: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadMiniDumpResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadMiniDumpResponse*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadFullDump: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadFullDump*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadFullDump*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadFullDumpResponse: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadFullDumpResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadFullDumpResponse*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadAdditionalInfo: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadAdditionalInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadAdditionalInfo*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadAdditionalInfoResponse: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadAdditionalInfoResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadAdditionalInfoResponse*)p->ptr); + break; + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfo: + if (p->size < 0) + SOAP_DELETE((_ns1__RejectedToSendAdditionalInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__RejectedToSendAdditionalInfo*)p->ptr); + break; + case SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse: + if (p->size < 0) + SOAP_DELETE((_ns1__RejectedToSendAdditionalInfoResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__RejectedToSendAdditionalInfoResponse*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadSymbol: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadSymbol*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadSymbol*)p->ptr); + break; + case SOAP_TYPE__ns1__UploadSymbolResponse: + if (p->size < 0) + SOAP_DELETE((_ns1__UploadSymbolResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((_ns1__UploadSymbolResponse*)p->ptr); + break; + case SOAP_TYPE_ns5__ArrayOfstring: + if (p->size < 0) + SOAP_DELETE((ns5__ArrayOfstring*)p->ptr); + else + SOAP_DELETE_ARRAY((ns5__ArrayOfstring*)p->ptr); + break; + case SOAP_TYPE_ns1__StopResponse: + if (p->size < 0) + SOAP_DELETE((ns1__StopResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__StopResponse*)p->ptr); + break; + case SOAP_TYPE_ns1__ErrorResponse: + if (p->size < 0) + SOAP_DELETE((ns1__ErrorResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__ErrorResponse*)p->ptr); + break; + case SOAP_TYPE_ns1__HaveSolutionResponse: + if (p->size < 0) + SOAP_DELETE((ns1__HaveSolutionResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__HaveSolutionResponse*)p->ptr); + break; + case SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse: + if (p->size < 0) + SOAP_DELETE((ns1__NeedSymbolsThenMiniDumpResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__NeedSymbolsThenMiniDumpResponse*)p->ptr); + break; + case SOAP_TYPE_ns1__NeedMiniDumpResponse: + if (p->size < 0) + SOAP_DELETE((ns1__NeedMiniDumpResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__NeedMiniDumpResponse*)p->ptr); + break; + case SOAP_TYPE_ns1__NeedFullDumpResponse: + if (p->size < 0) + SOAP_DELETE((ns1__NeedFullDumpResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__NeedFullDumpResponse*)p->ptr); + break; + case SOAP_TYPE_ns1__NeedMoreInfoResponse: + if (p->size < 0) + SOAP_DELETE((ns1__NeedMoreInfoResponse*)p->ptr); + else + SOAP_DELETE_ARRAY((ns1__NeedMoreInfoResponse*)p->ptr); + break; + case SOAP_TYPE___ns1__Hello: + if (p->size < 0) + SOAP_DELETE((struct __ns1__Hello*)p->ptr); + else + SOAP_DELETE_ARRAY((struct __ns1__Hello*)p->ptr); + break; + case SOAP_TYPE___ns1__UploadMiniDump: + if (p->size < 0) + SOAP_DELETE((struct __ns1__UploadMiniDump*)p->ptr); + else + SOAP_DELETE_ARRAY((struct __ns1__UploadMiniDump*)p->ptr); + break; + case SOAP_TYPE___ns1__UploadFullDump: + if (p->size < 0) + SOAP_DELETE((struct __ns1__UploadFullDump*)p->ptr); + else + SOAP_DELETE_ARRAY((struct __ns1__UploadFullDump*)p->ptr); + break; + case SOAP_TYPE___ns1__UploadAdditionalInfo: + if (p->size < 0) + SOAP_DELETE((struct __ns1__UploadAdditionalInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((struct __ns1__UploadAdditionalInfo*)p->ptr); + break; + case SOAP_TYPE___ns1__RejectedToSendAdditionalInfo: + if (p->size < 0) + SOAP_DELETE((struct __ns1__RejectedToSendAdditionalInfo*)p->ptr); + else + SOAP_DELETE_ARRAY((struct __ns1__RejectedToSendAdditionalInfo*)p->ptr); + break; + case SOAP_TYPE___ns1__UploadSymbol: + if (p->size < 0) + SOAP_DELETE((struct __ns1__UploadSymbol*)p->ptr); + else + SOAP_DELETE_ARRAY((struct __ns1__UploadSymbol*)p->ptr); + break; +#ifndef WITH_NOGLOBAL + 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; +#endif +#ifndef WITH_NOGLOBAL + 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; +#endif +#ifndef WITH_NOGLOBAL + 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; +#endif +#ifndef WITH_NOGLOBAL + 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; +#endif +#ifndef WITH_NOGLOBAL + 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; +#endif + case SOAP_TYPE_xsd__QName: + if (p->size < 0) + SOAP_DELETE((std::string*)p->ptr); + else + SOAP_DELETE_ARRAY((std::string*)p->ptr); + break; + case SOAP_TYPE_xsd__ID: + if (p->size < 0) + SOAP_DELETE((std::wstring*)p->ptr); + else + SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + break; + case SOAP_TYPE_xsd__IDREF: + if (p->size < 0) + SOAP_DELETE((std::wstring*)p->ptr); + else + SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + break; + case SOAP_TYPE_xsd__anyURI: + if (p->size < 0) + SOAP_DELETE((std::wstring*)p->ptr); + else + SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + break; + case SOAP_TYPE_xsd__decimal: + if (p->size < 0) + SOAP_DELETE((std::wstring*)p->ptr); + else + SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + break; + case SOAP_TYPE_xsd__duration: + if (p->size < 0) + SOAP_DELETE((std::wstring*)p->ptr); + else + SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + break; + case SOAP_TYPE_ns3__duration: + if (p->size < 0) + SOAP_DELETE((std::wstring*)p->ptr); + else + SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + break; + case SOAP_TYPE_ns3__guid: + if (p->size < 0) + SOAP_DELETE((std::wstring*)p->ptr); + else + SOAP_DELETE_ARRAY((std::wstring*)p->ptr); + break; + case SOAP_TYPE_std__vectorTemplateOfstd__wstring: + if (p->size < 0) + SOAP_DELETE((std::vector*)p->ptr); + else + SOAP_DELETE_ARRAY((std::vector*)p->ptr); + break; + case SOAP_TYPE_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo: + if (p->size < 0) + SOAP_DELETE((std::vector*)p->ptr); + else + SOAP_DELETE_ARRAY((std::vector*)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) @@ -925,6 +2047,14 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_container_insert(struct soap *soap, int st, int (void)soap; (void)st; (void)p; (void)len; (void)q; (void)n; /* appease -Wall -Werror */ switch (tt) { + case SOAP_TYPE_std__vectorTemplateOfstd__wstring: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Container soap_container_insert type=%d in %d location=%p object=%p len=%lu\n", st, tt, p, q, (unsigned long)len)); + (*(std::vector*)p)[len] = *(std::wstring *)q; + break; + case SOAP_TYPE_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Container soap_container_insert type=%d in %d location=%p object=%p len=%lu\n", st, tt, p, q, (unsigned long)len)); + (*(std::vector*)p)[len] = *(ns1__ModuleSymbolInfo **)q; + break; default: DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not insert type=%d in %d\n", st, tt)); } @@ -933,6 +2063,33 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_container_insert(struct soap *soap, int st, int #endif } +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__byte(struct soap *soap, const char *tag, int id, const char *a, const char *type) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_xsd__byte); +} + +SOAP_FMAC3 char * SOAP_FMAC4 soap_in_xsd__byte(struct soap *soap, const char *tag, char *a, const char *type) +{ char *p; + p = soap_inbyte(soap, tag, a, type, SOAP_TYPE_xsd__byte); + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__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_xsd__byte); + if (soap_out_xsd__byte(soap, tag?tag:"xsd:byte", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 char * SOAP_FMAC4 soap_get_xsd__byte(struct soap *soap, char *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__byte(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap *soap, char *a) { (void)soap; /* appease -Wall -Werror */ @@ -944,7 +2101,7 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap *soap, char *a) } SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap *soap, const char *tag, int id, const char *a, const char *type) -{ +{ (void)soap; (void)type; (void)tag; (void)id; return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_byte); } @@ -981,7 +2138,7 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_default_short(struct soap *soap, short *a) } SOAP_FMAC3 int SOAP_FMAC4 soap_out_short(struct soap *soap, const char *tag, int id, const short *a, const char *type) -{ +{ (void)soap; (void)type; (void)tag; (void)id; return soap_outshort(soap, tag, id, a, type, SOAP_TYPE_short); } @@ -1007,19 +2164,46 @@ SOAP_FMAC3 short * SOAP_FMAC4 soap_get_short(struct soap *soap, short *p, const 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_ns3__char(struct soap *soap, const char *tag, int id, const int *a, const char *type) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outint(soap, tag, id, a, type, SOAP_TYPE_ns3__char); } -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_ns3__char(struct soap *soap, const char *tag, int *a, const char *type) +{ int *p; + p = soap_inint(soap, tag, a, type, SOAP_TYPE_ns3__char); + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns3__char(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_ns3__char); + if (soap_out_ns3__char(soap, tag?tag:"ns3:char", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int * SOAP_FMAC4 soap_get_ns3__char(struct soap *soap, int *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns3__char(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) +{ (void)soap; (void)type; (void)tag; (void)id; + 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) @@ -1044,6 +2228,144 @@ SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap *soap, int *p, const char * 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) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_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_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_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 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) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_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_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_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_double(struct soap *soap, double *a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_double + *a = SOAP_DEFAULT_double; +#else + *a = (double)0; +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_double(struct soap *soap, const char *tag, int id, const double *a, const char *type) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outdouble(soap, tag, id, a, type, SOAP_TYPE_double); +} + +SOAP_FMAC3 double * SOAP_FMAC4 soap_in_double(struct soap *soap, const char *tag, double *a, const char *type) +{ double *p; + p = soap_indouble(soap, tag, a, type, SOAP_TYPE_double); + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_double(struct soap *soap, const double *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_double); + if (soap_out_double(soap, tag?tag:"double", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 double * SOAP_FMAC4 soap_get_double(struct soap *soap, double *p, const char *tag, const char *type) +{ + if ((p = soap_in_double(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *a, const char *type) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outunsignedByte(soap, tag, id, a, type, SOAP_TYPE_xsd__unsignedByte); +} + +SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_xsd__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_xsd__unsignedByte); + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__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_xsd__unsignedByte); + if (soap_out_xsd__unsignedByte(soap, tag?tag:"xsd:unsignedByte", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_xsd__unsignedByte(struct soap *soap, unsigned char *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__unsignedByte(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 */ @@ -1055,7 +2377,7 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap *soap, unsigned } SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *a, const char *type) -{ +{ (void)soap; (void)type; (void)tag; (void)id; return soap_outunsignedByte(soap, tag, id, a, type, SOAP_TYPE_unsignedByte); } @@ -1092,7 +2414,7 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedShort(struct soap *soap, unsigne } SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedShort(struct soap *soap, const char *tag, int id, const unsigned short *a, const char *type) -{ +{ (void)soap; (void)type; (void)tag; (void)id; return soap_outunsignedShort(soap, tag, id, a, type, SOAP_TYPE_unsignedShort); } @@ -1129,7 +2451,7 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap *soap, unsigned } SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *a, const char *type) -{ +{ (void)soap; (void)type; (void)tag; (void)id; return soap_outunsignedInt(soap, tag, id, a, type, SOAP_TYPE_unsignedInt); } @@ -1155,1434 +2477,1216 @@ SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap *soap, uns return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap *soap, bool *a) +SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedLONG64(struct soap *soap, ULONG64 *a) { (void)soap; /* appease -Wall -Werror */ -#ifdef SOAP_DEFAULT_bool - *a = SOAP_DEFAULT_bool; +#ifdef SOAP_DEFAULT_unsignedLONG64 + *a = SOAP_DEFAULT_unsignedLONG64; #else - *a = (bool)0; + *a = (ULONG64)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_unsignedLONG64(struct soap *soap, const char *tag, int id, const ULONG64 *a, const char *type) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outULONG64(soap, tag, id, a, type, SOAP_TYPE_unsignedLONG64); } -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_bool), type) || soap_send(soap, soap_bool2s(soap, *a))) - return soap->error; - return soap_element_end_out(soap, tag); +SOAP_FMAC3 ULONG64 * SOAP_FMAC4 soap_in_unsignedLONG64(struct soap *soap, const char *tag, ULONG64 *a, const char *type) +{ ULONG64 *p; + p = soap_inULONG64(soap, tag, a, type, SOAP_TYPE_unsignedLONG64); + return p; } -SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap *soap, const char *s, bool *a) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedLONG64(struct soap *soap, const ULONG64 *a, const char *tag, const char *type) { - const struct soap_code_map *map; - if (!s) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_unsignedLONG64); + if (soap_out_unsignedLONG64(soap, tag?tag:"unsignedLong", id, a, type)) 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; + return soap_putindependent(soap); } -SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap *soap, const char *tag, bool *a, const char *type) +SOAP_FMAC3 ULONG64 * SOAP_FMAC4 soap_get_unsignedLONG64(struct soap *soap, ULONG64 *p, const char *tag, 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_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_bool, 0, sizeof(bool), 0, NULL); - if (soap->body && soap_element_end_in(soap, tag)) + if ((p = soap_in_unsignedLONG64(soap, tag, p, type))) + if (soap_getindependent(soap)) return NULL; - } - return a; + return p; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap *soap, const bool *a, const char *tag, const char *type) +SOAP_FMAC3 void SOAP_FMAC4 soap_default_time(struct soap *soap, time_t *a) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_bool); - if (soap_out_bool(soap, tag?tag:"boolean", id, a, type)) + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_time + *a = SOAP_DEFAULT_time; +#else + *a = (time_t)0; +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_time(struct soap *soap, const char *tag, int id, const time_t *a, const char *type) +{ (void)soap; (void)type; (void)tag; (void)id; + return soap_outdateTime(soap, tag, id, a, type, SOAP_TYPE_time); +} + +SOAP_FMAC3 time_t * SOAP_FMAC4 soap_in_time(struct soap *soap, const char *tag, time_t *a, const char *type) +{ time_t *p; + p = soap_indateTime(soap, tag, a, type, SOAP_TYPE_time); + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_time(struct soap *soap, const time_t *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_time); + if (soap_out_time(soap, tag?tag:"dateTime", 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) +SOAP_FMAC3 time_t * SOAP_FMAC4 soap_get_time(struct soap *soap, time_t *p, const char *tag, const char *type) { - if ((p = soap_in_bool(soap, tag, p, type))) + if ((p = soap_in_time(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__AdditionalInfoType(struct soap *soap, enum ns1__AdditionalInfoType *a) +SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns4__HaveSolutionResponse_SolutionType(struct soap *soap, enum ns4__HaveSolutionResponse_SolutionType *a) { (void)soap; /* appease -Wall -Werror */ -#ifdef SOAP_DEFAULT_ns1__AdditionalInfoType - *a = SOAP_DEFAULT_ns1__AdditionalInfoType; +#ifdef SOAP_DEFAULT_ns4__HaveSolutionResponse_SolutionType + *a = SOAP_DEFAULT_ns4__HaveSolutionResponse_SolutionType; #else - *a = (enum ns1__AdditionalInfoType)0; + *a = (enum ns4__HaveSolutionResponse_SolutionType)0; #endif } -static const struct soap_code_map soap_codes_ns1__AdditionalInfoType[] = -{ { (long)ns1__AdditionalInfoType__None, "None" }, - { (long)ns1__AdditionalInfoType__FullDump, "FullDump" }, - { (long)ns1__AdditionalInfoType__Info, "Info" }, +static const struct soap_code_map soap_codes_ns4__HaveSolutionResponse_SolutionType[] = +{ { (long)ns4__HaveSolutionResponse_SolutionType__Url, "Url" }, + { (long)ns4__HaveSolutionResponse_SolutionType__Exe, "Exe" }, { 0, NULL } }; -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__AdditionalInfoType2s(struct soap *soap, enum ns1__AdditionalInfoType n) -{ const char *s = soap_code_str(soap_codes_ns1__AdditionalInfoType, (long)n); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns4__HaveSolutionResponse_SolutionType2s(struct soap *soap, enum ns4__HaveSolutionResponse_SolutionType n) +{ const char *s = soap_code_str(soap_codes_ns4__HaveSolutionResponse_SolutionType, (long)n); if (s) return s; return soap_long2s(soap, (long)n); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__AdditionalInfoType(struct soap *soap, const char *tag, int id, const enum ns1__AdditionalInfoType *a, const char *type) -{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__AdditionalInfoType), type) || soap_send(soap, soap_ns1__AdditionalInfoType2s(soap, *a))) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__HaveSolutionResponse_SolutionType(struct soap *soap, const char *tag, int id, const enum ns4__HaveSolutionResponse_SolutionType *a, const char *type) +{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType), type) || soap_send(soap, soap_ns4__HaveSolutionResponse_SolutionType2s(soap, *a))) return soap->error; return soap_element_end_out(soap, tag); } -SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns1__AdditionalInfoType(struct soap *soap, const char *s, enum ns1__AdditionalInfoType *a) +SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns4__HaveSolutionResponse_SolutionType(struct soap *soap, const char *s, enum ns4__HaveSolutionResponse_SolutionType *a) { const struct soap_code_map *map; if (!s) return soap->error; - map = soap_code(soap_codes_ns1__AdditionalInfoType, s); + map = soap_code(soap_codes_ns4__HaveSolutionResponse_SolutionType, s); if (map) - *a = (enum ns1__AdditionalInfoType)map->code; + *a = (enum ns4__HaveSolutionResponse_SolutionType)map->code; else { long n; - if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 2))) + if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 1))) return soap->error = SOAP_TYPE; - *a = (enum ns1__AdditionalInfoType)n; + *a = (enum ns4__HaveSolutionResponse_SolutionType)n; } return SOAP_OK; } -SOAP_FMAC3 enum ns1__AdditionalInfoType * SOAP_FMAC4 soap_in_ns1__AdditionalInfoType(struct soap *soap, const char *tag, enum ns1__AdditionalInfoType *a, const char *type) +SOAP_FMAC3 enum ns4__HaveSolutionResponse_SolutionType * SOAP_FMAC4 soap_in_ns4__HaveSolutionResponse_SolutionType(struct soap *soap, const char *tag, enum ns4__HaveSolutionResponse_SolutionType *a, const char *type) { if (soap_element_begin_in(soap, tag, 0, type)) return NULL; - a = (enum ns1__AdditionalInfoType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__AdditionalInfoType, sizeof(enum ns1__AdditionalInfoType), 0, NULL, NULL, NULL); + a = (enum ns4__HaveSolutionResponse_SolutionType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType, sizeof(enum ns4__HaveSolutionResponse_SolutionType), 0, NULL, NULL, NULL); if (!a) return NULL; if (soap->body && !*soap->href) - { if (!a || soap_s2ns1__AdditionalInfoType(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) + { if (!a || soap_s2ns4__HaveSolutionResponse_SolutionType(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) return NULL; } else - { a = (enum ns1__AdditionalInfoType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__AdditionalInfoType, 0, sizeof(enum ns1__AdditionalInfoType), 0, NULL); + { a = (enum ns4__HaveSolutionResponse_SolutionType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType, 0, sizeof(enum ns4__HaveSolutionResponse_SolutionType), 0, NULL); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns1__AdditionalInfoType(struct soap *soap, const enum ns1__AdditionalInfoType *a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns4__HaveSolutionResponse_SolutionType(struct soap *soap, const enum ns4__HaveSolutionResponse_SolutionType *a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns1__AdditionalInfoType); - if (soap_out_ns1__AdditionalInfoType(soap, tag?tag:"ns1:AdditionalInfoType", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType); + if (soap_out_ns4__HaveSolutionResponse_SolutionType(soap, tag?tag:"ns4:HaveSolutionResponse.SolutionType", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 enum ns1__AdditionalInfoType * SOAP_FMAC4 soap_get_ns1__AdditionalInfoType(struct soap *soap, enum ns1__AdditionalInfoType *p, const char *tag, const char *type) +SOAP_FMAC3 enum ns4__HaveSolutionResponse_SolutionType * SOAP_FMAC4 soap_get_ns4__HaveSolutionResponse_SolutionType(struct soap *soap, enum ns4__HaveSolutionResponse_SolutionType *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__AdditionalInfoType(soap, tag, p, type))) + if ((p = soap_in_ns4__HaveSolutionResponse_SolutionType(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__SolutionType(struct soap *soap, enum ns1__SolutionType *a) +SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns4__ClientLib_ClientType(struct soap *soap, enum ns4__ClientLib_ClientType *a) { (void)soap; /* appease -Wall -Werror */ -#ifdef SOAP_DEFAULT_ns1__SolutionType - *a = SOAP_DEFAULT_ns1__SolutionType; +#ifdef SOAP_DEFAULT_ns4__ClientLib_ClientType + *a = SOAP_DEFAULT_ns4__ClientLib_ClientType; #else - *a = (enum ns1__SolutionType)0; + *a = (enum ns4__ClientLib_ClientType)0; #endif } -static const struct soap_code_map soap_codes_ns1__SolutionType[] = -{ { (long)ns1__SolutionType__Url, "Url" }, - { (long)ns1__SolutionType__Exe, "Exe" }, +static const struct soap_code_map soap_codes_ns4__ClientLib_ClientType[] = +{ { (long)ns4__ClientLib_ClientType__CrashHandler_1_0, "CrashHandler_1_0" }, + { (long)ns4__ClientLib_ClientType__WebCrashRptGate, "WebCrashRptGate" }, + { (long)ns4__ClientLib_ClientType__DumpUploader, "DumpUploader" }, + { (long)ns4__ClientLib_ClientType__CrashHandler_2_0_CrashRptBased, "CrashHandler_2_0_CrashRptBased" }, + { (long)ns4__ClientLib_ClientType__SymbolUploader, "SymbolUploader" }, { 0, NULL } }; -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__SolutionType2s(struct soap *soap, enum ns1__SolutionType n) -{ const char *s = soap_code_str(soap_codes_ns1__SolutionType, (long)n); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns4__ClientLib_ClientType2s(struct soap *soap, enum ns4__ClientLib_ClientType n) +{ const char *s = soap_code_str(soap_codes_ns4__ClientLib_ClientType, (long)n); if (s) return s; return soap_long2s(soap, (long)n); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__SolutionType(struct soap *soap, const char *tag, int id, const enum ns1__SolutionType *a, const char *type) -{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__SolutionType), type) || soap_send(soap, soap_ns1__SolutionType2s(soap, *a))) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_ClientType(struct soap *soap, const char *tag, int id, const enum ns4__ClientLib_ClientType *a, const char *type) +{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns4__ClientLib_ClientType), type) || soap_send(soap, soap_ns4__ClientLib_ClientType2s(soap, *a))) return soap->error; return soap_element_end_out(soap, tag); } -SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns1__SolutionType(struct soap *soap, const char *s, enum ns1__SolutionType *a) +SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns4__ClientLib_ClientType(struct soap *soap, const char *s, enum ns4__ClientLib_ClientType *a) { const struct soap_code_map *map; if (!s) return soap->error; - map = soap_code(soap_codes_ns1__SolutionType, s); + map = soap_code(soap_codes_ns4__ClientLib_ClientType, s); if (map) - *a = (enum ns1__SolutionType)map->code; + *a = (enum ns4__ClientLib_ClientType)map->code; else { long n; - if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 1))) + if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 4))) return soap->error = SOAP_TYPE; - *a = (enum ns1__SolutionType)n; + *a = (enum ns4__ClientLib_ClientType)n; } return SOAP_OK; } -SOAP_FMAC3 enum ns1__SolutionType * SOAP_FMAC4 soap_in_ns1__SolutionType(struct soap *soap, const char *tag, enum ns1__SolutionType *a, const char *type) +SOAP_FMAC3 enum ns4__ClientLib_ClientType * SOAP_FMAC4 soap_in_ns4__ClientLib_ClientType(struct soap *soap, const char *tag, enum ns4__ClientLib_ClientType *a, const char *type) { if (soap_element_begin_in(soap, tag, 0, type)) return NULL; - a = (enum ns1__SolutionType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__SolutionType, sizeof(enum ns1__SolutionType), 0, NULL, NULL, NULL); + a = (enum ns4__ClientLib_ClientType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_ns4__ClientLib_ClientType, sizeof(enum ns4__ClientLib_ClientType), 0, NULL, NULL, NULL); if (!a) return NULL; if (soap->body && !*soap->href) - { if (!a || soap_s2ns1__SolutionType(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) + { if (!a || soap_s2ns4__ClientLib_ClientType(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) return NULL; } else - { a = (enum ns1__SolutionType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__SolutionType, 0, sizeof(enum ns1__SolutionType), 0, NULL); + { a = (enum ns4__ClientLib_ClientType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns4__ClientLib_ClientType, 0, sizeof(enum ns4__ClientLib_ClientType), 0, NULL); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns1__SolutionType(struct soap *soap, const enum ns1__SolutionType *a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns4__ClientLib_ClientType(struct soap *soap, const enum ns4__ClientLib_ClientType *a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns1__SolutionType); - if (soap_out_ns1__SolutionType(soap, tag?tag:"ns1:SolutionType", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns4__ClientLib_ClientType); + if (soap_out_ns4__ClientLib_ClientType(soap, tag?tag:"ns4:ClientLib.ClientType", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 enum ns1__SolutionType * SOAP_FMAC4 soap_get_ns1__SolutionType(struct soap *soap, enum ns1__SolutionType *p, const char *tag, const char *type) +SOAP_FMAC3 enum ns4__ClientLib_ClientType * SOAP_FMAC4 soap_get_ns4__ClientLib_ClientType(struct soap *soap, enum ns4__ClientLib_ClientType *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__SolutionType(soap, tag, p, type))) + if ((p = soap_in_ns4__ClientLib_ClientType(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__ResponseType(struct soap *soap, enum ns1__ResponseType *a) +SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns4__ClientLib_Architecture(struct soap *soap, enum ns4__ClientLib_Architecture *a) { (void)soap; /* appease -Wall -Werror */ -#ifdef SOAP_DEFAULT_ns1__ResponseType - *a = SOAP_DEFAULT_ns1__ResponseType; +#ifdef SOAP_DEFAULT_ns4__ClientLib_Architecture + *a = SOAP_DEFAULT_ns4__ClientLib_Architecture; #else - *a = (enum ns1__ResponseType)0; + *a = (enum ns4__ClientLib_Architecture)0; #endif } -static const struct soap_code_map soap_codes_ns1__ResponseType[] = -{ { (long)ns1__ResponseType__HaveSolution, "HaveSolution" }, - { (long)ns1__ResponseType__NeedMiniDump, "NeedMiniDump" }, - { (long)ns1__ResponseType__NeedMoreInfo, "NeedMoreInfo" }, - { (long)ns1__ResponseType__Stop, "Stop" }, - { (long)ns1__ResponseType__Error, "Error" }, +static const struct soap_code_map soap_codes_ns4__ClientLib_Architecture[] = +{ { (long)ns4__ClientLib_Architecture__x86, "x86" }, + { (long)ns4__ClientLib_Architecture__x64, "x64" }, + { (long)ns4__ClientLib_Architecture__DotNet, "DotNet" }, { 0, NULL } }; -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__ResponseType2s(struct soap *soap, enum ns1__ResponseType n) -{ const char *s = soap_code_str(soap_codes_ns1__ResponseType, (long)n); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns4__ClientLib_Architecture2s(struct soap *soap, enum ns4__ClientLib_Architecture n) +{ const char *s = soap_code_str(soap_codes_ns4__ClientLib_Architecture, (long)n); if (s) return s; return soap_long2s(soap, (long)n); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ResponseType(struct soap *soap, const char *tag, int id, const enum ns1__ResponseType *a, const char *type) -{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ResponseType), type) || soap_send(soap, soap_ns1__ResponseType2s(soap, *a))) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_Architecture(struct soap *soap, const char *tag, int id, const enum ns4__ClientLib_Architecture *a, const char *type) +{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns4__ClientLib_Architecture), type) || soap_send(soap, soap_ns4__ClientLib_Architecture2s(soap, *a))) return soap->error; return soap_element_end_out(soap, tag); } -SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns1__ResponseType(struct soap *soap, const char *s, enum ns1__ResponseType *a) +SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns4__ClientLib_Architecture(struct soap *soap, const char *s, enum ns4__ClientLib_Architecture *a) { const struct soap_code_map *map; if (!s) return soap->error; - map = soap_code(soap_codes_ns1__ResponseType, s); + map = soap_code(soap_codes_ns4__ClientLib_Architecture, s); if (map) - *a = (enum ns1__ResponseType)map->code; + *a = (enum ns4__ClientLib_Architecture)map->code; else { long n; - if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 4))) + if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 2))) return soap->error = SOAP_TYPE; - *a = (enum ns1__ResponseType)n; + *a = (enum ns4__ClientLib_Architecture)n; } return SOAP_OK; } -SOAP_FMAC3 enum ns1__ResponseType * SOAP_FMAC4 soap_in_ns1__ResponseType(struct soap *soap, const char *tag, enum ns1__ResponseType *a, const char *type) +SOAP_FMAC3 enum ns4__ClientLib_Architecture * SOAP_FMAC4 soap_in_ns4__ClientLib_Architecture(struct soap *soap, const char *tag, enum ns4__ClientLib_Architecture *a, const char *type) { if (soap_element_begin_in(soap, tag, 0, type)) return NULL; - a = (enum ns1__ResponseType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__ResponseType, sizeof(enum ns1__ResponseType), 0, NULL, NULL, NULL); + a = (enum ns4__ClientLib_Architecture *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_ns4__ClientLib_Architecture, sizeof(enum ns4__ClientLib_Architecture), 0, NULL, NULL, NULL); if (!a) return NULL; if (soap->body && !*soap->href) - { if (!a || soap_s2ns1__ResponseType(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) + { if (!a || soap_s2ns4__ClientLib_Architecture(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) return NULL; } else - { a = (enum ns1__ResponseType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__ResponseType, 0, sizeof(enum ns1__ResponseType), 0, NULL); + { a = (enum ns4__ClientLib_Architecture *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns4__ClientLib_Architecture, 0, sizeof(enum ns4__ClientLib_Architecture), 0, NULL); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns1__ResponseType(struct soap *soap, const enum ns1__ResponseType *a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns4__ClientLib_Architecture(struct soap *soap, const enum ns4__ClientLib_Architecture *a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns1__ResponseType); - if (soap_out_ns1__ResponseType(soap, tag?tag:"ns1:ResponseType", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns4__ClientLib_Architecture); + if (soap_out_ns4__ClientLib_Architecture(soap, tag?tag:"ns4:ClientLib.Architecture", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 enum ns1__ResponseType * SOAP_FMAC4 soap_get_ns1__ResponseType(struct soap *soap, enum ns1__ResponseType *p, const char *tag, const char *type) +SOAP_FMAC3 enum ns4__ClientLib_Architecture * SOAP_FMAC4 soap_get_ns4__ClientLib_Architecture(struct soap *soap, enum ns4__ClientLib_Architecture *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__ResponseType(soap, tag, p, type))) + if ((p = soap_in_ns4__ClientLib_Architecture(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__Architecture(struct soap *soap, enum ns1__Architecture *a) +SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap *soap, bool *a) { (void)soap; /* appease -Wall -Werror */ -#ifdef SOAP_DEFAULT_ns1__Architecture - *a = SOAP_DEFAULT_ns1__Architecture; +#ifdef SOAP_DEFAULT_bool + *a = SOAP_DEFAULT_bool; #else - *a = (enum ns1__Architecture)0; + *a = (bool)0; #endif } -static const struct soap_code_map soap_codes_ns1__Architecture[] = -{ { (long)ns1__Architecture__x32, "x32" }, - { (long)ns1__Architecture__x64, "x64" }, +static const struct soap_code_map soap_codes_bool[] = +{ { (long)false, "false" }, + { (long)true, "true" }, { 0, NULL } }; -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__Architecture2s(struct soap *soap, enum ns1__Architecture n) -{ const char *s = soap_code_str(soap_codes_ns1__Architecture, (long)n); - if (s) - return s; - return soap_long2s(soap, (long)n); +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_ns1__Architecture(struct soap *soap, const char *tag, int id, const enum ns1__Architecture *a, const char *type) -{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__Architecture), type) || soap_send(soap, soap_ns1__Architecture2s(soap, *a))) +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_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_s2ns1__Architecture(struct soap *soap, const char *s, enum ns1__Architecture *a) +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_ns1__Architecture, s); + map = soap_code(soap_codes_bool, s); if (map) - *a = (enum ns1__Architecture)map->code; + *a = (bool)(map->code != 0); else { long n; - if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 1))) + if (soap_s2long(soap, s, &n) || n < 0 || n > 1) return soap->error = SOAP_TYPE; - *a = (enum ns1__Architecture)n; + *a = (bool)(n != 0); } return SOAP_OK; } -SOAP_FMAC3 enum ns1__Architecture * SOAP_FMAC4 soap_in_ns1__Architecture(struct soap *soap, const char *tag, enum ns1__Architecture *a, const char *type) +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, type)) + if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (enum ns1__Architecture *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__Architecture, sizeof(enum ns1__Architecture), 0, NULL, NULL, 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_bool, sizeof(bool), 0, NULL, NULL, NULL); if (!a) return NULL; if (soap->body && !*soap->href) - { if (!a || soap_s2ns1__Architecture(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) + { if (!a || soap_s2bool(soap, soap_value(soap), a) || soap_element_end_in(soap, tag)) return NULL; } else - { a = (enum ns1__Architecture *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__Architecture, 0, sizeof(enum ns1__Architecture), 0, NULL); + { a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_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_ns1__Architecture(struct soap *soap, const enum ns1__Architecture *a, const char *tag, const char *type) +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_ns1__Architecture); - if (soap_out_ns1__Architecture(soap, tag?tag:"ns1:Architecture", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_bool); + if (soap_out_bool(soap, tag?tag:"boolean", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 enum ns1__Architecture * SOAP_FMAC4 soap_get_ns1__Architecture(struct soap *soap, enum ns1__Architecture *p, const char *tag, const char *type) +SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap *soap, bool *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__Architecture(soap, tag, p, type))) + if ((p = soap_in_bool(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns2__guid(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) + +void ns4__HaveSolutionResponse_SolutionType_::soap_default(struct soap *soap) { - if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) - return soap_element_null(soap, tag, id, type); - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_ns2__guid), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) - return soap->error; - return SOAP_OK; + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_ns4__HaveSolutionResponse_SolutionType(soap, &this->ns4__HaveSolutionResponse_SolutionType_::__item); } -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_ns2__guid(struct soap *soap, const char *tag, std::wstring *s, const char *type) +void ns4__HaveSolutionResponse_SolutionType_::soap_serialize(struct soap *soap) const { - (void)type; /* appease -Wall -Werror */ - if (soap_element_begin_in(soap, tag, 1, NULL)) - return NULL; - if (!s) - s = soap_new_std__wstring(soap, -1); - if (soap->null) - if (s) - s->erase(); - if (soap->body && !*soap->href) - { wchar_t *t; - s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_ns2__guid, sizeof(std::wstring), soap->type, soap->arrayType); - if (s) - { if ((t = soap_wstring_in(soap, 1, -1, -1))) - s->assign(t); - else - return NULL; - } - } - else - s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_ns2__guid, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_ns2__guid, 0, sizeof(std::wstring), 0, soap_copy_ns2__guid); - if (soap->body && soap_element_end_in(soap, tag)) - return NULL; - return s; +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns2__guid(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +int ns4__HaveSolutionResponse_SolutionType_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns2__guid); - if (soap_out_ns2__guid(soap, tag?tag:"ns2:guid", id, a, type)) - return soap->error; - return soap_putindependent(soap); + return soap_out_ns4__HaveSolutionResponse_SolutionType_(soap, tag, id, this, type); } -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_ns2__guid(struct soap *soap, std::wstring *p, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__HaveSolutionResponse_SolutionType_(struct soap *soap, const char *tag, int id, const ns4__HaveSolutionResponse_SolutionType_ *a, const char *type) { - if ((p = soap_in_ns2__guid(soap, tag, p, type))) - if (soap_getindependent(soap)) - return NULL; - return p; -} - -SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__wstring(struct soap *soap, std::wstring *p) -{ - (void)soap; /* appease -Wall -Werror */ - p->erase(); + return soap_out_ns4__HaveSolutionResponse_SolutionType(soap, tag, id, &(a->ns4__HaveSolutionResponse_SolutionType_::__item), "ns4:HaveSolutionResponse.SolutionType"); } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__wstring(struct soap *soap, const std::wstring *p) -{ (void)soap; (void)p; /* appease -Wall -Werror */ -} -SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__wstring(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) -{ - if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) - return soap_element_null(soap, tag, id, type); - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_std__wstring), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) - return soap->error; - return SOAP_OK; +void *ns4__HaveSolutionResponse_SolutionType_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns4__HaveSolutionResponse_SolutionType_(soap, tag, this, type); } -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_std__wstring(struct soap *soap, const char *tag, std::wstring *s, const char *type) +SOAP_FMAC3 ns4__HaveSolutionResponse_SolutionType_ * SOAP_FMAC4 soap_in_ns4__HaveSolutionResponse_SolutionType_(struct soap *soap, const char *tag, ns4__HaveSolutionResponse_SolutionType_ *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; - if (!s) - s = soap_new_std__wstring(soap, -1); - if (soap->null) - if (s) - s->erase(); - if (soap->body && !*soap->href) - { wchar_t *t; - s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__wstring, sizeof(std::wstring), soap->type, soap->arrayType); - if (s) - { if ((t = soap_wstring_in(soap, 1, -1, -1))) - s->assign(t); - else - return NULL; - } + if (!(a = (ns4__HaveSolutionResponse_SolutionType_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_, sizeof(ns4__HaveSolutionResponse_SolutionType_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; } - else - s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__wstring, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_std__wstring, 0, sizeof(std::wstring), 0, soap_copy_std__wstring); - if (soap->body && soap_element_end_in(soap, tag)) + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_) + return (ns4__HaveSolutionResponse_SolutionType_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_ns4__HaveSolutionResponse_SolutionType(soap, tag, &(a->ns4__HaveSolutionResponse_SolutionType_::__item), "ns4:HaveSolutionResponse.SolutionType")) return NULL; - return s; + return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_std__wstring(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +int ns4__HaveSolutionResponse_SolutionType_::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_std__wstring); - if (soap_out_std__wstring(soap, tag?tag:"string", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_); + if (this->soap_out(soap, tag?tag:"ns4:HaveSolutionResponse.SolutionType", id, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_std__wstring(struct soap *soap, std::wstring *p, const char *tag, const char *type) +void *ns4__HaveSolutionResponse_SolutionType_::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in_std__wstring(soap, tag, p, type))) + return soap_get_ns4__HaveSolutionResponse_SolutionType_(soap, this, tag, type); +} + +SOAP_FMAC3 ns4__HaveSolutionResponse_SolutionType_ * SOAP_FMAC4 soap_get_ns4__HaveSolutionResponse_SolutionType_(struct soap *soap, ns4__HaveSolutionResponse_SolutionType_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns4__HaveSolutionResponse_SolutionType_(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 std::wstring * SOAP_FMAC2 soap_instantiate_std__wstring(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns4__HaveSolutionResponse_SolutionType_ * SOAP_FMAC2 soap_instantiate_ns4__HaveSolutionResponse_SolutionType_(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_std__wstring(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_std__wstring, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns4__HaveSolutionResponse_SolutionType_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(std::wstring); + { cp->ptr = (void*)SOAP_NEW(ns4__HaveSolutionResponse_SolutionType_); if (size) - *size = sizeof(std::wstring); + *size = sizeof(ns4__HaveSolutionResponse_SolutionType_); + ((ns4__HaveSolutionResponse_SolutionType_*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(std::wstring[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns4__HaveSolutionResponse_SolutionType_, n); if (size) - *size = n * sizeof(std::wstring); + *size = n * sizeof(ns4__HaveSolutionResponse_SolutionType_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns4__HaveSolutionResponse_SolutionType_*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (std::wstring*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns4__HaveSolutionResponse_SolutionType_*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__wstring(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns4__HaveSolutionResponse_SolutionType_(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 std::wstring %p -> %p\n", q, p)); - *(std::wstring*)p = *(std::wstring*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns4__HaveSolutionResponse_SolutionType_ %p -> %p\n", q, p)); + *(ns4__HaveSolutionResponse_SolutionType_*)p = *(ns4__HaveSolutionResponse_SolutionType_*)q; } -void _ns1__UploadSymbolResponse::soap_default(struct soap *soap) +void ns4__ClientLib_ClientType_::soap_default(struct soap *soap) { this->soap = soap; - this->_ns1__UploadSymbolResponse::UploadSymbolResult = NULL; - /* transient soap skipped */ + this->xsd__anyType::soap_default(soap); + soap_default_ns4__ClientLib_ClientType(soap, &this->ns4__ClientLib_ClientType_::__item); } -void _ns1__UploadSymbolResponse::soap_serialize(struct soap *soap) const +void ns4__ClientLib_ClientType_::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTostd__wstring(soap, &this->_ns1__UploadSymbolResponse::UploadSymbolResult); - /* transient soap skipped */ + this->xsd__anyType::soap_serialize(soap); +#endif } -int _ns1__UploadSymbolResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int ns4__ClientLib_ClientType_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out__ns1__UploadSymbolResponse(soap, tag, id, this, type); + return soap_out_ns4__ClientLib_ClientType_(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbolResponse(struct soap *soap, const char *tag, int id, const _ns1__UploadSymbolResponse *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_ClientType_(struct soap *soap, const char *tag, int id, const ns4__ClientLib_ClientType_ *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadSymbolResponse), type)) - return soap->error; - if (a->UploadSymbolResult) - soap_element_result(soap, "ns1:UploadSymbolResult"); - if (soap_out_PointerTostd__wstring(soap, "ns1:UploadSymbolResult", -1, &(a->_ns1__UploadSymbolResponse::UploadSymbolResult), "")) - return soap->error; - /* transient soap skipped */ - return soap_element_end_out(soap, tag); + return soap_out_ns4__ClientLib_ClientType(soap, tag, id, &(a->ns4__ClientLib_ClientType_::__item), "ns4:ClientLib.ClientType"); } -void *_ns1__UploadSymbolResponse::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__UploadSymbolResponse(soap, tag, this, type); +void *ns4__ClientLib_ClientType_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns4__ClientLib_ClientType_(soap, tag, this, type); } -SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_in__ns1__UploadSymbolResponse(struct soap *soap, const char *tag, _ns1__UploadSymbolResponse *a, const char *type) +SOAP_FMAC3 ns4__ClientLib_ClientType_ * SOAP_FMAC4 soap_in_ns4__ClientLib_ClientType_(struct soap *soap, const char *tag, ns4__ClientLib_ClientType_ *a, const char *type) { (void)type; /* appease -Wall -Werror */ - if (soap_element_begin_in(soap, tag, 0, NULL)) + if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; - a = (_ns1__UploadSymbolResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadSymbolResponse, sizeof(_ns1__UploadSymbolResponse), soap->type, soap->arrayType); - if (!a) + if (!(a = (ns4__ClientLib_ClientType_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns4__ClientLib_ClientType_, sizeof(ns4__ClientLib_ClientType_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; return NULL; + } + soap_revert(soap); + *soap->id = '\0'; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__UploadSymbolResponse) - { soap_revert(soap); - *soap->id = '\0'; - return (_ns1__UploadSymbolResponse *)a->soap_in(soap, tag, type); - } - } - size_t soap_flag_UploadSymbolResult1 = 1; - if (soap->body && !*soap->href) - { - for (;;) - { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_UploadSymbolResult1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:UploadSymbolResult", &(a->_ns1__UploadSymbolResponse::UploadSymbolResult), "xsd:string")) - { soap_flag_UploadSymbolResult1--; - continue; - } - /* transient soap skipped */ - soap_check_result(soap, "ns1:UploadSymbolResult"); - 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 = (_ns1__UploadSymbolResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadSymbolResponse, 0, sizeof(_ns1__UploadSymbolResponse), 0, soap_copy__ns1__UploadSymbolResponse); - if (soap->body && soap_element_end_in(soap, tag)) - return NULL; + if (soap->clist->type != SOAP_TYPE_ns4__ClientLib_ClientType_) + return (ns4__ClientLib_ClientType_ *)a->soap_in(soap, tag, type); } + if (!soap_in_ns4__ClientLib_ClientType(soap, tag, &(a->ns4__ClientLib_ClientType_::__item), "ns4:ClientLib.ClientType")) + return NULL; return a; } -int _ns1__UploadSymbolResponse::soap_put(struct soap *soap, const char *tag, const char *type) const +int ns4__ClientLib_ClientType_::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadSymbolResponse); - if (this->soap_out(soap, tag?tag:"ns1:UploadSymbolResponse", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns4__ClientLib_ClientType_); + if (this->soap_out(soap, tag?tag:"ns4:ClientLib.ClientType", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__UploadSymbolResponse::soap_get(struct soap *soap, const char *tag, const char *type) +void *ns4__ClientLib_ClientType_::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__UploadSymbolResponse(soap, this, tag, type); + return soap_get_ns4__ClientLib_ClientType_(soap, this, tag, type); } -SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_get__ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse *p, const char *tag, const char *type) +SOAP_FMAC3 ns4__ClientLib_ClientType_ * SOAP_FMAC4 soap_get_ns4__ClientLib_ClientType_(struct soap *soap, ns4__ClientLib_ClientType_ *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__UploadSymbolResponse(soap, tag, p, type))) + if ((p = soap_in_ns4__ClientLib_ClientType_(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__UploadSymbolResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbolResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns4__ClientLib_ClientType_ * SOAP_FMAC2 soap_instantiate_ns4__ClientLib_ClientType_(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__ns1__UploadSymbolResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadSymbolResponse, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns4__ClientLib_ClientType_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns4__ClientLib_ClientType_, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadSymbolResponse); + { cp->ptr = (void*)SOAP_NEW(ns4__ClientLib_ClientType_); if (size) - *size = sizeof(_ns1__UploadSymbolResponse); - ((_ns1__UploadSymbolResponse*)cp->ptr)->soap = soap; + *size = sizeof(ns4__ClientLib_ClientType_); + ((ns4__ClientLib_ClientType_*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadSymbolResponse[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns4__ClientLib_ClientType_, n); if (size) - *size = n * sizeof(_ns1__UploadSymbolResponse); - for (int i = 0; i < n; i++) - ((_ns1__UploadSymbolResponse*)cp->ptr)[i].soap = soap; + *size = n * sizeof(ns4__ClientLib_ClientType_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns4__ClientLib_ClientType_*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__UploadSymbolResponse*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns4__ClientLib_ClientType_*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbolResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns4__ClientLib_ClientType_(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 _ns1__UploadSymbolResponse %p -> %p\n", q, p)); - *(_ns1__UploadSymbolResponse*)p = *(_ns1__UploadSymbolResponse*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns4__ClientLib_ClientType_ %p -> %p\n", q, p)); + *(ns4__ClientLib_ClientType_*)p = *(ns4__ClientLib_ClientType_*)q; } -void _ns1__UploadSymbol::soap_default(struct soap *soap) +void ns4__ClientLib_Architecture_::soap_default(struct soap *soap) { this->soap = soap; - this->_ns1__UploadSymbol::client = NULL; - this->_ns1__UploadSymbol::app = NULL; - soap_default_bool(soap, &this->_ns1__UploadSymbol::publish); - this->_ns1__UploadSymbol::sym = NULL; - /* transient soap skipped */ + this->xsd__anyType::soap_default(soap); + soap_default_ns4__ClientLib_Architecture(soap, &this->ns4__ClientLib_Architecture_::__item); } -void _ns1__UploadSymbol::soap_serialize(struct soap *soap) const +void ns4__ClientLib_Architecture_::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__UploadSymbol::client); - soap_serialize_PointerTons1__Application(soap, &this->_ns1__UploadSymbol::app); - soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadSymbol::sym); - /* transient soap skipped */ + this->xsd__anyType::soap_serialize(soap); +#endif } -int _ns1__UploadSymbol::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int ns4__ClientLib_Architecture_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out__ns1__UploadSymbol(soap, tag, id, this, type); + return soap_out_ns4__ClientLib_Architecture_(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbol(struct soap *soap, const char *tag, int id, const _ns1__UploadSymbol *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_Architecture_(struct soap *soap, const char *tag, int id, const ns4__ClientLib_Architecture_ *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadSymbol), type)) - return soap->error; - if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__UploadSymbol::client), "")) - return soap->error; - if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__UploadSymbol::app), "")) - return soap->error; - if (soap_out_bool(soap, "ns1:publish", -1, &(a->_ns1__UploadSymbol::publish), "")) - return soap->error; - if (soap_out_PointerTo_xop__Include(soap, "ns1:sym", -1, &(a->_ns1__UploadSymbol::sym), "")) - return soap->error; - /* transient soap skipped */ - return soap_element_end_out(soap, tag); + return soap_out_ns4__ClientLib_Architecture(soap, tag, id, &(a->ns4__ClientLib_Architecture_::__item), "ns4:ClientLib.Architecture"); } -void *_ns1__UploadSymbol::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__UploadSymbol(soap, tag, this, type); +void *ns4__ClientLib_Architecture_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns4__ClientLib_Architecture_(soap, tag, this, type); } -SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_in__ns1__UploadSymbol(struct soap *soap, const char *tag, _ns1__UploadSymbol *a, const char *type) +SOAP_FMAC3 ns4__ClientLib_Architecture_ * SOAP_FMAC4 soap_in_ns4__ClientLib_Architecture_(struct soap *soap, const char *tag, ns4__ClientLib_Architecture_ *a, const char *type) { (void)type; /* appease -Wall -Werror */ - if (soap_element_begin_in(soap, tag, 0, NULL)) + if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; - a = (_ns1__UploadSymbol *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadSymbol, sizeof(_ns1__UploadSymbol), soap->type, soap->arrayType); - if (!a) + if (!(a = (ns4__ClientLib_Architecture_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns4__ClientLib_Architecture_, sizeof(ns4__ClientLib_Architecture_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; return NULL; + } + soap_revert(soap); + *soap->id = '\0'; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__UploadSymbol) - { soap_revert(soap); - *soap->id = '\0'; - return (_ns1__UploadSymbol *)a->soap_in(soap, tag, type); - } - } - size_t soap_flag_client1 = 1; - size_t soap_flag_app1 = 1; - size_t soap_flag_publish1 = 1; - size_t soap_flag_sym1 = 1; - if (soap->body && !*soap->href) - { - for (;;) - { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__UploadSymbol::client), "ns1:ClientLib")) - { soap_flag_client1--; - continue; - } - if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__UploadSymbol::app), "ns1:Application")) - { soap_flag_app1--; - continue; - } - if (soap_flag_publish1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_bool(soap, "ns1:publish", &(a->_ns1__UploadSymbol::publish), "xsd:boolean")) - { soap_flag_publish1--; - continue; - } - if (soap_flag_sym1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_xop__Include(soap, "ns1:sym", &(a->_ns1__UploadSymbol::sym), "")) - { soap_flag_sym1--; - continue; - } - /* transient soap 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 = (_ns1__UploadSymbol *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadSymbol, 0, sizeof(_ns1__UploadSymbol), 0, soap_copy__ns1__UploadSymbol); - if (soap->body && soap_element_end_in(soap, tag)) - return NULL; + if (soap->clist->type != SOAP_TYPE_ns4__ClientLib_Architecture_) + return (ns4__ClientLib_Architecture_ *)a->soap_in(soap, tag, type); } - if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_publish1 > 0)) - { soap->error = SOAP_OCCURS; + if (!soap_in_ns4__ClientLib_Architecture(soap, tag, &(a->ns4__ClientLib_Architecture_::__item), "ns4:ClientLib.Architecture")) return NULL; - } return a; } -int _ns1__UploadSymbol::soap_put(struct soap *soap, const char *tag, const char *type) const +int ns4__ClientLib_Architecture_::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadSymbol); - if (this->soap_out(soap, tag?tag:"ns1:UploadSymbol", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns4__ClientLib_Architecture_); + if (this->soap_out(soap, tag?tag:"ns4:ClientLib.Architecture", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__UploadSymbol::soap_get(struct soap *soap, const char *tag, const char *type) +void *ns4__ClientLib_Architecture_::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__UploadSymbol(soap, this, tag, type); + return soap_get_ns4__ClientLib_Architecture_(soap, this, tag, type); } -SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_get__ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *p, const char *tag, const char *type) +SOAP_FMAC3 ns4__ClientLib_Architecture_ * SOAP_FMAC4 soap_get_ns4__ClientLib_Architecture_(struct soap *soap, ns4__ClientLib_Architecture_ *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__UploadSymbol(soap, tag, p, type))) + if ((p = soap_in_ns4__ClientLib_Architecture_(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__UploadSymbol * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbol(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns4__ClientLib_Architecture_ * SOAP_FMAC2 soap_instantiate_ns4__ClientLib_Architecture_(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__ns1__UploadSymbol(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadSymbol, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns4__ClientLib_Architecture_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns4__ClientLib_Architecture_, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadSymbol); + { cp->ptr = (void*)SOAP_NEW(ns4__ClientLib_Architecture_); if (size) - *size = sizeof(_ns1__UploadSymbol); - ((_ns1__UploadSymbol*)cp->ptr)->soap = soap; + *size = sizeof(ns4__ClientLib_Architecture_); + ((ns4__ClientLib_Architecture_*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadSymbol[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns4__ClientLib_Architecture_, n); if (size) - *size = n * sizeof(_ns1__UploadSymbol); - for (int i = 0; i < n; i++) - ((_ns1__UploadSymbol*)cp->ptr)[i].soap = soap; + *size = n * sizeof(ns4__ClientLib_Architecture_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns4__ClientLib_Architecture_*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__UploadSymbol*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns4__ClientLib_Architecture_*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbol(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns4__ClientLib_Architecture_(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 _ns1__UploadSymbol %p -> %p\n", q, p)); - *(_ns1__UploadSymbol*)p = *(_ns1__UploadSymbol*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns4__ClientLib_Architecture_ %p -> %p\n", q, p)); + *(ns4__ClientLib_Architecture_*)p = *(ns4__ClientLib_Architecture_*)q; } -void _ns1__UploadAdditionalInfoResponse::soap_default(struct soap *soap) +void ns3__guid__::soap_default(struct soap *soap) { this->soap = soap; - this->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult = NULL; - /* transient soap skipped */ + this->xsd__anyType::soap_default(soap); + soap_default_ns3__guid(soap, &this->ns3__guid__::__item); } -void _ns1__UploadAdditionalInfoResponse::soap_serialize(struct soap *soap) const +void ns3__guid__::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTons1__Response(soap, &this->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult); - /* transient soap skipped */ + soap_serialize_ns3__guid(soap, &this->ns3__guid__::__item); + this->xsd__anyType::soap_serialize(soap); +#endif } -int _ns1__UploadAdditionalInfoResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int ns3__guid__::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out__ns1__UploadAdditionalInfoResponse(soap, tag, id, this, type); + return soap_out_ns3__guid__(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, int id, const _ns1__UploadAdditionalInfoResponse *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__guid__(struct soap *soap, const char *tag, int id, const ns3__guid__ *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse), type)) - return soap->error; - if (a->UploadAdditionalInfoResult) - soap_element_result(soap, "ns1:UploadAdditionalInfoResult"); - if (soap_out_PointerTons1__Response(soap, "ns1:UploadAdditionalInfoResult", -1, &(a->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult), "")) - return soap->error; - /* transient soap skipped */ - return soap_element_end_out(soap, tag); + return soap_out_ns3__guid(soap, tag, id, &(a->ns3__guid__::__item), "ns3:guid"); } -void *_ns1__UploadAdditionalInfoResponse::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__UploadAdditionalInfoResponse(soap, tag, this, type); +void *ns3__guid__::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns3__guid__(soap, tag, this, type); } -SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfoResponse *a, const char *type) +SOAP_FMAC3 ns3__guid__ * SOAP_FMAC4 soap_in_ns3__guid__(struct soap *soap, const char *tag, ns3__guid__ *a, const char *type) { (void)type; /* appease -Wall -Werror */ - if (soap_element_begin_in(soap, tag, 0, NULL)) + if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; - a = (_ns1__UploadAdditionalInfoResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, sizeof(_ns1__UploadAdditionalInfoResponse), soap->type, soap->arrayType); - if (!a) + if (!(a = (ns3__guid__ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns3__guid__, sizeof(ns3__guid__), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; return NULL; + } + soap_revert(soap); + *soap->id = '\0'; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__UploadAdditionalInfoResponse) - { soap_revert(soap); - *soap->id = '\0'; - return (_ns1__UploadAdditionalInfoResponse *)a->soap_in(soap, tag, type); - } - } - size_t soap_flag_UploadAdditionalInfoResult1 = 1; - if (soap->body && !*soap->href) - { - for (;;) - { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_UploadAdditionalInfoResult1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Response(soap, "ns1:UploadAdditionalInfoResult", &(a->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult), "ns1:Response")) - { soap_flag_UploadAdditionalInfoResult1--; - continue; - } - /* transient soap skipped */ - soap_check_result(soap, "ns1:UploadAdditionalInfoResult"); - 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 = (_ns1__UploadAdditionalInfoResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, 0, sizeof(_ns1__UploadAdditionalInfoResponse), 0, soap_copy__ns1__UploadAdditionalInfoResponse); - if (soap->body && soap_element_end_in(soap, tag)) - return NULL; + if (soap->clist->type != SOAP_TYPE_ns3__guid__) + return (ns3__guid__ *)a->soap_in(soap, tag, type); } + if (!soap_in_ns3__guid(soap, tag, &(a->ns3__guid__::__item), "ns3:guid")) + return NULL; return a; } -int _ns1__UploadAdditionalInfoResponse::soap_put(struct soap *soap, const char *tag, const char *type) const +int ns3__guid__::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadAdditionalInfoResponse); - if (this->soap_out(soap, tag?tag:"ns1:UploadAdditionalInfoResponse", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns3__guid__); + if (this->soap_out(soap, tag?tag:"ns3:guid", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__UploadAdditionalInfoResponse::soap_get(struct soap *soap, const char *tag, const char *type) +void *ns3__guid__::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__UploadAdditionalInfoResponse(soap, this, tag, type); + return soap_get_ns3__guid__(soap, this, tag, type); } -SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse *p, const char *tag, const char *type) +SOAP_FMAC3 ns3__guid__ * SOAP_FMAC4 soap_get_ns3__guid__(struct soap *soap, ns3__guid__ *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__UploadAdditionalInfoResponse(soap, tag, p, type))) + if ((p = soap_in_ns3__guid__(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfoResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns3__guid__ * SOAP_FMAC2 soap_instantiate_ns3__guid__(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__ns1__UploadAdditionalInfoResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns3__guid__(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns3__guid__, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadAdditionalInfoResponse); + { cp->ptr = (void*)SOAP_NEW(ns3__guid__); if (size) - *size = sizeof(_ns1__UploadAdditionalInfoResponse); - ((_ns1__UploadAdditionalInfoResponse*)cp->ptr)->soap = soap; + *size = sizeof(ns3__guid__); + ((ns3__guid__*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadAdditionalInfoResponse[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns3__guid__, n); if (size) - *size = n * sizeof(_ns1__UploadAdditionalInfoResponse); - for (int i = 0; i < n; i++) - ((_ns1__UploadAdditionalInfoResponse*)cp->ptr)[i].soap = soap; + *size = n * sizeof(ns3__guid__); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns3__guid__*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__UploadAdditionalInfoResponse*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns3__guid__*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfoResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns3__guid__(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 _ns1__UploadAdditionalInfoResponse %p -> %p\n", q, p)); - *(_ns1__UploadAdditionalInfoResponse*)p = *(_ns1__UploadAdditionalInfoResponse*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns3__guid__ %p -> %p\n", q, p)); + *(ns3__guid__*)p = *(ns3__guid__*)q; } -void _ns1__UploadAdditionalInfo::soap_default(struct soap *soap) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_ns3__guid(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__guid(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_ns3__guid), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_ns3__guid(struct soap *soap, const char *tag, std::wstring *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_ns3__guid, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_ns3__guid, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_ns3__guid, 0, sizeof(std::wstring), 0, soap_copy_ns3__guid); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns3__guid(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns3__guid); + if (soap_out_ns3__guid(soap, tag?tag:"ns3:guid", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_ns3__guid(struct soap *soap, std::wstring *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns3__guid(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +void ns3__duration__::soap_default(struct soap *soap) { this->soap = soap; - this->_ns1__UploadAdditionalInfo::client = NULL; - this->_ns1__UploadAdditionalInfo::app = NULL; - this->_ns1__UploadAdditionalInfo::mainModule = NULL; - soap_default_int(soap, &this->_ns1__UploadAdditionalInfo::miniDumpID); - this->_ns1__UploadAdditionalInfo::info = NULL; - soap_default_ns1__AdditionalInfoType(soap, &this->_ns1__UploadAdditionalInfo::infoType); - /* transient soap skipped */ + this->xsd__anyType::soap_default(soap); + soap_default_ns3__duration(soap, &this->ns3__duration__::__item); } -void _ns1__UploadAdditionalInfo::soap_serialize(struct soap *soap) const +void ns3__duration__::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__UploadAdditionalInfo::client); - soap_serialize_PointerTons1__Application(soap, &this->_ns1__UploadAdditionalInfo::app); - soap_serialize_PointerTostd__wstring(soap, &this->_ns1__UploadAdditionalInfo::mainModule); - soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadAdditionalInfo::info); - /* transient soap skipped */ + soap_serialize_ns3__duration(soap, &this->ns3__duration__::__item); + this->xsd__anyType::soap_serialize(soap); +#endif } -int _ns1__UploadAdditionalInfo::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int ns3__duration__::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out__ns1__UploadAdditionalInfo(soap, tag, id, this, type); + return soap_out_ns3__duration__(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, int id, const _ns1__UploadAdditionalInfo *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__duration__(struct soap *soap, const char *tag, int id, const ns3__duration__ *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadAdditionalInfo), type)) - return soap->error; - if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__UploadAdditionalInfo::client), "")) - return soap->error; - if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__UploadAdditionalInfo::app), "")) - return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:mainModule", -1, &(a->_ns1__UploadAdditionalInfo::mainModule), "")) - return soap->error; - if (soap_out_int(soap, "ns1:miniDumpID", -1, &(a->_ns1__UploadAdditionalInfo::miniDumpID), "")) - return soap->error; - if (soap_out_PointerTo_xop__Include(soap, "ns1:info", -1, &(a->_ns1__UploadAdditionalInfo::info), "")) - return soap->error; - if (soap_out_ns1__AdditionalInfoType(soap, "ns1:infoType", -1, &(a->_ns1__UploadAdditionalInfo::infoType), "")) - return soap->error; - /* transient soap skipped */ - return soap_element_end_out(soap, tag); + return soap_out_ns3__duration(soap, tag, id, &(a->ns3__duration__::__item), "ns3:duration"); } -void *_ns1__UploadAdditionalInfo::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__UploadAdditionalInfo(soap, tag, this, type); +void *ns3__duration__::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns3__duration__(soap, tag, this, type); } -SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfo *a, const char *type) +SOAP_FMAC3 ns3__duration__ * SOAP_FMAC4 soap_in_ns3__duration__(struct soap *soap, const char *tag, ns3__duration__ *a, const char *type) { (void)type; /* appease -Wall -Werror */ - if (soap_element_begin_in(soap, tag, 0, NULL)) + if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; - a = (_ns1__UploadAdditionalInfo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadAdditionalInfo, sizeof(_ns1__UploadAdditionalInfo), soap->type, soap->arrayType); - if (!a) + if (!(a = (ns3__duration__ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns3__duration__, sizeof(ns3__duration__), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; return NULL; + } + soap_revert(soap); + *soap->id = '\0'; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__UploadAdditionalInfo) - { soap_revert(soap); - *soap->id = '\0'; - return (_ns1__UploadAdditionalInfo *)a->soap_in(soap, tag, type); - } - } - size_t soap_flag_client1 = 1; - size_t soap_flag_app1 = 1; - size_t soap_flag_mainModule1 = 1; - size_t soap_flag_miniDumpID1 = 1; - size_t soap_flag_info1 = 1; - size_t soap_flag_infoType1 = 1; - if (soap->body && !*soap->href) - { - for (;;) - { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__UploadAdditionalInfo::client), "ns1:ClientLib")) - { soap_flag_client1--; - continue; - } - if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__UploadAdditionalInfo::app), "ns1:Application")) - { soap_flag_app1--; - continue; - } - if (soap_flag_mainModule1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:mainModule", &(a->_ns1__UploadAdditionalInfo::mainModule), "xsd:string")) - { soap_flag_mainModule1--; - continue; - } - if (soap_flag_miniDumpID1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_int(soap, "ns1:miniDumpID", &(a->_ns1__UploadAdditionalInfo::miniDumpID), "xsd:int")) - { soap_flag_miniDumpID1--; - continue; - } - if (soap_flag_info1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_xop__Include(soap, "ns1:info", &(a->_ns1__UploadAdditionalInfo::info), "")) - { soap_flag_info1--; - continue; - } - if (soap_flag_infoType1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_ns1__AdditionalInfoType(soap, "ns1:infoType", &(a->_ns1__UploadAdditionalInfo::infoType), "ns1:AdditionalInfoType")) - { soap_flag_infoType1--; - continue; - } - /* transient soap 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 = (_ns1__UploadAdditionalInfo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadAdditionalInfo, 0, sizeof(_ns1__UploadAdditionalInfo), 0, soap_copy__ns1__UploadAdditionalInfo); - if (soap->body && soap_element_end_in(soap, tag)) - return NULL; + if (soap->clist->type != SOAP_TYPE_ns3__duration__) + return (ns3__duration__ *)a->soap_in(soap, tag, type); } - if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_miniDumpID1 > 0 || soap_flag_infoType1 > 0)) - { soap->error = SOAP_OCCURS; + if (!soap_in_ns3__duration(soap, tag, &(a->ns3__duration__::__item), "ns3:duration")) return NULL; - } return a; } -int _ns1__UploadAdditionalInfo::soap_put(struct soap *soap, const char *tag, const char *type) const +int ns3__duration__::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadAdditionalInfo); - if (this->soap_out(soap, tag?tag:"ns1:UploadAdditionalInfo", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns3__duration__); + if (this->soap_out(soap, tag?tag:"ns3:duration", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__UploadAdditionalInfo::soap_get(struct soap *soap, const char *tag, const char *type) +void *ns3__duration__::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__UploadAdditionalInfo(soap, this, tag, type); + return soap_get_ns3__duration__(soap, this, tag, type); } -SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *p, const char *tag, const char *type) +SOAP_FMAC3 ns3__duration__ * SOAP_FMAC4 soap_get_ns3__duration__(struct soap *soap, ns3__duration__ *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__UploadAdditionalInfo(soap, tag, p, type))) + if ((p = soap_in_ns3__duration__(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfo(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns3__duration__ * SOAP_FMAC2 soap_instantiate_ns3__duration__(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__ns1__UploadAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadAdditionalInfo, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns3__duration__(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns3__duration__, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadAdditionalInfo); + { cp->ptr = (void*)SOAP_NEW(ns3__duration__); if (size) - *size = sizeof(_ns1__UploadAdditionalInfo); - ((_ns1__UploadAdditionalInfo*)cp->ptr)->soap = soap; + *size = sizeof(ns3__duration__); + ((ns3__duration__*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadAdditionalInfo[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns3__duration__, n); if (size) - *size = n * sizeof(_ns1__UploadAdditionalInfo); - for (int i = 0; i < n; i++) - ((_ns1__UploadAdditionalInfo*)cp->ptr)[i].soap = soap; + *size = n * sizeof(ns3__duration__); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns3__duration__*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__UploadAdditionalInfo*)cp->ptr; -} - -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfo(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 _ns1__UploadAdditionalInfo %p -> %p\n", q, p)); - *(_ns1__UploadAdditionalInfo*)p = *(_ns1__UploadAdditionalInfo*)q; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns3__duration__*)cp->ptr; } -void _ns1__UploadMiniDumpResponse::soap_default(struct soap *soap) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns3__duration__(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) { - this->soap = soap; - this->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult = NULL; - /* transient soap skipped */ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns3__duration__ %p -> %p\n", q, p)); + *(ns3__duration__*)p = *(ns3__duration__*)q; } -void _ns1__UploadMiniDumpResponse::soap_serialize(struct soap *soap) const -{ - (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTons1__Response(soap, &this->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult); - /* transient soap skipped */ +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_ns3__duration(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ } - -int _ns1__UploadMiniDumpResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__duration(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) { - return soap_out__ns1__UploadMiniDumpResponse(soap, tag, id, this, type); + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_ns3__duration), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, int id, const _ns1__UploadMiniDumpResponse *a, const char *type) +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_ns3__duration(struct soap *soap, const char *tag, std::wstring *s, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadMiniDumpResponse), type)) - return soap->error; - if (a->UploadMiniDumpResult) - soap_element_result(soap, "ns1:UploadMiniDumpResult"); - if (soap_out_PointerTons1__Response(soap, "ns1:UploadMiniDumpResult", -1, &(a->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult), "")) - return soap->error; - /* transient soap skipped */ - return soap_element_end_out(soap, tag); + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_ns3__duration, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_ns3__duration, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_ns3__duration, 0, sizeof(std::wstring), 0, soap_copy_ns3__duration); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; } -void *_ns1__UploadMiniDumpResponse::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__UploadMiniDumpResponse(soap, tag, this, type); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns3__duration(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_ns3__duration); + if (soap_out_ns3__duration(soap, tag?tag:"ns3:duration", id, a, type)) + return soap->error; + return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_in__ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, _ns1__UploadMiniDumpResponse *a, const char *type) +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_ns3__duration(struct soap *soap, std::wstring *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns3__duration(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +void ns3__char__::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_ns3__char(soap, &this->ns3__char__::__item); +} + +void ns3__char__::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns3__char__::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns3__char__(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__char__(struct soap *soap, const char *tag, int id, const ns3__char__ *a, const char *type) +{ + return soap_out_ns3__char(soap, tag, id, &(a->ns3__char__::__item), "ns3:char"); +} + +void *ns3__char__::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns3__char__(soap, tag, this, type); +} + +SOAP_FMAC3 ns3__char__ * SOAP_FMAC4 soap_in_ns3__char__(struct soap *soap, const char *tag, ns3__char__ *a, const char *type) { (void)type; /* appease -Wall -Werror */ - if (soap_element_begin_in(soap, tag, 0, NULL)) + if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; - a = (_ns1__UploadMiniDumpResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadMiniDumpResponse, sizeof(_ns1__UploadMiniDumpResponse), soap->type, soap->arrayType); - if (!a) + if (!(a = (ns3__char__ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns3__char__, sizeof(ns3__char__), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; return NULL; + } + soap_revert(soap); + *soap->id = '\0'; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__UploadMiniDumpResponse) - { soap_revert(soap); - *soap->id = '\0'; - return (_ns1__UploadMiniDumpResponse *)a->soap_in(soap, tag, type); - } - } - size_t soap_flag_UploadMiniDumpResult1 = 1; - if (soap->body && !*soap->href) - { - for (;;) - { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_UploadMiniDumpResult1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Response(soap, "ns1:UploadMiniDumpResult", &(a->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult), "ns1:Response")) - { soap_flag_UploadMiniDumpResult1--; - continue; - } - /* transient soap skipped */ - soap_check_result(soap, "ns1:UploadMiniDumpResult"); - 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 = (_ns1__UploadMiniDumpResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadMiniDumpResponse, 0, sizeof(_ns1__UploadMiniDumpResponse), 0, soap_copy__ns1__UploadMiniDumpResponse); - if (soap->body && soap_element_end_in(soap, tag)) - return NULL; + if (soap->clist->type != SOAP_TYPE_ns3__char__) + return (ns3__char__ *)a->soap_in(soap, tag, type); } + if (!soap_in_ns3__char(soap, tag, &(a->ns3__char__::__item), "ns3:char")) + return NULL; return a; } -int _ns1__UploadMiniDumpResponse::soap_put(struct soap *soap, const char *tag, const char *type) const +int ns3__char__::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadMiniDumpResponse); - if (this->soap_out(soap, tag?tag:"ns1:UploadMiniDumpResponse", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns3__char__); + if (this->soap_out(soap, tag?tag:"ns3:char", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__UploadMiniDumpResponse::soap_get(struct soap *soap, const char *tag, const char *type) +void *ns3__char__::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__UploadMiniDumpResponse(soap, this, tag, type); + return soap_get_ns3__char__(soap, this, tag, type); } -SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_get__ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse *p, const char *tag, const char *type) +SOAP_FMAC3 ns3__char__ * SOAP_FMAC4 soap_get_ns3__char__(struct soap *soap, ns3__char__ *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__UploadMiniDumpResponse(soap, tag, p, type))) + if ((p = soap_in_ns3__char__(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__UploadMiniDumpResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDumpResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns3__char__ * SOAP_FMAC2 soap_instantiate_ns3__char__(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__ns1__UploadMiniDumpResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadMiniDumpResponse, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns3__char__(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns3__char__, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadMiniDumpResponse); + { cp->ptr = (void*)SOAP_NEW(ns3__char__); if (size) - *size = sizeof(_ns1__UploadMiniDumpResponse); - ((_ns1__UploadMiniDumpResponse*)cp->ptr)->soap = soap; + *size = sizeof(ns3__char__); + ((ns3__char__*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadMiniDumpResponse[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns3__char__, n); if (size) - *size = n * sizeof(_ns1__UploadMiniDumpResponse); - for (int i = 0; i < n; i++) - ((_ns1__UploadMiniDumpResponse*)cp->ptr)[i].soap = soap; + *size = n * sizeof(ns3__char__); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns3__char__*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__UploadMiniDumpResponse*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns3__char__*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDumpResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns3__char__(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 _ns1__UploadMiniDumpResponse %p -> %p\n", q, p)); - *(_ns1__UploadMiniDumpResponse*)p = *(_ns1__UploadMiniDumpResponse*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns3__char__ %p -> %p\n", q, p)); + *(ns3__char__*)p = *(ns3__char__*)q; } -void _ns1__UploadMiniDump::soap_default(struct soap *soap) +void ns5__ArrayOfstring::soap_default(struct soap *soap) { this->soap = soap; - this->_ns1__UploadMiniDump::client = NULL; - this->_ns1__UploadMiniDump::app = NULL; - this->_ns1__UploadMiniDump::mainModule = NULL; - soap_default_int(soap, &this->_ns1__UploadMiniDump::PCID); - soap_default_int(soap, &this->_ns1__UploadMiniDump::submitterID); - this->_ns1__UploadMiniDump::dump = NULL; - /* transient soap skipped */ + this->xsd__anyType::soap_default(soap); + soap_default_std__vectorTemplateOfstd__wstring(soap, &this->ns5__ArrayOfstring::string); } -void _ns1__UploadMiniDump::soap_serialize(struct soap *soap) const +void ns5__ArrayOfstring::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__UploadMiniDump::client); - soap_serialize_PointerTons1__Application(soap, &this->_ns1__UploadMiniDump::app); - soap_serialize_PointerTostd__wstring(soap, &this->_ns1__UploadMiniDump::mainModule); - soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadMiniDump::dump); - /* transient soap skipped */ + soap_serialize_std__vectorTemplateOfstd__wstring(soap, &this->ns5__ArrayOfstring::string); + this->xsd__anyType::soap_serialize(soap); +#endif } -int _ns1__UploadMiniDump::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int ns5__ArrayOfstring::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out__ns1__UploadMiniDump(soap, tag, id, this, type); + return soap_out_ns5__ArrayOfstring(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDump(struct soap *soap, const char *tag, int id, const _ns1__UploadMiniDump *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns5__ArrayOfstring(struct soap *soap, const char *tag, int id, const ns5__ArrayOfstring *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadMiniDump), type)) - return soap->error; - if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__UploadMiniDump::client), "")) - return soap->error; - if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__UploadMiniDump::app), "")) - return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:mainModule", -1, &(a->_ns1__UploadMiniDump::mainModule), "")) - return soap->error; - if (soap_out_int(soap, "ns1:PCID", -1, &(a->_ns1__UploadMiniDump::PCID), "")) - return soap->error; - if (soap_out_int(soap, "ns1:submitterID", -1, &(a->_ns1__UploadMiniDump::submitterID), "")) - return soap->error; - if (soap_out_PointerTo_xop__Include(soap, "ns1:dump", -1, &(a->_ns1__UploadMiniDump::dump), "")) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns5__ArrayOfstring), "ns5:ArrayOfstring")) return soap->error; /* transient soap skipped */ + if (soap_out_std__vectorTemplateOfstd__wstring(soap, "ns5:string", -1, &(a->ns5__ArrayOfstring::string), "")) + return soap->error; return soap_element_end_out(soap, tag); } -void *_ns1__UploadMiniDump::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__UploadMiniDump(soap, tag, this, type); +void *ns5__ArrayOfstring::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns5__ArrayOfstring(soap, tag, this, type); } -SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_in__ns1__UploadMiniDump(struct soap *soap, const char *tag, _ns1__UploadMiniDump *a, const char *type) +SOAP_FMAC3 ns5__ArrayOfstring * SOAP_FMAC4 soap_in_ns5__ArrayOfstring(struct soap *soap, const char *tag, ns5__ArrayOfstring *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (_ns1__UploadMiniDump *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadMiniDump, sizeof(_ns1__UploadMiniDump), soap->type, soap->arrayType); + a = (ns5__ArrayOfstring *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns5__ArrayOfstring, sizeof(ns5__ArrayOfstring), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__UploadMiniDump) + if (soap->clist->type != SOAP_TYPE_ns5__ArrayOfstring) { soap_revert(soap); *soap->id = '\0'; - return (_ns1__UploadMiniDump *)a->soap_in(soap, tag, type); + return (ns5__ArrayOfstring *)a->soap_in(soap, tag, type); } } - size_t soap_flag_client1 = 1; - size_t soap_flag_app1 = 1; - size_t soap_flag_mainModule1 = 1; - size_t soap_flag_PCID1 = 1; - size_t soap_flag_submitterID1 = 1; - size_t soap_flag_dump1 = 1; + size_t soap_flag___item2 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__UploadMiniDump::client), "ns1:ClientLib")) - { soap_flag_client1--; - continue; - } - if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__UploadMiniDump::app), "ns1:Application")) - { soap_flag_app1--; - continue; - } - if (soap_flag_mainModule1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:mainModule", &(a->_ns1__UploadMiniDump::mainModule), "xsd:string")) - { soap_flag_mainModule1--; - continue; - } - if (soap_flag_PCID1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_int(soap, "ns1:PCID", &(a->_ns1__UploadMiniDump::PCID), "xsd:int")) - { soap_flag_PCID1--; - continue; - } - if (soap_flag_submitterID1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_int(soap, "ns1:submitterID", &(a->_ns1__UploadMiniDump::submitterID), "xsd:int")) - { soap_flag_submitterID1--; + /* transient soap skipped */ + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_in_std__vectorTemplateOfstd__wstring(soap, "ns5:string", &(a->ns5__ArrayOfstring::string), "xsd:string")) continue; - } - if (soap_flag_dump1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_xop__Include(soap, "ns1:dump", &(a->_ns1__UploadMiniDump::dump), "")) - { soap_flag_dump1--; + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; continue; } - /* transient soap skipped */ if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -2594,136 +3698,133 @@ SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_in__ns1__UploadMiniDump(struct return NULL; } else - { a = (_ns1__UploadMiniDump *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadMiniDump, 0, sizeof(_ns1__UploadMiniDump), 0, soap_copy__ns1__UploadMiniDump); + { a = (ns5__ArrayOfstring *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns5__ArrayOfstring, 0, sizeof(ns5__ArrayOfstring), 0, soap_copy_ns5__ArrayOfstring); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } - if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_PCID1 > 0 || soap_flag_submitterID1 > 0)) - { soap->error = SOAP_OCCURS; - return NULL; - } return a; } -int _ns1__UploadMiniDump::soap_put(struct soap *soap, const char *tag, const char *type) const +int ns5__ArrayOfstring::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadMiniDump); - if (this->soap_out(soap, tag?tag:"ns1:UploadMiniDump", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns5__ArrayOfstring); + if (this->soap_out(soap, tag?tag:"ns5:ArrayOfstring", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__UploadMiniDump::soap_get(struct soap *soap, const char *tag, const char *type) +void *ns5__ArrayOfstring::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__UploadMiniDump(soap, this, tag, type); + return soap_get_ns5__ArrayOfstring(soap, this, tag, type); } -SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_get__ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *p, const char *tag, const char *type) +SOAP_FMAC3 ns5__ArrayOfstring * SOAP_FMAC4 soap_get_ns5__ArrayOfstring(struct soap *soap, ns5__ArrayOfstring *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__UploadMiniDump(soap, tag, p, type))) + if ((p = soap_in_ns5__ArrayOfstring(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__UploadMiniDump * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDump(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns5__ArrayOfstring * SOAP_FMAC2 soap_instantiate_ns5__ArrayOfstring(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__ns1__UploadMiniDump(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadMiniDump, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns5__ArrayOfstring(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns5__ArrayOfstring, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadMiniDump); + { cp->ptr = (void*)SOAP_NEW(ns5__ArrayOfstring); if (size) - *size = sizeof(_ns1__UploadMiniDump); - ((_ns1__UploadMiniDump*)cp->ptr)->soap = soap; + *size = sizeof(ns5__ArrayOfstring); + ((ns5__ArrayOfstring*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__UploadMiniDump[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns5__ArrayOfstring, n); if (size) - *size = n * sizeof(_ns1__UploadMiniDump); - for (int i = 0; i < n; i++) - ((_ns1__UploadMiniDump*)cp->ptr)[i].soap = soap; + *size = n * sizeof(ns5__ArrayOfstring); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns5__ArrayOfstring*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__UploadMiniDump*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns5__ArrayOfstring*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDump(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns5__ArrayOfstring(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 _ns1__UploadMiniDump %p -> %p\n", q, p)); - *(_ns1__UploadMiniDump*)p = *(_ns1__UploadMiniDump*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns5__ArrayOfstring %p -> %p\n", q, p)); + *(ns5__ArrayOfstring*)p = *(ns5__ArrayOfstring*)q; } -void _ns1__HelloResponse::soap_default(struct soap *soap) +void _ns1__UploadSymbolResponse::soap_default(struct soap *soap) { this->soap = soap; - this->_ns1__HelloResponse::HelloResult = NULL; + this->_ns1__UploadSymbolResponse::UploadSymbolResult = NULL; /* transient soap skipped */ } -void _ns1__HelloResponse::soap_serialize(struct soap *soap) const +void _ns1__UploadSymbolResponse::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTons1__Response(soap, &this->_ns1__HelloResponse::HelloResult); + soap_serialize_PointerTostd__wstring(soap, &this->_ns1__UploadSymbolResponse::UploadSymbolResult); /* transient soap skipped */ +#endif } -int _ns1__HelloResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int _ns1__UploadSymbolResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out__ns1__HelloResponse(soap, tag, id, this, type); + return soap_out__ns1__UploadSymbolResponse(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__HelloResponse(struct soap *soap, const char *tag, int id, const _ns1__HelloResponse *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbolResponse(struct soap *soap, const char *tag, int id, const _ns1__UploadSymbolResponse *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__HelloResponse), type)) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadSymbolResponse), type)) return soap->error; - if (a->HelloResult) - soap_element_result(soap, "ns1:HelloResult"); - if (soap_out_PointerTons1__Response(soap, "ns1:HelloResult", -1, &(a->_ns1__HelloResponse::HelloResult), "")) + if (a->UploadSymbolResult) + soap_element_result(soap, "ns1:UploadSymbolResult"); + if (soap_out_PointerTostd__wstring(soap, "ns1:UploadSymbolResult", -1, &(a->_ns1__UploadSymbolResponse::UploadSymbolResult), "")) return soap->error; /* transient soap skipped */ return soap_element_end_out(soap, tag); } -void *_ns1__HelloResponse::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__HelloResponse(soap, tag, this, type); +void *_ns1__UploadSymbolResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadSymbolResponse(soap, tag, this, type); } -SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_in__ns1__HelloResponse(struct soap *soap, const char *tag, _ns1__HelloResponse *a, const char *type) +SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_in__ns1__UploadSymbolResponse(struct soap *soap, const char *tag, _ns1__UploadSymbolResponse *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (_ns1__HelloResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__HelloResponse, sizeof(_ns1__HelloResponse), soap->type, soap->arrayType); + a = (_ns1__UploadSymbolResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadSymbolResponse, sizeof(_ns1__UploadSymbolResponse), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__HelloResponse) + if (soap->clist->type != SOAP_TYPE__ns1__UploadSymbolResponse) { soap_revert(soap); *soap->id = '\0'; - return (_ns1__HelloResponse *)a->soap_in(soap, tag, type); + return (_ns1__UploadSymbolResponse *)a->soap_in(soap, tag, type); } } - size_t soap_flag_HelloResult1 = 1; + size_t soap_flag_UploadSymbolResult1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_HelloResult1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Response(soap, "ns1:HelloResult", &(a->_ns1__HelloResponse::HelloResult), "ns1:Response")) - { soap_flag_HelloResult1--; + if (soap_flag_UploadSymbolResult1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:UploadSymbolResult", &(a->_ns1__UploadSymbolResponse::UploadSymbolResult), "xsd:string")) + { soap_flag_UploadSymbolResult1--; continue; } /* transient soap skipped */ - soap_check_result(soap, "ns1:HelloResult"); + soap_check_result(soap, "ns1:UploadSymbolResult"); if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -2735,146 +3836,157 @@ SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_in__ns1__HelloResponse(struct s return NULL; } else - { a = (_ns1__HelloResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__HelloResponse, 0, sizeof(_ns1__HelloResponse), 0, soap_copy__ns1__HelloResponse); + { a = (_ns1__UploadSymbolResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadSymbolResponse, 0, sizeof(_ns1__UploadSymbolResponse), 0, soap_copy__ns1__UploadSymbolResponse); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; } -int _ns1__HelloResponse::soap_put(struct soap *soap, const char *tag, const char *type) const +int _ns1__UploadSymbolResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__HelloResponse); - if (this->soap_out(soap, tag?tag:"ns1:HelloResponse", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadSymbolResponse); + if (this->soap_out(soap, tag?tag:"ns1:UploadSymbolResponse", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__HelloResponse::soap_get(struct soap *soap, const char *tag, const char *type) +void *_ns1__UploadSymbolResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__HelloResponse(soap, this, tag, type); + return soap_get__ns1__UploadSymbolResponse(soap, this, tag, type); } -SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_get__ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse *p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_get__ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__HelloResponse(soap, tag, p, type))) + if ((p = soap_in__ns1__UploadSymbolResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__HelloResponse * SOAP_FMAC2 soap_instantiate__ns1__HelloResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 _ns1__UploadSymbolResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbolResponse(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__ns1__HelloResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__HelloResponse, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadSymbolResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadSymbolResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__HelloResponse); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadSymbolResponse); if (size) - *size = sizeof(_ns1__HelloResponse); - ((_ns1__HelloResponse*)cp->ptr)->soap = soap; + *size = sizeof(_ns1__UploadSymbolResponse); + ((_ns1__UploadSymbolResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__HelloResponse[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadSymbolResponse, n); if (size) - *size = n * sizeof(_ns1__HelloResponse); - for (int i = 0; i < n; i++) - ((_ns1__HelloResponse*)cp->ptr)[i].soap = soap; + *size = n * sizeof(_ns1__UploadSymbolResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadSymbolResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__HelloResponse*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadSymbolResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__HelloResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbolResponse(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 _ns1__HelloResponse %p -> %p\n", q, p)); - *(_ns1__HelloResponse*)p = *(_ns1__HelloResponse*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadSymbolResponse %p -> %p\n", q, p)); + *(_ns1__UploadSymbolResponse*)p = *(_ns1__UploadSymbolResponse*)q; } -void _ns1__Hello::soap_default(struct soap *soap) +void _ns1__UploadSymbol::soap_default(struct soap *soap) { this->soap = soap; - this->_ns1__Hello::client = NULL; - this->_ns1__Hello::app = NULL; - this->_ns1__Hello::mainModule = NULL; + this->_ns1__UploadSymbol::client = NULL; + this->_ns1__UploadSymbol::app = NULL; + this->_ns1__UploadSymbol::publish = NULL; + this->_ns1__UploadSymbol::sym = NULL; /* transient soap skipped */ } -void _ns1__Hello::soap_serialize(struct soap *soap) const +void _ns1__UploadSymbol::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__Hello::client); - soap_serialize_PointerTons1__Application(soap, &this->_ns1__Hello::app); - soap_serialize_PointerTostd__wstring(soap, &this->_ns1__Hello::mainModule); + soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__UploadSymbol::client); + soap_serialize_PointerTons1__Application(soap, &this->_ns1__UploadSymbol::app); + soap_serialize_PointerTobool(soap, &this->_ns1__UploadSymbol::publish); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadSymbol::sym); /* transient soap skipped */ +#endif } -int _ns1__Hello::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int _ns1__UploadSymbol::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out__ns1__Hello(soap, tag, id, this, type); + return soap_out__ns1__UploadSymbol(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__Hello(struct soap *soap, const char *tag, int id, const _ns1__Hello *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbol(struct soap *soap, const char *tag, int id, const _ns1__UploadSymbol *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__Hello), type)) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadSymbol), type)) return soap->error; - if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__Hello::client), "")) + if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__UploadSymbol::client), "")) return soap->error; - if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__Hello::app), "")) + if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__UploadSymbol::app), "")) return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:mainModule", -1, &(a->_ns1__Hello::mainModule), "")) + if (soap_out_PointerTobool(soap, "ns1:publish", -1, &(a->_ns1__UploadSymbol::publish), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:sym", -1, &(a->_ns1__UploadSymbol::sym), "")) return soap->error; /* transient soap skipped */ return soap_element_end_out(soap, tag); } -void *_ns1__Hello::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in__ns1__Hello(soap, tag, this, type); +void *_ns1__UploadSymbol::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadSymbol(soap, tag, this, type); } -SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_in__ns1__Hello(struct soap *soap, const char *tag, _ns1__Hello *a, const char *type) +SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_in__ns1__UploadSymbol(struct soap *soap, const char *tag, _ns1__UploadSymbol *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (_ns1__Hello *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__Hello, sizeof(_ns1__Hello), soap->type, soap->arrayType); + a = (_ns1__UploadSymbol *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadSymbol, sizeof(_ns1__UploadSymbol), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE__ns1__Hello) + if (soap->clist->type != SOAP_TYPE__ns1__UploadSymbol) { soap_revert(soap); *soap->id = '\0'; - return (_ns1__Hello *)a->soap_in(soap, tag, type); + return (_ns1__UploadSymbol *)a->soap_in(soap, tag, type); } } size_t soap_flag_client1 = 1; size_t soap_flag_app1 = 1; - size_t soap_flag_mainModule1 = 1; + size_t soap_flag_publish1 = 1; + size_t soap_flag_sym1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__Hello::client), "ns1:ClientLib")) + if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__UploadSymbol::client), "ns1:ClientLib")) { soap_flag_client1--; continue; } if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__Hello::app), "ns1:Application")) + if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__UploadSymbol::app), "ns1:Application")) { soap_flag_app1--; continue; } - if (soap_flag_mainModule1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:mainModule", &(a->_ns1__Hello::mainModule), "xsd:string")) - { soap_flag_mainModule1--; + if (soap_flag_publish1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTobool(soap, "ns1:publish", &(a->_ns1__UploadSymbol::publish), "xsd:boolean")) + { soap_flag_publish1--; + continue; + } + if (soap_flag_sym1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:sym", &(a->_ns1__UploadSymbol::sym), "")) + { soap_flag_sym1--; continue; } /* transient soap skipped */ @@ -2889,157 +4001,133 @@ SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_in__ns1__Hello(struct soap *soap, const return NULL; } else - { a = (_ns1__Hello *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__Hello, 0, sizeof(_ns1__Hello), 0, soap_copy__ns1__Hello); + { a = (_ns1__UploadSymbol *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadSymbol, 0, sizeof(_ns1__UploadSymbol), 0, soap_copy__ns1__UploadSymbol); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; } -int _ns1__Hello::soap_put(struct soap *soap, const char *tag, const char *type) const +int _ns1__UploadSymbol::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__Hello); - if (this->soap_out(soap, tag?tag:"ns1:Hello", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadSymbol); + if (this->soap_out(soap, tag?tag:"ns1:UploadSymbol", id, type)) return soap->error; return soap_putindependent(soap); } -void *_ns1__Hello::soap_get(struct soap *soap, const char *tag, const char *type) +void *_ns1__UploadSymbol::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get__ns1__Hello(soap, this, tag, type); + return soap_get__ns1__UploadSymbol(soap, this, tag, type); } -SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_get__ns1__Hello(struct soap *soap, _ns1__Hello *p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_get__ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *p, const char *tag, const char *type) { - if ((p = soap_in__ns1__Hello(soap, tag, p, type))) + if ((p = soap_in__ns1__UploadSymbol(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 _ns1__Hello * SOAP_FMAC2 soap_instantiate__ns1__Hello(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 _ns1__UploadSymbol * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbol(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__ns1__Hello(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__Hello, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadSymbol(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadSymbol, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(_ns1__Hello); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadSymbol); if (size) - *size = sizeof(_ns1__Hello); - ((_ns1__Hello*)cp->ptr)->soap = soap; + *size = sizeof(_ns1__UploadSymbol); + ((_ns1__UploadSymbol*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(_ns1__Hello[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadSymbol, n); if (size) - *size = n * sizeof(_ns1__Hello); - for (int i = 0; i < n; i++) - ((_ns1__Hello*)cp->ptr)[i].soap = soap; + *size = n * sizeof(_ns1__UploadSymbol); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadSymbol*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (_ns1__Hello*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadSymbol*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__Hello(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbol(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 _ns1__Hello %p -> %p\n", q, p)); - *(_ns1__Hello*)p = *(_ns1__Hello*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadSymbol %p -> %p\n", q, p)); + *(_ns1__UploadSymbol*)p = *(_ns1__UploadSymbol*)q; } -void ns1__Solution::soap_default(struct soap *soap) +void _ns1__RejectedToSendAdditionalInfoResponse::soap_default(struct soap *soap) { this->soap = soap; - soap_default_bool(soap, &this->ns1__Solution::askConfirmation); - soap_default_ns1__SolutionType(soap, &this->ns1__Solution::type); - this->ns1__Solution::url = NULL; - this->ns1__Solution::exe = NULL; + this->_ns1__RejectedToSendAdditionalInfoResponse::RejectedToSendAdditionalInfoResult = NULL; /* transient soap skipped */ } -void ns1__Solution::soap_serialize(struct soap *soap) const +void _ns1__RejectedToSendAdditionalInfoResponse::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTostd__wstring(soap, &this->ns1__Solution::url); - soap_serialize_PointerTo_xop__Include(soap, &this->ns1__Solution::exe); + soap_serialize_PointerTons1__Response(soap, &this->_ns1__RejectedToSendAdditionalInfoResponse::RejectedToSendAdditionalInfoResult); /* transient soap skipped */ +#endif } -int ns1__Solution::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int _ns1__RejectedToSendAdditionalInfoResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out_ns1__Solution(soap, tag, id, this, type); + return soap_out__ns1__RejectedToSendAdditionalInfoResponse(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Solution(struct soap *soap, const char *tag, int id, const ns1__Solution *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, const char *tag, int id, const _ns1__RejectedToSendAdditionalInfoResponse *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__Solution), type)) - return soap->error; - if (soap_out_bool(soap, "ns1:askConfirmation", -1, &(a->ns1__Solution::askConfirmation), "")) - return soap->error; - if (soap_out_ns1__SolutionType(soap, "ns1:type", -1, &(a->ns1__Solution::type), "")) - return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:url", -1, &(a->ns1__Solution::url), "")) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse), type)) return soap->error; - if (soap_out_PointerTo_xop__Include(soap, "ns1:exe", -1, &(a->ns1__Solution::exe), "")) + if (a->RejectedToSendAdditionalInfoResult) + soap_element_result(soap, "ns1:RejectedToSendAdditionalInfoResult"); + if (soap_out_PointerTons1__Response(soap, "ns1:RejectedToSendAdditionalInfoResult", -1, &(a->_ns1__RejectedToSendAdditionalInfoResponse::RejectedToSendAdditionalInfoResult), "")) return soap->error; /* transient soap skipped */ return soap_element_end_out(soap, tag); } -void *ns1__Solution::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in_ns1__Solution(soap, tag, this, type); +void *_ns1__RejectedToSendAdditionalInfoResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__RejectedToSendAdditionalInfoResponse(soap, tag, this, type); } -SOAP_FMAC3 ns1__Solution * SOAP_FMAC4 soap_in_ns1__Solution(struct soap *soap, const char *tag, ns1__Solution *a, const char *type) +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse * SOAP_FMAC4 soap_in__ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, const char *tag, _ns1__RejectedToSendAdditionalInfoResponse *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (ns1__Solution *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__Solution, sizeof(ns1__Solution), soap->type, soap->arrayType); + a = (_ns1__RejectedToSendAdditionalInfoResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse, sizeof(_ns1__RejectedToSendAdditionalInfoResponse), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE_ns1__Solution) + if (soap->clist->type != SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse) { soap_revert(soap); *soap->id = '\0'; - return (ns1__Solution *)a->soap_in(soap, tag, type); + return (_ns1__RejectedToSendAdditionalInfoResponse *)a->soap_in(soap, tag, type); } } - size_t soap_flag_askConfirmation1 = 1; - size_t soap_flag_type1 = 1; - size_t soap_flag_url1 = 1; - size_t soap_flag_exe1 = 1; + size_t soap_flag_RejectedToSendAdditionalInfoResult1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_askConfirmation1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_bool(soap, "ns1:askConfirmation", &(a->ns1__Solution::askConfirmation), "xsd:boolean")) - { soap_flag_askConfirmation1--; - continue; - } - if (soap_flag_type1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_ns1__SolutionType(soap, "ns1:type", &(a->ns1__Solution::type), "ns1:SolutionType")) - { soap_flag_type1--; - continue; - } - if (soap_flag_url1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:url", &(a->ns1__Solution::url), "xsd:string")) - { soap_flag_url1--; - continue; - } - if (soap_flag_exe1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_xop__Include(soap, "ns1:exe", &(a->ns1__Solution::exe), "")) - { soap_flag_exe1--; + if (soap_flag_RejectedToSendAdditionalInfoResult1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Response(soap, "ns1:RejectedToSendAdditionalInfoResult", &(a->_ns1__RejectedToSendAdditionalInfoResponse::RejectedToSendAdditionalInfoResult), "ns1:Response")) + { soap_flag_RejectedToSendAdditionalInfoResult1--; continue; } /* transient soap skipped */ + soap_check_result(soap, "ns1:RejectedToSendAdditionalInfoResult"); if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -3051,225 +4139,157 @@ SOAP_FMAC3 ns1__Solution * SOAP_FMAC4 soap_in_ns1__Solution(struct soap *soap, c return NULL; } else - { a = (ns1__Solution *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__Solution, 0, sizeof(ns1__Solution), 0, soap_copy_ns1__Solution); + { a = (_ns1__RejectedToSendAdditionalInfoResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse, 0, sizeof(_ns1__RejectedToSendAdditionalInfoResponse), 0, soap_copy__ns1__RejectedToSendAdditionalInfoResponse); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } - if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_askConfirmation1 > 0 || soap_flag_type1 > 0)) - { soap->error = SOAP_OCCURS; - return NULL; - } return a; } -int ns1__Solution::soap_put(struct soap *soap, const char *tag, const char *type) const +int _ns1__RejectedToSendAdditionalInfoResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__Solution); - if (this->soap_out(soap, tag?tag:"ns1:Solution", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse); + if (this->soap_out(soap, tag?tag:"ns1:RejectedToSendAdditionalInfoResponse", id, type)) return soap->error; return soap_putindependent(soap); } -void *ns1__Solution::soap_get(struct soap *soap, const char *tag, const char *type) +void *_ns1__RejectedToSendAdditionalInfoResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get_ns1__Solution(soap, this, tag, type); + return soap_get__ns1__RejectedToSendAdditionalInfoResponse(soap, this, tag, type); } -SOAP_FMAC3 ns1__Solution * SOAP_FMAC4 soap_get_ns1__Solution(struct soap *soap, ns1__Solution *p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse * SOAP_FMAC4 soap_get__ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, _ns1__RejectedToSendAdditionalInfoResponse *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__Solution(soap, tag, p, type))) + if ((p = soap_in__ns1__RejectedToSendAdditionalInfoResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 ns1__Solution * SOAP_FMAC2 soap_instantiate_ns1__Solution(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 _ns1__RejectedToSendAdditionalInfoResponse * SOAP_FMAC2 soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(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_ns1__Solution(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__Solution, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(ns1__Solution); + { cp->ptr = (void*)SOAP_NEW(_ns1__RejectedToSendAdditionalInfoResponse); if (size) - *size = sizeof(ns1__Solution); - ((ns1__Solution*)cp->ptr)->soap = soap; + *size = sizeof(_ns1__RejectedToSendAdditionalInfoResponse); + ((_ns1__RejectedToSendAdditionalInfoResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(ns1__Solution[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__RejectedToSendAdditionalInfoResponse, n); if (size) - *size = n * sizeof(ns1__Solution); - for (int i = 0; i < n; i++) - ((ns1__Solution*)cp->ptr)[i].soap = soap; + *size = n * sizeof(_ns1__RejectedToSendAdditionalInfoResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__RejectedToSendAdditionalInfoResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (ns1__Solution*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__RejectedToSendAdditionalInfoResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Solution(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__RejectedToSendAdditionalInfoResponse(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 ns1__Solution %p -> %p\n", q, p)); - *(ns1__Solution*)p = *(ns1__Solution*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__RejectedToSendAdditionalInfoResponse %p -> %p\n", q, p)); + *(_ns1__RejectedToSendAdditionalInfoResponse*)p = *(_ns1__RejectedToSendAdditionalInfoResponse*)q; } -void ns1__Response::soap_default(struct soap *soap) +void _ns1__RejectedToSendAdditionalInfo::soap_default(struct soap *soap) { this->soap = soap; - soap_default_ns1__ResponseType(soap, &this->ns1__Response::type); - this->ns1__Response::error = NULL; - this->ns1__Response::solution = NULL; - this->ns1__Response::clientID = NULL; - soap_default_int(soap, &this->ns1__Response::problemID); - soap_default_int(soap, &this->ns1__Response::dumpGroupID); - soap_default_int(soap, &this->ns1__Response::dumpID); - this->ns1__Response::urlToProblem = NULL; - soap_default_ns1__AdditionalInfoType(soap, &this->ns1__Response::infoType); - this->ns1__Response::infoModule = NULL; - this->ns1__Response::infoModuleCfg = NULL; + this->_ns1__RejectedToSendAdditionalInfo::client = NULL; + this->_ns1__RejectedToSendAdditionalInfo::app = NULL; + this->_ns1__RejectedToSendAdditionalInfo::miniDumpID = NULL; + this->_ns1__RejectedToSendAdditionalInfo::context = NULL; /* transient soap skipped */ } -void ns1__Response::soap_serialize(struct soap *soap) const +void _ns1__RejectedToSendAdditionalInfo::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_PointerTostd__wstring(soap, &this->ns1__Response::error); - soap_serialize_PointerTons1__Solution(soap, &this->ns1__Response::solution); - soap_serialize_PointerTostd__wstring(soap, &this->ns1__Response::clientID); - soap_serialize_PointerTostd__wstring(soap, &this->ns1__Response::urlToProblem); - soap_serialize_PointerTo_xop__Include(soap, &this->ns1__Response::infoModule); - soap_serialize_PointerTostd__wstring(soap, &this->ns1__Response::infoModuleCfg); + soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__RejectedToSendAdditionalInfo::client); + soap_serialize_PointerTons1__Application(soap, &this->_ns1__RejectedToSendAdditionalInfo::app); + soap_serialize_PointerToint(soap, &this->_ns1__RejectedToSendAdditionalInfo::miniDumpID); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__RejectedToSendAdditionalInfo::context); /* transient soap skipped */ +#endif } -int ns1__Response::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int _ns1__RejectedToSendAdditionalInfo::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out_ns1__Response(soap, tag, id, this, type); + return soap_out__ns1__RejectedToSendAdditionalInfo(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Response(struct soap *soap, const char *tag, int id, const ns1__Response *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__RejectedToSendAdditionalInfo(struct soap *soap, const char *tag, int id, const _ns1__RejectedToSendAdditionalInfo *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__Response), type)) - return soap->error; - if (soap_out_ns1__ResponseType(soap, "ns1:type", -1, &(a->ns1__Response::type), "")) - return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:error", -1, &(a->ns1__Response::error), "")) - return soap->error; - if (soap_out_PointerTons1__Solution(soap, "ns1:solution", -1, &(a->ns1__Response::solution), "")) - return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) - return soap->error; - if (soap_out_int(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) - return soap->error; - if (soap_out_int(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo), type)) return soap->error; - if (soap_out_int(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__RejectedToSendAdditionalInfo::client), "")) return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) - return soap->error; - if (soap_out_ns1__AdditionalInfoType(soap, "ns1:infoType", -1, &(a->ns1__Response::infoType), "")) + if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__RejectedToSendAdditionalInfo::app), "")) return soap->error; - if (soap_out_PointerTo_xop__Include(soap, "ns1:infoModule", -1, &(a->ns1__Response::infoModule), "")) + if (soap_out_PointerToint(soap, "ns1:miniDumpID", -1, &(a->_ns1__RejectedToSendAdditionalInfo::miniDumpID), "")) return soap->error; - if (soap_out_PointerTostd__wstring(soap, "ns1:infoModuleCfg", -1, &(a->ns1__Response::infoModuleCfg), "")) + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->_ns1__RejectedToSendAdditionalInfo::context), "")) return soap->error; /* transient soap skipped */ return soap_element_end_out(soap, tag); } -void *ns1__Response::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in_ns1__Response(soap, tag, this, type); +void *_ns1__RejectedToSendAdditionalInfo::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__RejectedToSendAdditionalInfo(soap, tag, this, type); } -SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_in_ns1__Response(struct soap *soap, const char *tag, ns1__Response *a, const char *type) +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_in__ns1__RejectedToSendAdditionalInfo(struct soap *soap, const char *tag, _ns1__RejectedToSendAdditionalInfo *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (ns1__Response *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__Response, sizeof(ns1__Response), soap->type, soap->arrayType); + a = (_ns1__RejectedToSendAdditionalInfo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo, sizeof(_ns1__RejectedToSendAdditionalInfo), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE_ns1__Response) + if (soap->clist->type != SOAP_TYPE__ns1__RejectedToSendAdditionalInfo) { soap_revert(soap); *soap->id = '\0'; - return (ns1__Response *)a->soap_in(soap, tag, type); + return (_ns1__RejectedToSendAdditionalInfo *)a->soap_in(soap, tag, type); } } - size_t soap_flag_type1 = 1; - size_t soap_flag_error1 = 1; - size_t soap_flag_solution1 = 1; - size_t soap_flag_clientID1 = 1; - size_t soap_flag_problemID1 = 1; - size_t soap_flag_dumpGroupID1 = 1; - size_t soap_flag_dumpID1 = 1; - size_t soap_flag_urlToProblem1 = 1; - size_t soap_flag_infoType1 = 1; - size_t soap_flag_infoModule1 = 1; - size_t soap_flag_infoModuleCfg1 = 1; + size_t soap_flag_client1 = 1; + size_t soap_flag_app1 = 1; + size_t soap_flag_miniDumpID1 = 1; + size_t soap_flag_context1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_type1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_ns1__ResponseType(soap, "ns1:type", &(a->ns1__Response::type), "ns1:ResponseType")) - { soap_flag_type1--; - continue; - } - if (soap_flag_error1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:error", &(a->ns1__Response::error), "xsd:string")) - { soap_flag_error1--; - continue; - } - if (soap_flag_solution1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTons1__Solution(soap, "ns1:solution", &(a->ns1__Response::solution), "ns1:Solution")) - { soap_flag_solution1--; - continue; - } - if (soap_flag_clientID1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) - { soap_flag_clientID1--; - continue; - } - if (soap_flag_problemID1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_int(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) - { soap_flag_problemID1--; - continue; - } - if (soap_flag_dumpGroupID1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_int(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) - { soap_flag_dumpGroupID1--; - continue; - } - if (soap_flag_dumpID1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_int(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) - { soap_flag_dumpID1--; - continue; - } - if (soap_flag_urlToProblem1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) - { soap_flag_urlToProblem1--; + if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__RejectedToSendAdditionalInfo::client), "ns1:ClientLib")) + { soap_flag_client1--; continue; } - if (soap_flag_infoType1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_ns1__AdditionalInfoType(soap, "ns1:infoType", &(a->ns1__Response::infoType), "ns1:AdditionalInfoType")) - { soap_flag_infoType1--; + if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__RejectedToSendAdditionalInfo::app), "ns1:Application")) + { soap_flag_app1--; continue; } - if (soap_flag_infoModule1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_xop__Include(soap, "ns1:infoModule", &(a->ns1__Response::infoModule), "")) - { soap_flag_infoModule1--; + if (soap_flag_miniDumpID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:miniDumpID", &(a->_ns1__RejectedToSendAdditionalInfo::miniDumpID), "xsd:int")) + { soap_flag_miniDumpID1--; continue; } - if (soap_flag_infoModuleCfg1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_PointerTostd__wstring(soap, "ns1:infoModuleCfg", &(a->ns1__Response::infoModuleCfg), "xsd:string")) - { soap_flag_infoModuleCfg1--; + if (soap_flag_context1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->_ns1__RejectedToSendAdditionalInfo::context), "")) + { soap_flag_context1--; continue; } /* transient soap skipped */ @@ -3284,178 +4304,133 @@ SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_in_ns1__Response(struct soap *soap, c return NULL; } else - { a = (ns1__Response *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__Response, 0, sizeof(ns1__Response), 0, soap_copy_ns1__Response); + { a = (_ns1__RejectedToSendAdditionalInfo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo, 0, sizeof(_ns1__RejectedToSendAdditionalInfo), 0, soap_copy__ns1__RejectedToSendAdditionalInfo); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } - if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_type1 > 0 || soap_flag_problemID1 > 0 || soap_flag_dumpGroupID1 > 0 || soap_flag_dumpID1 > 0 || soap_flag_infoType1 > 0)) - { soap->error = SOAP_OCCURS; - return NULL; - } return a; } -int ns1__Response::soap_put(struct soap *soap, const char *tag, const char *type) const +int _ns1__RejectedToSendAdditionalInfo::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__Response); - if (this->soap_out(soap, tag?tag:"ns1:Response", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo); + if (this->soap_out(soap, tag?tag:"ns1:RejectedToSendAdditionalInfo", id, type)) return soap->error; return soap_putindependent(soap); } -void *ns1__Response::soap_get(struct soap *soap, const char *tag, const char *type) +void *_ns1__RejectedToSendAdditionalInfo::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get_ns1__Response(soap, this, tag, type); + return soap_get__ns1__RejectedToSendAdditionalInfo(soap, this, tag, type); } -SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_get_ns1__Response(struct soap *soap, ns1__Response *p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_get__ns1__RejectedToSendAdditionalInfo(struct soap *soap, _ns1__RejectedToSendAdditionalInfo *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__Response(soap, tag, p, type))) + if ((p = soap_in__ns1__RejectedToSendAdditionalInfo(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 ns1__Response * SOAP_FMAC2 soap_instantiate_ns1__Response(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 _ns1__RejectedToSendAdditionalInfo * SOAP_FMAC2 soap_instantiate__ns1__RejectedToSendAdditionalInfo(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_ns1__Response(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__Response, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__RejectedToSendAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(ns1__Response); + { cp->ptr = (void*)SOAP_NEW(_ns1__RejectedToSendAdditionalInfo); if (size) - *size = sizeof(ns1__Response); - ((ns1__Response*)cp->ptr)->soap = soap; + *size = sizeof(_ns1__RejectedToSendAdditionalInfo); + ((_ns1__RejectedToSendAdditionalInfo*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(ns1__Response[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__RejectedToSendAdditionalInfo, n); if (size) - *size = n * sizeof(ns1__Response); - for (int i = 0; i < n; i++) - ((ns1__Response*)cp->ptr)[i].soap = soap; + *size = n * sizeof(_ns1__RejectedToSendAdditionalInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__RejectedToSendAdditionalInfo*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (ns1__Response*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__RejectedToSendAdditionalInfo*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Response(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__RejectedToSendAdditionalInfo(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 ns1__Response %p -> %p\n", q, p)); - *(ns1__Response*)p = *(ns1__Response*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__RejectedToSendAdditionalInfo %p -> %p\n", q, p)); + *(_ns1__RejectedToSendAdditionalInfo*)p = *(_ns1__RejectedToSendAdditionalInfo*)q; } -void ns1__Application::soap_default(struct soap *soap) +void _ns1__UploadAdditionalInfoResponse::soap_default(struct soap *soap) { this->soap = soap; - soap_default_ns2__guid(soap, &this->ns1__Application::applicationGUID); - soap_default_unsignedShort(soap, &this->ns1__Application::v1); - soap_default_unsignedShort(soap, &this->ns1__Application::v2); - soap_default_unsignedShort(soap, &this->ns1__Application::v3); - soap_default_unsignedShort(soap, &this->ns1__Application::v4); - soap_default_unsignedShort(soap, &this->ns1__Application::hotfix); + this->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult = NULL; /* transient soap skipped */ } -void ns1__Application::soap_serialize(struct soap *soap) const +void _ns1__UploadAdditionalInfoResponse::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - soap_serialize_ns2__guid(soap, &this->ns1__Application::applicationGUID); + soap_serialize_PointerTons1__Response(soap, &this->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult); /* transient soap skipped */ +#endif } -int ns1__Application::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int _ns1__UploadAdditionalInfoResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out_ns1__Application(soap, tag, id, this, type); + return soap_out__ns1__UploadAdditionalInfoResponse(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Application(struct soap *soap, const char *tag, int id, const ns1__Application *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, int id, const _ns1__UploadAdditionalInfoResponse *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__Application), type)) - return soap->error; - if (soap_out_ns2__guid(soap, "ns1:applicationGUID", -1, &(a->ns1__Application::applicationGUID), "")) - return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v1", -1, &(a->ns1__Application::v1), "")) - return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v2", -1, &(a->ns1__Application::v2), "")) - return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v3", -1, &(a->ns1__Application::v3), "")) - return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v4", -1, &(a->ns1__Application::v4), "")) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse), type)) return soap->error; - if (soap_out_unsignedShort(soap, "ns1:hotfix", -1, &(a->ns1__Application::hotfix), "")) + if (a->UploadAdditionalInfoResult) + soap_element_result(soap, "ns1:UploadAdditionalInfoResult"); + if (soap_out_PointerTons1__Response(soap, "ns1:UploadAdditionalInfoResult", -1, &(a->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult), "")) return soap->error; /* transient soap skipped */ return soap_element_end_out(soap, tag); } -void *ns1__Application::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in_ns1__Application(soap, tag, this, type); +void *_ns1__UploadAdditionalInfoResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadAdditionalInfoResponse(soap, tag, this, type); } -SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_in_ns1__Application(struct soap *soap, const char *tag, ns1__Application *a, const char *type) +SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfoResponse *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (ns1__Application *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__Application, sizeof(ns1__Application), soap->type, soap->arrayType); + a = (_ns1__UploadAdditionalInfoResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, sizeof(_ns1__UploadAdditionalInfoResponse), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE_ns1__Application) + if (soap->clist->type != SOAP_TYPE__ns1__UploadAdditionalInfoResponse) { soap_revert(soap); *soap->id = '\0'; - return (ns1__Application *)a->soap_in(soap, tag, type); + return (_ns1__UploadAdditionalInfoResponse *)a->soap_in(soap, tag, type); } } - size_t soap_flag_applicationGUID1 = 1; - size_t soap_flag_v11 = 1; - size_t soap_flag_v21 = 1; - size_t soap_flag_v31 = 1; - size_t soap_flag_v41 = 1; - size_t soap_flag_hotfix1 = 1; + size_t soap_flag_UploadAdditionalInfoResult1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_applicationGUID1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) - if (soap_in_ns2__guid(soap, "ns1:applicationGUID", &(a->ns1__Application::applicationGUID), "ns2:guid")) - { soap_flag_applicationGUID1--; - continue; - } - if (soap_flag_v11 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v1", &(a->ns1__Application::v1), "xsd:unsignedShort")) - { soap_flag_v11--; - continue; - } - if (soap_flag_v21 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v2", &(a->ns1__Application::v2), "xsd:unsignedShort")) - { soap_flag_v21--; - continue; - } - if (soap_flag_v31 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v3", &(a->ns1__Application::v3), "xsd:unsignedShort")) - { soap_flag_v31--; - continue; - } - if (soap_flag_v41 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v4", &(a->ns1__Application::v4), "xsd:unsignedShort")) - { soap_flag_v41--; - continue; - } - if (soap_flag_hotfix1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:hotfix", &(a->ns1__Application::hotfix), "xsd:unsignedShort")) - { soap_flag_hotfix1--; + if (soap_flag_UploadAdditionalInfoResult1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Response(soap, "ns1:UploadAdditionalInfoResult", &(a->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult), "ns1:Response")) + { soap_flag_UploadAdditionalInfoResult1--; continue; } /* transient soap skipped */ + soap_check_result(soap, "ns1:UploadAdditionalInfoResult"); if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -3467,165 +4442,167 @@ SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_in_ns1__Application(struct soap *s return NULL; } else - { a = (ns1__Application *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__Application, 0, sizeof(ns1__Application), 0, soap_copy_ns1__Application); + { a = (_ns1__UploadAdditionalInfoResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, 0, sizeof(_ns1__UploadAdditionalInfoResponse), 0, soap_copy__ns1__UploadAdditionalInfoResponse); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } - if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_applicationGUID1 > 0 || soap_flag_v11 > 0 || soap_flag_v21 > 0 || soap_flag_v31 > 0 || soap_flag_v41 > 0 || soap_flag_hotfix1 > 0)) - { soap->error = SOAP_OCCURS; - return NULL; - } return a; } -int ns1__Application::soap_put(struct soap *soap, const char *tag, const char *type) const +int _ns1__UploadAdditionalInfoResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__Application); - if (this->soap_out(soap, tag?tag:"ns1:Application", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadAdditionalInfoResponse); + if (this->soap_out(soap, tag?tag:"ns1:UploadAdditionalInfoResponse", id, type)) return soap->error; return soap_putindependent(soap); } -void *ns1__Application::soap_get(struct soap *soap, const char *tag, const char *type) +void *_ns1__UploadAdditionalInfoResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get_ns1__Application(soap, this, tag, type); + return soap_get__ns1__UploadAdditionalInfoResponse(soap, this, tag, type); } -SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_get_ns1__Application(struct soap *soap, ns1__Application *p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__Application(soap, tag, p, type))) + if ((p = soap_in__ns1__UploadAdditionalInfoResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 ns1__Application * SOAP_FMAC2 soap_instantiate_ns1__Application(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfoResponse(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_ns1__Application(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__Application, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadAdditionalInfoResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(ns1__Application); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadAdditionalInfoResponse); if (size) - *size = sizeof(ns1__Application); - ((ns1__Application*)cp->ptr)->soap = soap; + *size = sizeof(_ns1__UploadAdditionalInfoResponse); + ((_ns1__UploadAdditionalInfoResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(ns1__Application[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadAdditionalInfoResponse, n); if (size) - *size = n * sizeof(ns1__Application); - for (int i = 0; i < n; i++) - ((ns1__Application*)cp->ptr)[i].soap = soap; + *size = n * sizeof(_ns1__UploadAdditionalInfoResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadAdditionalInfoResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (ns1__Application*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadAdditionalInfoResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Application(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfoResponse(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 ns1__Application %p -> %p\n", q, p)); - *(ns1__Application*)p = *(ns1__Application*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadAdditionalInfoResponse %p -> %p\n", q, p)); + *(_ns1__UploadAdditionalInfoResponse*)p = *(_ns1__UploadAdditionalInfoResponse*)q; } -void ns1__ClientLib::soap_default(struct soap *soap) +void _ns1__UploadAdditionalInfo::soap_default(struct soap *soap) { this->soap = soap; - soap_default_unsignedShort(soap, &this->ns1__ClientLib::v1); - soap_default_unsignedShort(soap, &this->ns1__ClientLib::v2); - soap_default_unsignedShort(soap, &this->ns1__ClientLib::v3); - soap_default_unsignedShort(soap, &this->ns1__ClientLib::v4); - soap_default_ns1__Architecture(soap, &this->ns1__ClientLib::arch); + this->_ns1__UploadAdditionalInfo::client = NULL; + this->_ns1__UploadAdditionalInfo::app = NULL; + this->_ns1__UploadAdditionalInfo::miniDumpID = NULL; + this->_ns1__UploadAdditionalInfo::info = NULL; + this->_ns1__UploadAdditionalInfo::context = NULL; /* transient soap skipped */ } -void ns1__ClientLib::soap_serialize(struct soap *soap) const +void _ns1__UploadAdditionalInfo::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__UploadAdditionalInfo::client); + soap_serialize_PointerTons1__Application(soap, &this->_ns1__UploadAdditionalInfo::app); + soap_serialize_PointerToint(soap, &this->_ns1__UploadAdditionalInfo::miniDumpID); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadAdditionalInfo::info); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadAdditionalInfo::context); /* transient soap skipped */ +#endif } -int ns1__ClientLib::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +int _ns1__UploadAdditionalInfo::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - return soap_out_ns1__ClientLib(soap, tag, id, this, type); + return soap_out__ns1__UploadAdditionalInfo(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ClientLib(struct soap *soap, const char *tag, int id, const ns1__ClientLib *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, int id, const _ns1__UploadAdditionalInfo *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ClientLib), type)) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadAdditionalInfo), type)) return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v1", -1, &(a->ns1__ClientLib::v1), "")) + if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__UploadAdditionalInfo::client), "")) return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v2", -1, &(a->ns1__ClientLib::v2), "")) + if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__UploadAdditionalInfo::app), "")) return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v3", -1, &(a->ns1__ClientLib::v3), "")) + if (soap_out_PointerToint(soap, "ns1:miniDumpID", -1, &(a->_ns1__UploadAdditionalInfo::miniDumpID), "")) return soap->error; - if (soap_out_unsignedShort(soap, "ns1:v4", -1, &(a->ns1__ClientLib::v4), "")) + if (soap_out_PointerTo_xop__Include(soap, "ns1:info", -1, &(a->_ns1__UploadAdditionalInfo::info), "")) return soap->error; - if (soap_out_ns1__Architecture(soap, "ns1:arch", -1, &(a->ns1__ClientLib::arch), "")) + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->_ns1__UploadAdditionalInfo::context), "")) return soap->error; /* transient soap skipped */ return soap_element_end_out(soap, tag); } -void *ns1__ClientLib::soap_in(struct soap *soap, const char *tag, const char *type) -{ return soap_in_ns1__ClientLib(soap, tag, this, type); +void *_ns1__UploadAdditionalInfo::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadAdditionalInfo(soap, tag, this, type); } -SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_in_ns1__ClientLib(struct soap *soap, const char *tag, ns1__ClientLib *a, const char *type) +SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfo *a, const char *type) { (void)type; /* appease -Wall -Werror */ if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - a = (ns1__ClientLib *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__ClientLib, sizeof(ns1__ClientLib), soap->type, soap->arrayType); + a = (_ns1__UploadAdditionalInfo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadAdditionalInfo, sizeof(_ns1__UploadAdditionalInfo), soap->type, soap->arrayType); if (!a) return NULL; if (soap->alloced) { a->soap_default(soap); - if (soap->clist->type != SOAP_TYPE_ns1__ClientLib) + if (soap->clist->type != SOAP_TYPE__ns1__UploadAdditionalInfo) { soap_revert(soap); *soap->id = '\0'; - return (ns1__ClientLib *)a->soap_in(soap, tag, type); + return (_ns1__UploadAdditionalInfo *)a->soap_in(soap, tag, type); } } - size_t soap_flag_v11 = 1; - size_t soap_flag_v21 = 1; - size_t soap_flag_v31 = 1; - size_t soap_flag_v41 = 1; - size_t soap_flag_arch1 = 1; + size_t soap_flag_client1 = 1; + size_t soap_flag_app1 = 1; + size_t soap_flag_miniDumpID1 = 1; + size_t soap_flag_info1 = 1; + size_t soap_flag_context1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_v11 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v1", &(a->ns1__ClientLib::v1), "xsd:unsignedShort")) - { soap_flag_v11--; + if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__UploadAdditionalInfo::client), "ns1:ClientLib")) + { soap_flag_client1--; continue; } - if (soap_flag_v21 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v2", &(a->ns1__ClientLib::v2), "xsd:unsignedShort")) - { soap_flag_v21--; + if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__UploadAdditionalInfo::app), "ns1:Application")) + { soap_flag_app1--; continue; } - if (soap_flag_v31 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v3", &(a->ns1__ClientLib::v3), "xsd:unsignedShort")) - { soap_flag_v31--; + if (soap_flag_miniDumpID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:miniDumpID", &(a->_ns1__UploadAdditionalInfo::miniDumpID), "xsd:int")) + { soap_flag_miniDumpID1--; continue; } - if (soap_flag_v41 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_unsignedShort(soap, "ns1:v4", &(a->ns1__ClientLib::v4), "xsd:unsignedShort")) - { soap_flag_v41--; + if (soap_flag_info1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:info", &(a->_ns1__UploadAdditionalInfo::info), "")) + { soap_flag_info1--; continue; } - if (soap_flag_arch1 && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_ns1__Architecture(soap, "ns1:arch", &(a->ns1__ClientLib::arch), "ns1:Architecture")) - { soap_flag_arch1--; + if (soap_flag_context1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->_ns1__UploadAdditionalInfo::context), "")) + { soap_flag_context1--; continue; } /* transient soap skipped */ @@ -3640,195 +4617,133 @@ SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_in_ns1__ClientLib(struct soap *soap, return NULL; } else - { a = (ns1__ClientLib *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__ClientLib, 0, sizeof(ns1__ClientLib), 0, soap_copy_ns1__ClientLib); + { a = (_ns1__UploadAdditionalInfo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadAdditionalInfo, 0, sizeof(_ns1__UploadAdditionalInfo), 0, soap_copy__ns1__UploadAdditionalInfo); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } - if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_v11 > 0 || soap_flag_v21 > 0 || soap_flag_v31 > 0 || soap_flag_v41 > 0 || soap_flag_arch1 > 0)) - { soap->error = SOAP_OCCURS; - return NULL; - } return a; } -int ns1__ClientLib::soap_put(struct soap *soap, const char *tag, const char *type) const +int _ns1__UploadAdditionalInfo::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__ClientLib); - if (this->soap_out(soap, tag?tag:"ns1:ClientLib", id, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadAdditionalInfo); + if (this->soap_out(soap, tag?tag:"ns1:UploadAdditionalInfo", id, type)) return soap->error; return soap_putindependent(soap); } -void *ns1__ClientLib::soap_get(struct soap *soap, const char *tag, const char *type) +void *_ns1__UploadAdditionalInfo::soap_get(struct soap *soap, const char *tag, const char *type) { - return soap_get_ns1__ClientLib(soap, this, tag, type); + return soap_get__ns1__UploadAdditionalInfo(soap, this, tag, type); } -SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_get_ns1__ClientLib(struct soap *soap, ns1__ClientLib *p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *p, const char *tag, const char *type) { - if ((p = soap_in_ns1__ClientLib(soap, tag, p, type))) + if ((p = soap_in__ns1__UploadAdditionalInfo(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 ns1__ClientLib * SOAP_FMAC2 soap_instantiate_ns1__ClientLib(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 _ns1__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfo(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_ns1__ClientLib(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__ClientLib, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadAdditionalInfo, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(ns1__ClientLib); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadAdditionalInfo); if (size) - *size = sizeof(ns1__ClientLib); - ((ns1__ClientLib*)cp->ptr)->soap = soap; + *size = sizeof(_ns1__UploadAdditionalInfo); + ((_ns1__UploadAdditionalInfo*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(ns1__ClientLib[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadAdditionalInfo, n); if (size) - *size = n * sizeof(ns1__ClientLib); - for (int i = 0; i < n; i++) - ((ns1__ClientLib*)cp->ptr)[i].soap = soap; + *size = n * sizeof(_ns1__UploadAdditionalInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadAdditionalInfo*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (ns1__ClientLib*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadAdditionalInfo*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ClientLib(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfo(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 ns1__ClientLib %p -> %p\n", q, p)); - *(ns1__ClientLib*)p = *(ns1__ClientLib*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadAdditionalInfo %p -> %p\n", q, p)); + *(_ns1__UploadAdditionalInfo*)p = *(_ns1__UploadAdditionalInfo*)q; } -#ifndef WITH_NOGLOBAL +void _ns1__UploadFullDumpResponse::soap_default(struct soap *soap) +{ + this->soap = soap; + this->_ns1__UploadFullDumpResponse::UploadFullDumpResult = NULL; + /* transient soap skipped */ +} -SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *a) +void _ns1__UploadFullDumpResponse::soap_serialize(struct soap *soap) const { - (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; +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTons1__Response(soap, &this->_ns1__UploadFullDumpResponse::UploadFullDumpResult); + /* transient soap skipped */ +#endif } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a) +int _ns1__UploadFullDumpResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - (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); + return soap_out__ns1__UploadFullDumpResponse(soap, tag, id, this, type); } -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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadFullDumpResponse(struct soap *soap, const char *tag, int id, const _ns1__UploadFullDumpResponse *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, "")) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadFullDumpResponse), type)) return soap->error; - if (soap_out_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", -1, &a->SOAP_ENV__Detail, "")) + if (a->UploadFullDumpResult) + soap_element_result(soap, "ns1:UploadFullDumpResult"); + if (soap_out_PointerTons1__Response(soap, "ns1:UploadFullDumpResult", -1, &(a->_ns1__UploadFullDumpResponse::UploadFullDumpResult), "")) return soap->error; + /* transient soap skipped */ 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) +void *_ns1__UploadFullDumpResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadFullDumpResponse(soap, tag, this, type); +} + +SOAP_FMAC3 _ns1__UploadFullDumpResponse * SOAP_FMAC4 soap_in__ns1__UploadFullDumpResponse(struct soap *soap, const char *tag, _ns1__UploadFullDumpResponse *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)) + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) 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); + a = (_ns1__UploadFullDumpResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadFullDumpResponse, sizeof(_ns1__UploadFullDumpResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default_SOAP_ENV__Fault(soap, a); + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE__ns1__UploadFullDumpResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (_ns1__UploadFullDumpResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag_UploadFullDumpResult1 = 1; 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--; + if (soap_flag_UploadFullDumpResult1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Response(soap, "ns1:UploadFullDumpResult", &(a->_ns1__UploadFullDumpResponse::UploadFullDumpResult), "ns1:Response")) + { soap_flag_UploadFullDumpResult1--; continue; } + /* transient soap skipped */ + soap_check_result(soap, "ns1:UploadFullDumpResult"); if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -3840,106 +4755,170 @@ SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct so 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); + { a = (_ns1__UploadFullDumpResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadFullDumpResponse, 0, sizeof(_ns1__UploadFullDumpResponse), 0, soap_copy__ns1__UploadFullDumpResponse); 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) +int _ns1__UploadFullDumpResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - 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)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadFullDumpResponse); + if (this->soap_out(soap, tag?tag:"ns1:UploadFullDumpResponse", id, 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) +void *_ns1__UploadFullDumpResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in_SOAP_ENV__Fault(soap, tag, p, type))) + return soap_get__ns1__UploadFullDumpResponse(soap, this, tag, type); +} + +SOAP_FMAC3 _ns1__UploadFullDumpResponse * SOAP_FMAC4 soap_get__ns1__UploadFullDumpResponse(struct soap *soap, _ns1__UploadFullDumpResponse *p, const char *tag, const char *type) +{ + if ((p = soap_in__ns1__UploadFullDumpResponse(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) +SOAP_FMAC1 _ns1__UploadFullDumpResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadFullDumpResponse(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); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadFullDumpResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadFullDumpResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadFullDumpResponse); if (size) - *size = sizeof(struct SOAP_ENV__Fault); + *size = sizeof(_ns1__UploadFullDumpResponse); + ((_ns1__UploadFullDumpResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadFullDumpResponse, n); if (size) - *size = n * sizeof(struct SOAP_ENV__Fault); + *size = n * sizeof(_ns1__UploadFullDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadFullDumpResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct SOAP_ENV__Fault*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadFullDumpResponse*)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) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadFullDumpResponse(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; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadFullDumpResponse %p -> %p\n", q, p)); + *(_ns1__UploadFullDumpResponse*)p = *(_ns1__UploadFullDumpResponse*)q; } -#endif - -#ifndef WITH_NOGLOBAL +void _ns1__UploadFullDump::soap_default(struct soap *soap) +{ + this->soap = soap; + this->_ns1__UploadFullDump::client = NULL; + this->_ns1__UploadFullDump::app = NULL; + this->_ns1__UploadFullDump::miniDumpID = NULL; + this->_ns1__UploadFullDump::dumpInZip = NULL; + this->_ns1__UploadFullDump::context = NULL; + /* transient soap skipped */ +} -SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *a) +void _ns1__UploadFullDump::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_default_string(soap, &a->SOAP_ENV__Text); +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__UploadFullDump::client); + soap_serialize_PointerTons1__Application(soap, &this->_ns1__UploadFullDump::app); + soap_serialize_PointerToint(soap, &this->_ns1__UploadFullDump::miniDumpID); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadFullDump::dumpInZip); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadFullDump::context); + /* transient soap skipped */ +#endif } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a) +int _ns1__UploadFullDump::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_string(soap, &a->SOAP_ENV__Text); + return soap_out__ns1__UploadFullDump(soap, tag, id, this, type); } -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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadFullDump(struct soap *soap, const char *tag, int id, const _ns1__UploadFullDump *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Reason), type)) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadFullDump), 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, "")) + if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__UploadFullDump::client), "")) + return soap->error; + if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__UploadFullDump::app), "")) return soap->error; + if (soap_out_PointerToint(soap, "ns1:miniDumpID", -1, &(a->_ns1__UploadFullDump::miniDumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:dumpInZip", -1, &(a->_ns1__UploadFullDump::dumpInZip), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->_ns1__UploadFullDump::context), "")) + return soap->error; + /* transient soap skipped */ 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) +void *_ns1__UploadFullDump::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadFullDump(soap, tag, this, type); +} + +SOAP_FMAC3 _ns1__UploadFullDump * SOAP_FMAC4 soap_in__ns1__UploadFullDump(struct soap *soap, const char *tag, _ns1__UploadFullDump *a, const char *type) { - size_t soap_flag_SOAP_ENV__Text = 1; - if (soap_element_begin_in(soap, tag, 0, type)) + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) 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); + a = (_ns1__UploadFullDump *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadFullDump, sizeof(_ns1__UploadFullDump), soap->type, soap->arrayType); if (!a) return NULL; - soap_default_SOAP_ENV__Reason(soap, a); + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE__ns1__UploadFullDump) + { soap_revert(soap); + *soap->id = '\0'; + return (_ns1__UploadFullDump *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag_client1 = 1; + size_t soap_flag_app1 = 1; + size_t soap_flag_miniDumpID1 = 1; + size_t soap_flag_dumpInZip1 = 1; + size_t soap_flag_context1 = 1; 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--; + if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__UploadFullDump::client), "ns1:ClientLib")) + { soap_flag_client1--; + continue; + } + if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__UploadFullDump::app), "ns1:Application")) + { soap_flag_app1--; + continue; + } + if (soap_flag_miniDumpID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:miniDumpID", &(a->_ns1__UploadFullDump::miniDumpID), "xsd:int")) + { soap_flag_miniDumpID1--; + continue; + } + if (soap_flag_dumpInZip1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:dumpInZip", &(a->_ns1__UploadFullDump::dumpInZip), "")) + { soap_flag_dumpInZip1--; + continue; + } + if (soap_flag_context1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->_ns1__UploadFullDump::context), "")) + { soap_flag_context1--; continue; } + /* transient soap skipped */ if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -3951,113 +4930,133 @@ SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct 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); + { a = (_ns1__UploadFullDump *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadFullDump, 0, sizeof(_ns1__UploadFullDump), 0, soap_copy__ns1__UploadFullDump); 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) +int _ns1__UploadFullDump::soap_put(struct soap *soap, const char *tag, const char *type) const { - 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)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadFullDump); + if (this->soap_out(soap, tag?tag:"ns1:UploadFullDump", id, 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) +void *_ns1__UploadFullDump::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in_SOAP_ENV__Reason(soap, tag, p, type))) + return soap_get__ns1__UploadFullDump(soap, this, tag, type); +} + +SOAP_FMAC3 _ns1__UploadFullDump * SOAP_FMAC4 soap_get__ns1__UploadFullDump(struct soap *soap, _ns1__UploadFullDump *p, const char *tag, const char *type) +{ + if ((p = soap_in__ns1__UploadFullDump(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) +SOAP_FMAC1 _ns1__UploadFullDump * SOAP_FMAC2 soap_instantiate__ns1__UploadFullDump(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); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadFullDump(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadFullDump, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadFullDump); if (size) - *size = sizeof(struct SOAP_ENV__Reason); + *size = sizeof(_ns1__UploadFullDump); + ((_ns1__UploadFullDump*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadFullDump, n); if (size) - *size = n * sizeof(struct SOAP_ENV__Reason); + *size = n * sizeof(_ns1__UploadFullDump); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadFullDump*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct SOAP_ENV__Reason*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadFullDump*)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) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadFullDump(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; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadFullDump %p -> %p\n", q, p)); + *(_ns1__UploadFullDump*)p = *(_ns1__UploadFullDump*)q; } -#endif - -#ifndef WITH_NOGLOBAL +void _ns1__UploadMiniDumpResponse::soap_default(struct soap *soap) +{ + this->soap = soap; + this->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult = NULL; + /* transient soap skipped */ +} -SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *a) +void _ns1__UploadMiniDumpResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->__type = 0; - a->fault = NULL; - a->__any = NULL; +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTons1__Response(soap, &this->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult); + /* transient soap skipped */ +#endif } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a) +int _ns1__UploadMiniDumpResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_markelement(soap, a->fault, a->__type); + return soap_out__ns1__UploadMiniDumpResponse(soap, tag, id, this, 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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, int id, const _ns1__UploadMiniDumpResponse *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Detail), type)) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadMiniDumpResponse), type)) return soap->error; - if (soap_putelement(soap, a->fault, "fault", -1, a->__type)) + if (a->UploadMiniDumpResult) + soap_element_result(soap, "ns1:UploadMiniDumpResult"); + if (soap_out_PointerTons1__Response(soap, "ns1:UploadMiniDumpResult", -1, &(a->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult), "")) return soap->error; - soap_outliteral(soap, "-any", &a->__any, NULL); + /* transient soap skipped */ 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) +void *_ns1__UploadMiniDumpResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadMiniDumpResponse(soap, tag, this, type); +} + +SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_in__ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, _ns1__UploadMiniDumpResponse *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)) + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) 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); + a = (_ns1__UploadMiniDumpResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadMiniDumpResponse, sizeof(_ns1__UploadMiniDumpResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default_SOAP_ENV__Detail(soap, a); + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE__ns1__UploadMiniDumpResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (_ns1__UploadMiniDumpResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag_UploadMiniDumpResult1 = 1; 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--; + if (soap_flag_UploadMiniDumpResult1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Response(soap, "ns1:UploadMiniDumpResult", &(a->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult), "ns1:Response")) + { soap_flag_UploadMiniDumpResult1--; continue; } + /* transient soap skipped */ + soap_check_result(soap, "ns1:UploadMiniDumpResult"); if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -4069,115 +5068,170 @@ SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct 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); + { a = (_ns1__UploadMiniDumpResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadMiniDumpResponse, 0, sizeof(_ns1__UploadMiniDumpResponse), 0, soap_copy__ns1__UploadMiniDumpResponse); 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) +int _ns1__UploadMiniDumpResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - 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)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadMiniDumpResponse); + if (this->soap_out(soap, tag?tag:"ns1:UploadMiniDumpResponse", id, 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) +void *_ns1__UploadMiniDumpResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in_SOAP_ENV__Detail(soap, tag, p, type))) + return soap_get__ns1__UploadMiniDumpResponse(soap, this, tag, type); +} + +SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_get__ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse *p, const char *tag, const char *type) +{ + if ((p = soap_in__ns1__UploadMiniDumpResponse(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) +SOAP_FMAC1 _ns1__UploadMiniDumpResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDumpResponse(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); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadMiniDumpResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadMiniDumpResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadMiniDumpResponse); if (size) - *size = sizeof(struct SOAP_ENV__Detail); + *size = sizeof(_ns1__UploadMiniDumpResponse); + ((_ns1__UploadMiniDumpResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadMiniDumpResponse, n); if (size) - *size = n * sizeof(struct SOAP_ENV__Detail); + *size = n * sizeof(_ns1__UploadMiniDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadMiniDumpResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct SOAP_ENV__Detail*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadMiniDumpResponse*)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) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDumpResponse(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; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadMiniDumpResponse %p -> %p\n", q, p)); + *(_ns1__UploadMiniDumpResponse*)p = *(_ns1__UploadMiniDumpResponse*)q; } -#endif - -#ifndef WITH_NOGLOBAL +void _ns1__UploadMiniDump::soap_default(struct soap *soap) +{ + this->soap = soap; + this->_ns1__UploadMiniDump::client = NULL; + this->_ns1__UploadMiniDump::app = NULL; + this->_ns1__UploadMiniDump::addInfo = NULL; + this->_ns1__UploadMiniDump::dump = NULL; + this->_ns1__UploadMiniDump::context = NULL; + /* transient soap skipped */ +} -SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *a) +void _ns1__UploadMiniDump::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_default__QName(soap, &a->SOAP_ENV__Value); - a->SOAP_ENV__Subcode = NULL; +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__UploadMiniDump::client); + soap_serialize_PointerTons1__Application(soap, &this->_ns1__UploadMiniDump::app); + soap_serialize_PointerTons1__DumpAdditionalInfo(soap, &this->_ns1__UploadMiniDump::addInfo); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadMiniDump::dump); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__UploadMiniDump::context); + /* transient soap skipped */ +#endif } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a) +int _ns1__UploadMiniDump::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - (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); + return soap_out__ns1__UploadMiniDump(soap, tag, id, this, type); } -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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDump(struct soap *soap, const char *tag, int id, const _ns1__UploadMiniDump *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)) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__UploadMiniDump), type)) return soap->error; - if (soap_out__QName(soap, "SOAP-ENV:Value", -1, (char*const*)&soap_tmp_SOAP_ENV__Value, "")) + if (soap_out_PointerTons1__ClientLib(soap, "ns1:client", -1, &(a->_ns1__UploadMiniDump::client), "")) return soap->error; - if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", -1, &a->SOAP_ENV__Subcode, "")) + if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__UploadMiniDump::app), "")) + return soap->error; + if (soap_out_PointerTons1__DumpAdditionalInfo(soap, "ns1:addInfo", -1, &(a->_ns1__UploadMiniDump::addInfo), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:dump", -1, &(a->_ns1__UploadMiniDump::dump), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->_ns1__UploadMiniDump::context), "")) return soap->error; + /* transient soap skipped */ 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) +void *_ns1__UploadMiniDump::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__UploadMiniDump(soap, tag, this, type); +} + +SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_in__ns1__UploadMiniDump(struct soap *soap, const char *tag, _ns1__UploadMiniDump *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)) + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) 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); + a = (_ns1__UploadMiniDump *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__UploadMiniDump, sizeof(_ns1__UploadMiniDump), soap->type, soap->arrayType); if (!a) return NULL; - soap_default_SOAP_ENV__Code(soap, a); + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE__ns1__UploadMiniDump) + { soap_revert(soap); + *soap->id = '\0'; + return (_ns1__UploadMiniDump *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag_client1 = 1; + size_t soap_flag_app1 = 1; + size_t soap_flag_addInfo1 = 1; + size_t soap_flag_dump1 = 1; + size_t soap_flag_context1 = 1; 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--; + if (soap_flag_client1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__ClientLib(soap, "ns1:client", &(a->_ns1__UploadMiniDump::client), "ns1:ClientLib")) + { soap_flag_client1--; 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--; + if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__UploadMiniDump::app), "ns1:Application")) + { soap_flag_app1--; + continue; + } + if (soap_flag_addInfo1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__DumpAdditionalInfo(soap, "ns1:addInfo", &(a->_ns1__UploadMiniDump::addInfo), "ns1:DumpAdditionalInfo")) + { soap_flag_addInfo1--; + continue; + } + if (soap_flag_dump1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:dump", &(a->_ns1__UploadMiniDump::dump), "")) + { soap_flag_dump1--; + continue; + } + if (soap_flag_context1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->_ns1__UploadMiniDump::context), "")) + { soap_flag_context1--; continue; } + /* transient soap skipped */ if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -4189,94 +5243,133 @@ SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap 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); + { a = (_ns1__UploadMiniDump *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__UploadMiniDump, 0, sizeof(_ns1__UploadMiniDump), 0, soap_copy__ns1__UploadMiniDump); 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) +int _ns1__UploadMiniDump::soap_put(struct soap *soap, const char *tag, const char *type) const { - 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)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__UploadMiniDump); + if (this->soap_out(soap, tag?tag:"ns1:UploadMiniDump", id, 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) +void *_ns1__UploadMiniDump::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in_SOAP_ENV__Code(soap, tag, p, type))) + return soap_get__ns1__UploadMiniDump(soap, this, tag, type); +} + +SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_get__ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *p, const char *tag, const char *type) +{ + if ((p = soap_in__ns1__UploadMiniDump(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) +SOAP_FMAC1 _ns1__UploadMiniDump * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDump(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); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__UploadMiniDump(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__UploadMiniDump, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code); + { cp->ptr = (void*)SOAP_NEW(_ns1__UploadMiniDump); if (size) - *size = sizeof(struct SOAP_ENV__Code); + *size = sizeof(_ns1__UploadMiniDump); + ((_ns1__UploadMiniDump*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__UploadMiniDump, n); if (size) - *size = n * sizeof(struct SOAP_ENV__Code); + *size = n * sizeof(_ns1__UploadMiniDump); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__UploadMiniDump*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct SOAP_ENV__Code*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__UploadMiniDump*)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) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDump(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; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__UploadMiniDump %p -> %p\n", q, p)); + *(_ns1__UploadMiniDump*)p = *(_ns1__UploadMiniDump*)q; } -#endif - -#ifndef WITH_NOGLOBAL +void _ns1__HelloResponse::soap_default(struct soap *soap) +{ + this->soap = soap; + this->_ns1__HelloResponse::HelloResult = NULL; + /* transient soap skipped */ +} -SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *a) +void _ns1__HelloResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTons1__Response(soap, &this->_ns1__HelloResponse::HelloResult); + /* transient soap skipped */ +#endif } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a) +int _ns1__HelloResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - (void)soap; (void)a; /* appease -Wall -Werror */ + return soap_out__ns1__HelloResponse(soap, tag, id, this, type); } -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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__HelloResponse(struct soap *soap, const char *tag, int id, const _ns1__HelloResponse *a, const char *type) { - if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Header), type)) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__HelloResponse), type)) + return soap->error; + if (a->HelloResult) + soap_element_result(soap, "ns1:HelloResult"); + if (soap_out_PointerTons1__Response(soap, "ns1:HelloResult", -1, &(a->_ns1__HelloResponse::HelloResult), "")) return soap->error; + /* transient soap skipped */ 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) +void *_ns1__HelloResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__HelloResponse(soap, tag, this, type); +} + +SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_in__ns1__HelloResponse(struct soap *soap, const char *tag, _ns1__HelloResponse *a, const char *type) { - if (soap_element_begin_in(soap, tag, 0, type)) + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) 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); + a = (_ns1__HelloResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__HelloResponse, sizeof(_ns1__HelloResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default_SOAP_ENV__Header(soap, a); + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE__ns1__HelloResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (_ns1__HelloResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag_HelloResult1 = 1; if (soap->body && !*soap->href) { for (;;) { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_HelloResult1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Response(soap, "ns1:HelloResult", &(a->_ns1__HelloResponse::HelloResult), "ns1:Response")) + { soap_flag_HelloResult1--; + continue; + } + /* transient soap skipped */ + soap_check_result(soap, "ns1:HelloResult"); if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) @@ -4288,1140 +5381,8945 @@ SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct 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); + { a = (_ns1__HelloResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__HelloResponse, 0, sizeof(_ns1__HelloResponse), 0, soap_copy__ns1__HelloResponse); 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) +int _ns1__HelloResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - 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)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__HelloResponse); + if (this->soap_out(soap, tag?tag:"ns1:HelloResponse", id, 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) +void *_ns1__HelloResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in_SOAP_ENV__Header(soap, tag, p, type))) + return soap_get__ns1__HelloResponse(soap, this, tag, type); +} + +SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_get__ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse *p, const char *tag, const char *type) +{ + if ((p = soap_in__ns1__HelloResponse(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) +SOAP_FMAC1 _ns1__HelloResponse * SOAP_FMAC2 soap_instantiate__ns1__HelloResponse(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); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__HelloResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__HelloResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header); + { cp->ptr = (void*)SOAP_NEW(_ns1__HelloResponse); if (size) - *size = sizeof(struct SOAP_ENV__Header); + *size = sizeof(_ns1__HelloResponse); + ((_ns1__HelloResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__HelloResponse, n); if (size) - *size = n * sizeof(struct SOAP_ENV__Header); + *size = n * sizeof(_ns1__HelloResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__HelloResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct SOAP_ENV__Header*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__HelloResponse*)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) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__HelloResponse(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; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__HelloResponse %p -> %p\n", q, p)); + *(_ns1__HelloResponse*)p = *(_ns1__HelloResponse*)q; } -#endif +void _ns1__Hello::soap_default(struct soap *soap) +{ + this->soap = soap; + this->_ns1__Hello::clientLib = NULL; + this->_ns1__Hello::app = NULL; + this->_ns1__Hello::appAddInfo = NULL; + this->_ns1__Hello::addInfo = NULL; + this->_ns1__Hello::availableSymbols = NULL; + this->_ns1__Hello::stack = NULL; + /* transient soap skipped */ +} -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__UploadSymbol(struct soap *soap, struct __ns4__UploadSymbol *a) +void _ns1__Hello::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__UploadSymbol = NULL; +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTons1__ClientLib(soap, &this->_ns1__Hello::clientLib); + soap_serialize_PointerTons1__Application(soap, &this->_ns1__Hello::app); + soap_serialize_PointerTons1__AppAdditionalInfo(soap, &this->_ns1__Hello::appAddInfo); + soap_serialize_PointerTons1__DumpAdditionalInfo(soap, &this->_ns1__Hello::addInfo); + soap_serialize_PointerTons1__ArrayOfModuleSymbolInfo(soap, &this->_ns1__Hello::availableSymbols); + soap_serialize_PointerTo_xop__Include(soap, &this->_ns1__Hello::stack); + /* transient soap skipped */ +#endif } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__UploadSymbol(struct soap *soap, const struct __ns4__UploadSymbol *a) +int _ns1__Hello::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__UploadSymbol(soap, &a->ns1__UploadSymbol); + return soap_out__ns1__Hello(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__UploadSymbol(struct soap *soap, const char *tag, int id, const struct __ns4__UploadSymbol *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__Hello(struct soap *soap, const char *tag, int id, const _ns1__Hello *a, const char *type) { - if (soap_out_PointerTo_ns1__UploadSymbol(soap, "ns1:UploadSymbol", -1, &a->ns1__UploadSymbol, "")) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE__ns1__Hello), type)) return soap->error; - return SOAP_OK; + if (soap_out_PointerTons1__ClientLib(soap, "ns1:clientLib", -1, &(a->_ns1__Hello::clientLib), "")) + return soap->error; + if (soap_out_PointerTons1__Application(soap, "ns1:app", -1, &(a->_ns1__Hello::app), "")) + return soap->error; + if (soap_out_PointerTons1__AppAdditionalInfo(soap, "ns1:appAddInfo", -1, &(a->_ns1__Hello::appAddInfo), "")) + return soap->error; + if (soap_out_PointerTons1__DumpAdditionalInfo(soap, "ns1:addInfo", -1, &(a->_ns1__Hello::addInfo), "")) + return soap->error; + if (soap_out_PointerTons1__ArrayOfModuleSymbolInfo(soap, "ns1:availableSymbols", -1, &(a->_ns1__Hello::availableSymbols), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:stack", -1, &(a->_ns1__Hello::stack), "")) + return soap->error; + /* transient soap skipped */ + return soap_element_end_out(soap, tag); +} + +void *_ns1__Hello::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in__ns1__Hello(soap, tag, this, type); } -SOAP_FMAC3 struct __ns4__UploadSymbol * SOAP_FMAC4 soap_in___ns4__UploadSymbol(struct soap *soap, const char *tag, struct __ns4__UploadSymbol *a, const char *type) +SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_in__ns1__Hello(struct soap *soap, const char *tag, _ns1__Hello *a, const char *type) { - size_t soap_flag_ns1__UploadSymbol = 1; - short soap_flag; - a = (struct __ns4__UploadSymbol *)soap_id_enter(soap, "", a, SOAP_TYPE___ns4__UploadSymbol, sizeof(struct __ns4__UploadSymbol), 0, NULL, NULL, NULL); + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (_ns1__Hello *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE__ns1__Hello, sizeof(_ns1__Hello), soap->type, soap->arrayType); if (!a) return NULL; - soap_default___ns4__UploadSymbol(soap, a); - for (soap_flag = 0;; soap_flag = 1) + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE__ns1__Hello) + { soap_revert(soap); + *soap->id = '\0'; + return (_ns1__Hello *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag_clientLib1 = 1; + size_t soap_flag_app1 = 1; + size_t soap_flag_appAddInfo1 = 1; + size_t soap_flag_addInfo1 = 1; + size_t soap_flag_availableSymbols1 = 1; + size_t soap_flag_stack1 = 1; + if (soap->body && !*soap->href) + { + for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__UploadSymbol && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__UploadSymbol(soap, "ns1:UploadSymbol", &a->ns1__UploadSymbol, "")) - { soap_flag_ns1__UploadSymbol--; + if (soap_flag_clientLib1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__ClientLib(soap, "ns1:clientLib", &(a->_ns1__Hello::clientLib), "ns1:ClientLib")) + { soap_flag_clientLib1--; continue; } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; + if (soap_flag_app1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Application(soap, "ns1:app", &(a->_ns1__Hello::app), "ns1:Application")) + { soap_flag_app1--; + continue; + } + if (soap_flag_appAddInfo1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__AppAdditionalInfo(soap, "ns1:appAddInfo", &(a->_ns1__Hello::appAddInfo), "ns1:AppAdditionalInfo")) + { soap_flag_appAddInfo1--; + continue; + } + if (soap_flag_addInfo1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__DumpAdditionalInfo(soap, "ns1:addInfo", &(a->_ns1__Hello::addInfo), "ns1:DumpAdditionalInfo")) + { soap_flag_addInfo1--; + continue; + } + if (soap_flag_availableSymbols1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__ArrayOfModuleSymbolInfo(soap, "ns1:availableSymbols", &(a->_ns1__Hello::availableSymbols), "ns1:ArrayOfModuleSymbolInfo")) + { soap_flag_availableSymbols1--; + continue; + } + if (soap_flag_stack1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:stack", &(a->_ns1__Hello::stack), "")) + { soap_flag_stack1--; + continue; } + /* transient soap 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 = (_ns1__Hello *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__ns1__Hello, 0, sizeof(_ns1__Hello), 0, soap_copy__ns1__Hello); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__UploadSymbol(struct soap *soap, const struct __ns4__UploadSymbol *a, const char *tag, const char *type) +int _ns1__Hello::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = 0; - if (soap_out___ns4__UploadSymbol(soap, tag?tag:"-ns4:UploadSymbol", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE__ns1__Hello); + if (this->soap_out(soap, tag?tag:"ns1:Hello", id, type)) return soap->error; - return SOAP_OK; + return soap_putindependent(soap); } -SOAP_FMAC3 struct __ns4__UploadSymbol * SOAP_FMAC4 soap_get___ns4__UploadSymbol(struct soap *soap, struct __ns4__UploadSymbol *p, const char *tag, const char *type) +void *_ns1__Hello::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get__ns1__Hello(soap, this, tag, type); +} + +SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_get__ns1__Hello(struct soap *soap, _ns1__Hello *p, const char *tag, const char *type) { - if ((p = soap_in___ns4__UploadSymbol(soap, tag, p, type))) + if ((p = soap_in__ns1__Hello(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct __ns4__UploadSymbol * SOAP_FMAC2 soap_instantiate___ns4__UploadSymbol(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 _ns1__Hello * SOAP_FMAC2 soap_instantiate__ns1__Hello(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___ns4__UploadSymbol(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns4__UploadSymbol, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate__ns1__Hello(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__ns1__Hello, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns4__UploadSymbol); + { cp->ptr = (void*)SOAP_NEW(_ns1__Hello); if (size) - *size = sizeof(struct __ns4__UploadSymbol); + *size = sizeof(_ns1__Hello); + ((_ns1__Hello*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct __ns4__UploadSymbol[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(_ns1__Hello, n); if (size) - *size = n * sizeof(struct __ns4__UploadSymbol); + *size = n * sizeof(_ns1__Hello); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((_ns1__Hello*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns4__UploadSymbol*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (_ns1__Hello*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__UploadSymbol(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__Hello(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 __ns4__UploadSymbol %p -> %p\n", q, p)); - *(struct __ns4__UploadSymbol*)p = *(struct __ns4__UploadSymbol*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying _ns1__Hello %p -> %p\n", q, p)); + *(_ns1__Hello*)p = *(_ns1__Hello*)q; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__UploadAdditionalInfo(struct soap *soap, struct __ns4__UploadAdditionalInfo *a) +void ns1__NeedMoreInfoResponse::soap_default(struct soap *soap) { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__UploadAdditionalInfo = NULL; + this->soap = soap; + this->ns1__Response::soap_default(soap); + this->ns1__NeedMoreInfoResponse::infoModule = NULL; + this->ns1__NeedMoreInfoResponse::infoModuleCfg = NULL; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__UploadAdditionalInfo(struct soap *soap, const struct __ns4__UploadAdditionalInfo *a) +void ns1__NeedMoreInfoResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__UploadAdditionalInfo(soap, &a->ns1__UploadAdditionalInfo); +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTo_xop__Include(soap, &this->ns1__NeedMoreInfoResponse::infoModule); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__NeedMoreInfoResponse::infoModuleCfg); + this->ns1__Response::soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__UploadAdditionalInfo(struct soap *soap, const char *tag, int id, const struct __ns4__UploadAdditionalInfo *a, const char *type) +int ns1__NeedMoreInfoResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - if (soap_out_PointerTo_ns1__UploadAdditionalInfo(soap, "ns1:UploadAdditionalInfo", -1, &a->ns1__UploadAdditionalInfo, "")) + return soap_out_ns1__NeedMoreInfoResponse(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedMoreInfoResponse(struct soap *soap, const char *tag, int id, const ns1__NeedMoreInfoResponse *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__NeedMoreInfoResponse), "ns1:NeedMoreInfoResponse")) return soap->error; - return SOAP_OK; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:infoModule", -1, &(a->ns1__NeedMoreInfoResponse::infoModule), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:infoModuleCfg", -1, &(a->ns1__NeedMoreInfoResponse::infoModuleCfg), "")) + return soap->error; + return soap_element_end_out(soap, tag); } -SOAP_FMAC3 struct __ns4__UploadAdditionalInfo * SOAP_FMAC4 soap_in___ns4__UploadAdditionalInfo(struct soap *soap, const char *tag, struct __ns4__UploadAdditionalInfo *a, const char *type) +void *ns1__NeedMoreInfoResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__NeedMoreInfoResponse(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__NeedMoreInfoResponse * SOAP_FMAC4 soap_in_ns1__NeedMoreInfoResponse(struct soap *soap, const char *tag, ns1__NeedMoreInfoResponse *a, const char *type) { - size_t soap_flag_ns1__UploadAdditionalInfo = 1; - short soap_flag; - a = (struct __ns4__UploadAdditionalInfo *)soap_id_enter(soap, "", a, SOAP_TYPE___ns4__UploadAdditionalInfo, sizeof(struct __ns4__UploadAdditionalInfo), 0, NULL, NULL, NULL); + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__NeedMoreInfoResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__NeedMoreInfoResponse, sizeof(ns1__NeedMoreInfoResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default___ns4__UploadAdditionalInfo(soap, a); - for (soap_flag = 0;; soap_flag = 1) + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__NeedMoreInfoResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__NeedMoreInfoResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item3 = 1; + size_t soap_flag_clientID2 = 1; + size_t soap_flag_context2 = 1; + size_t soap_flag_dumpGroupID2 = 1; + size_t soap_flag_dumpID2 = 1; + size_t soap_flag_garbage2 = 1; + size_t soap_flag_problemID2 = 1; + size_t soap_flag_urlToProblem2 = 1; + size_t soap_flag_infoModule1 = 1; + size_t soap_flag_infoModuleCfg1 = 1; + if (soap->body && !*soap->href) + { + for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__UploadAdditionalInfo && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__UploadAdditionalInfo(soap, "ns1:UploadAdditionalInfo", &a->ns1__UploadAdditionalInfo, "")) - { soap_flag_ns1__UploadAdditionalInfo--; + /* transient soap skipped */ + if (soap_flag_clientID2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID2--; continue; } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; + if (soap_flag_context2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context2--; + continue; + } + if (soap_flag_dumpGroupID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID2--; + continue; + } + if (soap_flag_dumpID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID2--; + continue; + } + if (soap_flag_garbage2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage2--; + continue; + } + if (soap_flag_problemID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID2--; + continue; + } + if (soap_flag_urlToProblem2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem2--; + continue; } + if (soap_flag_infoModule1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:infoModule", &(a->ns1__NeedMoreInfoResponse::infoModule), "")) + { soap_flag_infoModule1--; + continue; + } + if (soap_flag_infoModuleCfg1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:infoModuleCfg", &(a->ns1__NeedMoreInfoResponse::infoModuleCfg), "xsd:string")) + { soap_flag_infoModuleCfg1--; + continue; + } + if (soap_flag___item3 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item3--; + 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; } - return a; -} - -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__UploadAdditionalInfo(struct soap *soap, const struct __ns4__UploadAdditionalInfo *a, const char *tag, const char *type) -{ - register int id = 0; - if (soap_out___ns4__UploadAdditionalInfo(soap, tag?tag:"-ns4:UploadAdditionalInfo", id, a, type)) - return soap->error; - return SOAP_OK; -} - -SOAP_FMAC3 struct __ns4__UploadAdditionalInfo * SOAP_FMAC4 soap_get___ns4__UploadAdditionalInfo(struct soap *soap, struct __ns4__UploadAdditionalInfo *p, const char *tag, const char *type) -{ - if ((p = soap_in___ns4__UploadAdditionalInfo(soap, tag, p, type))) - if (soap_getindependent(soap)) + if (soap_element_end_in(soap, tag)) return NULL; - return p; -} - -SOAP_FMAC1 struct __ns4__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns4__UploadAdditionalInfo(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___ns4__UploadAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns4__UploadAdditionalInfo, n, soap_fdelete); - if (!cp) - return NULL; - if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns4__UploadAdditionalInfo); - if (size) - *size = sizeof(struct __ns4__UploadAdditionalInfo); } else - { cp->ptr = (void*)SOAP_NEW(struct __ns4__UploadAdditionalInfo[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; + { a = (ns1__NeedMoreInfoResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__NeedMoreInfoResponse, 0, sizeof(ns1__NeedMoreInfoResponse), 0, soap_copy_ns1__NeedMoreInfoResponse); + if (soap->body && soap_element_end_in(soap, tag)) return NULL; - } - if (size) - *size = n * sizeof(struct __ns4__UploadAdditionalInfo); } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns4__UploadAdditionalInfo*)cp->ptr; -} - -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__UploadAdditionalInfo(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 __ns4__UploadAdditionalInfo %p -> %p\n", q, p)); - *(struct __ns4__UploadAdditionalInfo*)p = *(struct __ns4__UploadAdditionalInfo*)q; -} - -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__UploadMiniDump(struct soap *soap, struct __ns4__UploadMiniDump *a) -{ - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__UploadMiniDump = NULL; -} - -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__UploadMiniDump(struct soap *soap, const struct __ns4__UploadMiniDump *a) -{ - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__UploadMiniDump(soap, &a->ns1__UploadMiniDump); + return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__UploadMiniDump(struct soap *soap, const char *tag, int id, const struct __ns4__UploadMiniDump *a, const char *type) +int ns1__NeedMoreInfoResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - if (soap_out_PointerTo_ns1__UploadMiniDump(soap, "ns1:UploadMiniDump", -1, &a->ns1__UploadMiniDump, "")) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__NeedMoreInfoResponse); + if (this->soap_out(soap, tag?tag:"ns1:NeedMoreInfoResponse", id, type)) return soap->error; - return SOAP_OK; -} - -SOAP_FMAC3 struct __ns4__UploadMiniDump * SOAP_FMAC4 soap_in___ns4__UploadMiniDump(struct soap *soap, const char *tag, struct __ns4__UploadMiniDump *a, const char *type) -{ - size_t soap_flag_ns1__UploadMiniDump = 1; - short soap_flag; - a = (struct __ns4__UploadMiniDump *)soap_id_enter(soap, "", a, SOAP_TYPE___ns4__UploadMiniDump, sizeof(struct __ns4__UploadMiniDump), 0, NULL, NULL, NULL); - if (!a) - return NULL; - soap_default___ns4__UploadMiniDump(soap, a); - for (soap_flag = 0;; soap_flag = 1) - { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__UploadMiniDump && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__UploadMiniDump(soap, "ns1:UploadMiniDump", &a->ns1__UploadMiniDump, "")) - { soap_flag_ns1__UploadMiniDump--; - continue; - } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; - } - if (soap->error == SOAP_NO_TAG) - break; - if (soap->error) - return NULL; - } - return a; + return soap_putindependent(soap); } -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__UploadMiniDump(struct soap *soap, const struct __ns4__UploadMiniDump *a, const char *tag, const char *type) +void *ns1__NeedMoreInfoResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - register int id = 0; - if (soap_out___ns4__UploadMiniDump(soap, tag?tag:"-ns4:UploadMiniDump", id, a, type)) - return soap->error; - return SOAP_OK; + return soap_get_ns1__NeedMoreInfoResponse(soap, this, tag, type); } -SOAP_FMAC3 struct __ns4__UploadMiniDump * SOAP_FMAC4 soap_get___ns4__UploadMiniDump(struct soap *soap, struct __ns4__UploadMiniDump *p, const char *tag, const char *type) +SOAP_FMAC3 ns1__NeedMoreInfoResponse * SOAP_FMAC4 soap_get_ns1__NeedMoreInfoResponse(struct soap *soap, ns1__NeedMoreInfoResponse *p, const char *tag, const char *type) { - if ((p = soap_in___ns4__UploadMiniDump(soap, tag, p, type))) + if ((p = soap_in_ns1__NeedMoreInfoResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct __ns4__UploadMiniDump * SOAP_FMAC2 soap_instantiate___ns4__UploadMiniDump(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns1__NeedMoreInfoResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedMoreInfoResponse(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___ns4__UploadMiniDump(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns4__UploadMiniDump, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns1__NeedMoreInfoResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__NeedMoreInfoResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns4__UploadMiniDump); + { cp->ptr = (void*)SOAP_NEW(ns1__NeedMoreInfoResponse); if (size) - *size = sizeof(struct __ns4__UploadMiniDump); + *size = sizeof(ns1__NeedMoreInfoResponse); + ((ns1__NeedMoreInfoResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct __ns4__UploadMiniDump[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedMoreInfoResponse, n); if (size) - *size = n * sizeof(struct __ns4__UploadMiniDump); + *size = n * sizeof(ns1__NeedMoreInfoResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedMoreInfoResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns4__UploadMiniDump*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedMoreInfoResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__UploadMiniDump(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedMoreInfoResponse(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 __ns4__UploadMiniDump %p -> %p\n", q, p)); - *(struct __ns4__UploadMiniDump*)p = *(struct __ns4__UploadMiniDump*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__NeedMoreInfoResponse %p -> %p\n", q, p)); + *(ns1__NeedMoreInfoResponse*)p = *(ns1__NeedMoreInfoResponse*)q; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__Hello(struct soap *soap, struct __ns4__Hello *a) +void ns1__NeedFullDumpResponse::soap_default(struct soap *soap) { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__Hello = NULL; + this->soap = soap; + this->ns1__Response::soap_default(soap); + soap_default_bool(soap, &this->ns1__NeedFullDumpResponse::attachUserInfo); + soap_default_unsignedInt(soap, &this->ns1__NeedFullDumpResponse::restrictedDumpType); } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__Hello(struct soap *soap, const struct __ns4__Hello *a) +void ns1__NeedFullDumpResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__Hello(soap, &a->ns1__Hello); +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->ns1__NeedFullDumpResponse::attachUserInfo, SOAP_TYPE_bool); + this->ns1__Response::soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__Hello(struct soap *soap, const char *tag, int id, const struct __ns4__Hello *a, const char *type) +int ns1__NeedFullDumpResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - if (soap_out_PointerTo_ns1__Hello(soap, "ns1:Hello", -1, &a->ns1__Hello, "")) + return soap_out_ns1__NeedFullDumpResponse(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedFullDumpResponse(struct soap *soap, const char *tag, int id, const ns1__NeedFullDumpResponse *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__NeedFullDumpResponse), "ns1:NeedFullDumpResponse")) return soap->error; - return SOAP_OK; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) + return soap->error; + if (soap_out_bool(soap, "ns1:attachUserInfo", -1, &(a->ns1__NeedFullDumpResponse::attachUserInfo), "")) + return soap->error; + if (soap_out_unsignedInt(soap, "ns1:restrictedDumpType", -1, &(a->ns1__NeedFullDumpResponse::restrictedDumpType), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__NeedFullDumpResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__NeedFullDumpResponse(soap, tag, this, type); } -SOAP_FMAC3 struct __ns4__Hello * SOAP_FMAC4 soap_in___ns4__Hello(struct soap *soap, const char *tag, struct __ns4__Hello *a, const char *type) +SOAP_FMAC3 ns1__NeedFullDumpResponse * SOAP_FMAC4 soap_in_ns1__NeedFullDumpResponse(struct soap *soap, const char *tag, ns1__NeedFullDumpResponse *a, const char *type) { - size_t soap_flag_ns1__Hello = 1; - short soap_flag; - a = (struct __ns4__Hello *)soap_id_enter(soap, "", a, SOAP_TYPE___ns4__Hello, sizeof(struct __ns4__Hello), 0, NULL, NULL, NULL); + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__NeedFullDumpResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__NeedFullDumpResponse, sizeof(ns1__NeedFullDumpResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default___ns4__Hello(soap, a); - for (soap_flag = 0;; soap_flag = 1) + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__NeedFullDumpResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__NeedFullDumpResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item3 = 1; + size_t soap_flag_clientID2 = 1; + size_t soap_flag_context2 = 1; + size_t soap_flag_dumpGroupID2 = 1; + size_t soap_flag_dumpID2 = 1; + size_t soap_flag_garbage2 = 1; + size_t soap_flag_problemID2 = 1; + size_t soap_flag_urlToProblem2 = 1; + size_t soap_flag_attachUserInfo1 = 1; + size_t soap_flag_restrictedDumpType1 = 1; + if (soap->body && !*soap->href) + { + for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__Hello && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__Hello(soap, "ns1:Hello", &a->ns1__Hello, "")) - { soap_flag_ns1__Hello--; + /* transient soap skipped */ + if (soap_flag_clientID2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID2--; continue; } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; + if (soap_flag_context2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context2--; + continue; + } + if (soap_flag_dumpGroupID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID2--; + continue; + } + if (soap_flag_dumpID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID2--; + continue; } + if (soap_flag_garbage2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage2--; + continue; + } + if (soap_flag_problemID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID2--; + continue; + } + if (soap_flag_urlToProblem2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem2--; + continue; + } + if (soap_flag_attachUserInfo1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_bool(soap, "ns1:attachUserInfo", &(a->ns1__NeedFullDumpResponse::attachUserInfo), "xsd:boolean")) + { soap_flag_attachUserInfo1--; + continue; + } + if (soap_flag_restrictedDumpType1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedInt(soap, "ns1:restrictedDumpType", &(a->ns1__NeedFullDumpResponse::restrictedDumpType), "xsd:unsignedInt")) + { soap_flag_restrictedDumpType1--; + continue; + } + if (soap_flag___item3 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item3--; + 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 = (ns1__NeedFullDumpResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__NeedFullDumpResponse, 0, sizeof(ns1__NeedFullDumpResponse), 0, soap_copy_ns1__NeedFullDumpResponse); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_attachUserInfo1 > 0 || soap_flag_restrictedDumpType1 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__Hello(struct soap *soap, const struct __ns4__Hello *a, const char *tag, const char *type) +int ns1__NeedFullDumpResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = 0; - if (soap_out___ns4__Hello(soap, tag?tag:"-ns4:Hello", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__NeedFullDumpResponse); + if (this->soap_out(soap, tag?tag:"ns1:NeedFullDumpResponse", id, type)) return soap->error; - return SOAP_OK; + return soap_putindependent(soap); } -SOAP_FMAC3 struct __ns4__Hello * SOAP_FMAC4 soap_get___ns4__Hello(struct soap *soap, struct __ns4__Hello *p, const char *tag, const char *type) +void *ns1__NeedFullDumpResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in___ns4__Hello(soap, tag, p, type))) + return soap_get_ns1__NeedFullDumpResponse(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__NeedFullDumpResponse * SOAP_FMAC4 soap_get_ns1__NeedFullDumpResponse(struct soap *soap, ns1__NeedFullDumpResponse *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__NeedFullDumpResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct __ns4__Hello * SOAP_FMAC2 soap_instantiate___ns4__Hello(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns1__NeedFullDumpResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedFullDumpResponse(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___ns4__Hello(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns4__Hello, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns1__NeedFullDumpResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__NeedFullDumpResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns4__Hello); + { cp->ptr = (void*)SOAP_NEW(ns1__NeedFullDumpResponse); if (size) - *size = sizeof(struct __ns4__Hello); + *size = sizeof(ns1__NeedFullDumpResponse); + ((ns1__NeedFullDumpResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct __ns4__Hello[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedFullDumpResponse, n); if (size) - *size = n * sizeof(struct __ns4__Hello); + *size = n * sizeof(ns1__NeedFullDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedFullDumpResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns4__Hello*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedFullDumpResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__Hello(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedFullDumpResponse(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 __ns4__Hello %p -> %p\n", q, p)); - *(struct __ns4__Hello*)p = *(struct __ns4__Hello*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__NeedFullDumpResponse %p -> %p\n", q, p)); + *(ns1__NeedFullDumpResponse*)p = *(ns1__NeedFullDumpResponse*)q; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__UploadSymbol(struct soap *soap, struct __ns3__UploadSymbol *a) +void ns1__NeedMiniDumpResponse::soap_default(struct soap *soap) { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__UploadSymbol = NULL; + this->soap = soap; + this->ns1__Response::soap_default(soap); } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__UploadSymbol(struct soap *soap, const struct __ns3__UploadSymbol *a) +void ns1__NeedMiniDumpResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__UploadSymbol(soap, &a->ns1__UploadSymbol); +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->ns1__Response::soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__UploadSymbol(struct soap *soap, const char *tag, int id, const struct __ns3__UploadSymbol *a, const char *type) +int ns1__NeedMiniDumpResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - if (soap_out_PointerTo_ns1__UploadSymbol(soap, "ns1:UploadSymbol", -1, &a->ns1__UploadSymbol, "")) + return soap_out_ns1__NeedMiniDumpResponse(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedMiniDumpResponse(struct soap *soap, const char *tag, int id, const ns1__NeedMiniDumpResponse *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__NeedMiniDumpResponse), "ns1:NeedMiniDumpResponse")) return soap->error; - return SOAP_OK; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__NeedMiniDumpResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__NeedMiniDumpResponse(soap, tag, this, type); } -SOAP_FMAC3 struct __ns3__UploadSymbol * SOAP_FMAC4 soap_in___ns3__UploadSymbol(struct soap *soap, const char *tag, struct __ns3__UploadSymbol *a, const char *type) +SOAP_FMAC3 ns1__NeedMiniDumpResponse * SOAP_FMAC4 soap_in_ns1__NeedMiniDumpResponse(struct soap *soap, const char *tag, ns1__NeedMiniDumpResponse *a, const char *type) { - size_t soap_flag_ns1__UploadSymbol = 1; - short soap_flag; - a = (struct __ns3__UploadSymbol *)soap_id_enter(soap, "", a, SOAP_TYPE___ns3__UploadSymbol, sizeof(struct __ns3__UploadSymbol), 0, NULL, NULL, NULL); + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__NeedMiniDumpResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__NeedMiniDumpResponse, sizeof(ns1__NeedMiniDumpResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default___ns3__UploadSymbol(soap, a); - for (soap_flag = 0;; soap_flag = 1) + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__NeedMiniDumpResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__NeedMiniDumpResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item3 = 1; + size_t soap_flag_clientID2 = 1; + size_t soap_flag_context2 = 1; + size_t soap_flag_dumpGroupID2 = 1; + size_t soap_flag_dumpID2 = 1; + size_t soap_flag_garbage2 = 1; + size_t soap_flag_problemID2 = 1; + size_t soap_flag_urlToProblem2 = 1; + if (soap->body && !*soap->href) + { + for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__UploadSymbol && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__UploadSymbol(soap, "ns1:UploadSymbol", &a->ns1__UploadSymbol, "")) - { soap_flag_ns1__UploadSymbol--; + /* transient soap skipped */ + if (soap_flag_clientID2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID2--; continue; } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; + if (soap_flag_context2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context2--; + continue; + } + if (soap_flag_dumpGroupID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID2--; + continue; + } + if (soap_flag_dumpID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID2--; + continue; + } + if (soap_flag_garbage2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage2--; + continue; + } + if (soap_flag_problemID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID2--; + continue; + } + if (soap_flag_urlToProblem2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem2--; + continue; + } + if (soap_flag___item3 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item3--; + 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 = (ns1__NeedMiniDumpResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__NeedMiniDumpResponse, 0, sizeof(ns1__NeedMiniDumpResponse), 0, soap_copy_ns1__NeedMiniDumpResponse); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__UploadSymbol(struct soap *soap, const struct __ns3__UploadSymbol *a, const char *tag, const char *type) +int ns1__NeedMiniDumpResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = 0; - if (soap_out___ns3__UploadSymbol(soap, tag?tag:"-ns3:UploadSymbol", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__NeedMiniDumpResponse); + if (this->soap_out(soap, tag?tag:"ns1:NeedMiniDumpResponse", id, type)) return soap->error; - return SOAP_OK; + return soap_putindependent(soap); +} + +void *ns1__NeedMiniDumpResponse::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__NeedMiniDumpResponse(soap, this, tag, type); } -SOAP_FMAC3 struct __ns3__UploadSymbol * SOAP_FMAC4 soap_get___ns3__UploadSymbol(struct soap *soap, struct __ns3__UploadSymbol *p, const char *tag, const char *type) +SOAP_FMAC3 ns1__NeedMiniDumpResponse * SOAP_FMAC4 soap_get_ns1__NeedMiniDumpResponse(struct soap *soap, ns1__NeedMiniDumpResponse *p, const char *tag, const char *type) { - if ((p = soap_in___ns3__UploadSymbol(soap, tag, p, type))) + if ((p = soap_in_ns1__NeedMiniDumpResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct __ns3__UploadSymbol * SOAP_FMAC2 soap_instantiate___ns3__UploadSymbol(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns1__NeedMiniDumpResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedMiniDumpResponse(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___ns3__UploadSymbol(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns3__UploadSymbol, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns1__NeedMiniDumpResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__NeedMiniDumpResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns3__UploadSymbol); + { cp->ptr = (void*)SOAP_NEW(ns1__NeedMiniDumpResponse); if (size) - *size = sizeof(struct __ns3__UploadSymbol); + *size = sizeof(ns1__NeedMiniDumpResponse); + ((ns1__NeedMiniDumpResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct __ns3__UploadSymbol[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedMiniDumpResponse, n); if (size) - *size = n * sizeof(struct __ns3__UploadSymbol); + *size = n * sizeof(ns1__NeedMiniDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedMiniDumpResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns3__UploadSymbol*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedMiniDumpResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__UploadSymbol(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedMiniDumpResponse(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 __ns3__UploadSymbol %p -> %p\n", q, p)); - *(struct __ns3__UploadSymbol*)p = *(struct __ns3__UploadSymbol*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__NeedMiniDumpResponse %p -> %p\n", q, p)); + *(ns1__NeedMiniDumpResponse*)p = *(ns1__NeedMiniDumpResponse*)q; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__UploadAdditionalInfo(struct soap *soap, struct __ns3__UploadAdditionalInfo *a) +void ns1__NeedSymbolsThenMiniDumpResponse::soap_default(struct soap *soap) { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__UploadAdditionalInfo = NULL; + this->soap = soap; + this->ns1__Response::soap_default(soap); + soap_default_bool(soap, &this->ns1__NeedSymbolsThenMiniDumpResponse::askConfirmation); + this->ns1__NeedSymbolsThenMiniDumpResponse::msSymbols = NULL; + this->ns1__NeedSymbolsThenMiniDumpResponse::symbols = NULL; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__UploadAdditionalInfo(struct soap *soap, const struct __ns3__UploadAdditionalInfo *a) +void ns1__NeedSymbolsThenMiniDumpResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__UploadAdditionalInfo(soap, &a->ns1__UploadAdditionalInfo); +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->ns1__NeedSymbolsThenMiniDumpResponse::askConfirmation, SOAP_TYPE_bool); + soap_serialize_PointerTons5__ArrayOfstring(soap, &this->ns1__NeedSymbolsThenMiniDumpResponse::msSymbols); + soap_serialize_PointerTons5__ArrayOfstring(soap, &this->ns1__NeedSymbolsThenMiniDumpResponse::symbols); + this->ns1__Response::soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__UploadAdditionalInfo(struct soap *soap, const char *tag, int id, const struct __ns3__UploadAdditionalInfo *a, const char *type) +int ns1__NeedSymbolsThenMiniDumpResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - if (soap_out_PointerTo_ns1__UploadAdditionalInfo(soap, "ns1:UploadAdditionalInfo", -1, &a->ns1__UploadAdditionalInfo, "")) - return soap->error; - return SOAP_OK; + return soap_out_ns1__NeedSymbolsThenMiniDumpResponse(soap, tag, id, this, type); } -SOAP_FMAC3 struct __ns3__UploadAdditionalInfo * SOAP_FMAC4 soap_in___ns3__UploadAdditionalInfo(struct soap *soap, const char *tag, struct __ns3__UploadAdditionalInfo *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedSymbolsThenMiniDumpResponse(struct soap *soap, const char *tag, int id, const ns1__NeedSymbolsThenMiniDumpResponse *a, const char *type) { - size_t soap_flag_ns1__UploadAdditionalInfo = 1; - short soap_flag; - a = (struct __ns3__UploadAdditionalInfo *)soap_id_enter(soap, "", a, SOAP_TYPE___ns3__UploadAdditionalInfo, sizeof(struct __ns3__UploadAdditionalInfo), 0, NULL, NULL, NULL); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse), "ns1:NeedSymbolsThenMiniDumpResponse")) + return soap->error; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) + return soap->error; + if (soap_out_bool(soap, "ns1:askConfirmation", -1, &(a->ns1__NeedSymbolsThenMiniDumpResponse::askConfirmation), "")) + return soap->error; + if (soap_out_PointerTons5__ArrayOfstring(soap, "ns1:msSymbols", -1, &(a->ns1__NeedSymbolsThenMiniDumpResponse::msSymbols), "")) + return soap->error; + if (soap_out_PointerTons5__ArrayOfstring(soap, "ns1:symbols", -1, &(a->ns1__NeedSymbolsThenMiniDumpResponse::symbols), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__NeedSymbolsThenMiniDumpResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__NeedSymbolsThenMiniDumpResponse(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__NeedSymbolsThenMiniDumpResponse * SOAP_FMAC4 soap_in_ns1__NeedSymbolsThenMiniDumpResponse(struct soap *soap, const char *tag, ns1__NeedSymbolsThenMiniDumpResponse *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__NeedSymbolsThenMiniDumpResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse, sizeof(ns1__NeedSymbolsThenMiniDumpResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default___ns3__UploadAdditionalInfo(soap, a); - for (soap_flag = 0;; soap_flag = 1) + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__NeedSymbolsThenMiniDumpResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item3 = 1; + size_t soap_flag_clientID2 = 1; + size_t soap_flag_context2 = 1; + size_t soap_flag_dumpGroupID2 = 1; + size_t soap_flag_dumpID2 = 1; + size_t soap_flag_garbage2 = 1; + size_t soap_flag_problemID2 = 1; + size_t soap_flag_urlToProblem2 = 1; + size_t soap_flag_askConfirmation1 = 1; + size_t soap_flag_msSymbols1 = 1; + size_t soap_flag_symbols1 = 1; + if (soap->body && !*soap->href) + { + for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__UploadAdditionalInfo && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__UploadAdditionalInfo(soap, "ns1:UploadAdditionalInfo", &a->ns1__UploadAdditionalInfo, "")) - { soap_flag_ns1__UploadAdditionalInfo--; + /* transient soap skipped */ + if (soap_flag_clientID2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID2--; continue; } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; + if (soap_flag_context2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context2--; + continue; + } + if (soap_flag_dumpGroupID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID2--; + continue; + } + if (soap_flag_dumpID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID2--; + continue; + } + if (soap_flag_garbage2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage2--; + continue; + } + if (soap_flag_problemID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID2--; + continue; + } + if (soap_flag_urlToProblem2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem2--; + continue; + } + if (soap_flag_askConfirmation1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_bool(soap, "ns1:askConfirmation", &(a->ns1__NeedSymbolsThenMiniDumpResponse::askConfirmation), "xsd:boolean")) + { soap_flag_askConfirmation1--; + continue; + } + if (soap_flag_msSymbols1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons5__ArrayOfstring(soap, "ns1:msSymbols", &(a->ns1__NeedSymbolsThenMiniDumpResponse::msSymbols), "ns5:ArrayOfstring")) + { soap_flag_msSymbols1--; + continue; } + if (soap_flag_symbols1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons5__ArrayOfstring(soap, "ns1:symbols", &(a->ns1__NeedSymbolsThenMiniDumpResponse::symbols), "ns5:ArrayOfstring")) + { soap_flag_symbols1--; + continue; + } + if (soap_flag___item3 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item3--; + 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 = (ns1__NeedSymbolsThenMiniDumpResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse, 0, sizeof(ns1__NeedSymbolsThenMiniDumpResponse), 0, soap_copy_ns1__NeedSymbolsThenMiniDumpResponse); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_askConfirmation1 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__UploadAdditionalInfo(struct soap *soap, const struct __ns3__UploadAdditionalInfo *a, const char *tag, const char *type) +int ns1__NeedSymbolsThenMiniDumpResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = 0; - if (soap_out___ns3__UploadAdditionalInfo(soap, tag?tag:"-ns3:UploadAdditionalInfo", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse); + if (this->soap_out(soap, tag?tag:"ns1:NeedSymbolsThenMiniDumpResponse", id, type)) return soap->error; - return SOAP_OK; + return soap_putindependent(soap); +} + +void *ns1__NeedSymbolsThenMiniDumpResponse::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__NeedSymbolsThenMiniDumpResponse(soap, this, tag, type); } -SOAP_FMAC3 struct __ns3__UploadAdditionalInfo * SOAP_FMAC4 soap_get___ns3__UploadAdditionalInfo(struct soap *soap, struct __ns3__UploadAdditionalInfo *p, const char *tag, const char *type) +SOAP_FMAC3 ns1__NeedSymbolsThenMiniDumpResponse * SOAP_FMAC4 soap_get_ns1__NeedSymbolsThenMiniDumpResponse(struct soap *soap, ns1__NeedSymbolsThenMiniDumpResponse *p, const char *tag, const char *type) { - if ((p = soap_in___ns3__UploadAdditionalInfo(soap, tag, p, type))) + if ((p = soap_in_ns1__NeedSymbolsThenMiniDumpResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct __ns3__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns3__UploadAdditionalInfo(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns1__NeedSymbolsThenMiniDumpResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedSymbolsThenMiniDumpResponse(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___ns3__UploadAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns3__UploadAdditionalInfo, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns1__NeedSymbolsThenMiniDumpResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns3__UploadAdditionalInfo); + { cp->ptr = (void*)SOAP_NEW(ns1__NeedSymbolsThenMiniDumpResponse); if (size) - *size = sizeof(struct __ns3__UploadAdditionalInfo); + *size = sizeof(ns1__NeedSymbolsThenMiniDumpResponse); + ((ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct __ns3__UploadAdditionalInfo[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedSymbolsThenMiniDumpResponse, n); if (size) - *size = n * sizeof(struct __ns3__UploadAdditionalInfo); + *size = n * sizeof(ns1__NeedSymbolsThenMiniDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns3__UploadAdditionalInfo*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__UploadAdditionalInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedSymbolsThenMiniDumpResponse(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 __ns3__UploadAdditionalInfo %p -> %p\n", q, p)); - *(struct __ns3__UploadAdditionalInfo*)p = *(struct __ns3__UploadAdditionalInfo*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__NeedSymbolsThenMiniDumpResponse %p -> %p\n", q, p)); + *(ns1__NeedSymbolsThenMiniDumpResponse*)p = *(ns1__NeedSymbolsThenMiniDumpResponse*)q; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__UploadMiniDump(struct soap *soap, struct __ns3__UploadMiniDump *a) +void ns1__HaveSolutionResponse::soap_default(struct soap *soap) { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__UploadMiniDump = NULL; + this->soap = soap; + this->ns1__Response::soap_default(soap); + soap_default_bool(soap, &this->ns1__HaveSolutionResponse::askConfirmation); + this->ns1__HaveSolutionResponse::exe = NULL; + soap_default_ns4__HaveSolutionResponse_SolutionType(soap, &this->ns1__HaveSolutionResponse::type); + this->ns1__HaveSolutionResponse::url = NULL; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__UploadMiniDump(struct soap *soap, const struct __ns3__UploadMiniDump *a) +void ns1__HaveSolutionResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__UploadMiniDump(soap, &a->ns1__UploadMiniDump); +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->ns1__HaveSolutionResponse::askConfirmation, SOAP_TYPE_bool); + soap_serialize_PointerTo_xop__Include(soap, &this->ns1__HaveSolutionResponse::exe); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__HaveSolutionResponse::url); + this->ns1__Response::soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__UploadMiniDump(struct soap *soap, const char *tag, int id, const struct __ns3__UploadMiniDump *a, const char *type) +int ns1__HaveSolutionResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - if (soap_out_PointerTo_ns1__UploadMiniDump(soap, "ns1:UploadMiniDump", -1, &a->ns1__UploadMiniDump, "")) + return soap_out_ns1__HaveSolutionResponse(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__HaveSolutionResponse(struct soap *soap, const char *tag, int id, const ns1__HaveSolutionResponse *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__HaveSolutionResponse), "ns1:HaveSolutionResponse")) return soap->error; - return SOAP_OK; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) + return soap->error; + if (soap_out_bool(soap, "ns1:askConfirmation", -1, &(a->ns1__HaveSolutionResponse::askConfirmation), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:exe", -1, &(a->ns1__HaveSolutionResponse::exe), "")) + return soap->error; + if (soap_out_ns4__HaveSolutionResponse_SolutionType(soap, "ns1:type", -1, &(a->ns1__HaveSolutionResponse::type), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:url", -1, &(a->ns1__HaveSolutionResponse::url), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__HaveSolutionResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__HaveSolutionResponse(soap, tag, this, type); } -SOAP_FMAC3 struct __ns3__UploadMiniDump * SOAP_FMAC4 soap_in___ns3__UploadMiniDump(struct soap *soap, const char *tag, struct __ns3__UploadMiniDump *a, const char *type) +SOAP_FMAC3 ns1__HaveSolutionResponse * SOAP_FMAC4 soap_in_ns1__HaveSolutionResponse(struct soap *soap, const char *tag, ns1__HaveSolutionResponse *a, const char *type) { - size_t soap_flag_ns1__UploadMiniDump = 1; - short soap_flag; - a = (struct __ns3__UploadMiniDump *)soap_id_enter(soap, "", a, SOAP_TYPE___ns3__UploadMiniDump, sizeof(struct __ns3__UploadMiniDump), 0, NULL, NULL, NULL); + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__HaveSolutionResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__HaveSolutionResponse, sizeof(ns1__HaveSolutionResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default___ns3__UploadMiniDump(soap, a); - for (soap_flag = 0;; soap_flag = 1) + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__HaveSolutionResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__HaveSolutionResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item3 = 1; + size_t soap_flag_clientID2 = 1; + size_t soap_flag_context2 = 1; + size_t soap_flag_dumpGroupID2 = 1; + size_t soap_flag_dumpID2 = 1; + size_t soap_flag_garbage2 = 1; + size_t soap_flag_problemID2 = 1; + size_t soap_flag_urlToProblem2 = 1; + size_t soap_flag_askConfirmation1 = 1; + size_t soap_flag_exe1 = 1; + size_t soap_flag_type1 = 1; + size_t soap_flag_url1 = 1; + if (soap->body && !*soap->href) + { + for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__UploadMiniDump && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__UploadMiniDump(soap, "ns1:UploadMiniDump", &a->ns1__UploadMiniDump, "")) - { soap_flag_ns1__UploadMiniDump--; + /* transient soap skipped */ + if (soap_flag_clientID2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID2--; continue; } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; + if (soap_flag_context2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context2--; + continue; + } + if (soap_flag_dumpGroupID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID2--; + continue; + } + if (soap_flag_dumpID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID2--; + continue; + } + if (soap_flag_garbage2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage2--; + continue; + } + if (soap_flag_problemID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID2--; + continue; + } + if (soap_flag_urlToProblem2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem2--; + continue; } + if (soap_flag_askConfirmation1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_bool(soap, "ns1:askConfirmation", &(a->ns1__HaveSolutionResponse::askConfirmation), "xsd:boolean")) + { soap_flag_askConfirmation1--; + continue; + } + if (soap_flag_exe1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:exe", &(a->ns1__HaveSolutionResponse::exe), "")) + { soap_flag_exe1--; + continue; + } + if (soap_flag_type1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_ns4__HaveSolutionResponse_SolutionType(soap, "ns1:type", &(a->ns1__HaveSolutionResponse::type), "ns4:HaveSolutionResponse.SolutionType")) + { soap_flag_type1--; + continue; + } + if (soap_flag_url1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:url", &(a->ns1__HaveSolutionResponse::url), "xsd:string")) + { soap_flag_url1--; + continue; + } + if (soap_flag___item3 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item3--; + 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 = (ns1__HaveSolutionResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__HaveSolutionResponse, 0, sizeof(ns1__HaveSolutionResponse), 0, soap_copy_ns1__HaveSolutionResponse); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_askConfirmation1 > 0 || soap_flag_type1 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__UploadMiniDump(struct soap *soap, const struct __ns3__UploadMiniDump *a, const char *tag, const char *type) +int ns1__HaveSolutionResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = 0; - if (soap_out___ns3__UploadMiniDump(soap, tag?tag:"-ns3:UploadMiniDump", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__HaveSolutionResponse); + if (this->soap_out(soap, tag?tag:"ns1:HaveSolutionResponse", id, type)) return soap->error; - return SOAP_OK; + return soap_putindependent(soap); +} + +void *ns1__HaveSolutionResponse::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__HaveSolutionResponse(soap, this, tag, type); } -SOAP_FMAC3 struct __ns3__UploadMiniDump * SOAP_FMAC4 soap_get___ns3__UploadMiniDump(struct soap *soap, struct __ns3__UploadMiniDump *p, const char *tag, const char *type) +SOAP_FMAC3 ns1__HaveSolutionResponse * SOAP_FMAC4 soap_get_ns1__HaveSolutionResponse(struct soap *soap, ns1__HaveSolutionResponse *p, const char *tag, const char *type) { - if ((p = soap_in___ns3__UploadMiniDump(soap, tag, p, type))) + if ((p = soap_in_ns1__HaveSolutionResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct __ns3__UploadMiniDump * SOAP_FMAC2 soap_instantiate___ns3__UploadMiniDump(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns1__HaveSolutionResponse * SOAP_FMAC2 soap_instantiate_ns1__HaveSolutionResponse(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___ns3__UploadMiniDump(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns3__UploadMiniDump, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns1__HaveSolutionResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__HaveSolutionResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns3__UploadMiniDump); + { cp->ptr = (void*)SOAP_NEW(ns1__HaveSolutionResponse); if (size) - *size = sizeof(struct __ns3__UploadMiniDump); + *size = sizeof(ns1__HaveSolutionResponse); + ((ns1__HaveSolutionResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct __ns3__UploadMiniDump[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__HaveSolutionResponse, n); if (size) - *size = n * sizeof(struct __ns3__UploadMiniDump); + *size = n * sizeof(ns1__HaveSolutionResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__HaveSolutionResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns3__UploadMiniDump*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__HaveSolutionResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__UploadMiniDump(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__HaveSolutionResponse(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 __ns3__UploadMiniDump %p -> %p\n", q, p)); - *(struct __ns3__UploadMiniDump*)p = *(struct __ns3__UploadMiniDump*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__HaveSolutionResponse %p -> %p\n", q, p)); + *(ns1__HaveSolutionResponse*)p = *(ns1__HaveSolutionResponse*)q; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__Hello(struct soap *soap, struct __ns3__Hello *a) +void ns1__ErrorResponse::soap_default(struct soap *soap) { - (void)soap; (void)a; /* appease -Wall -Werror */ - a->ns1__Hello = NULL; + this->soap = soap; + this->ns1__Response::soap_default(soap); + this->ns1__ErrorResponse::error = NULL; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__Hello(struct soap *soap, const struct __ns3__Hello *a) +void ns1__ErrorResponse::soap_serialize(struct soap *soap) const { - (void)soap; (void)a; /* appease -Wall -Werror */ - soap_serialize_PointerTo_ns1__Hello(soap, &a->ns1__Hello); +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTostd__wstring(soap, &this->ns1__ErrorResponse::error); + this->ns1__Response::soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__Hello(struct soap *soap, const char *tag, int id, const struct __ns3__Hello *a, const char *type) +int ns1__ErrorResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - if (soap_out_PointerTo_ns1__Hello(soap, "ns1:Hello", -1, &a->ns1__Hello, "")) + return soap_out_ns1__ErrorResponse(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ErrorResponse(struct soap *soap, const char *tag, int id, const ns1__ErrorResponse *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ErrorResponse), "ns1:ErrorResponse")) return soap->error; - return SOAP_OK; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:error", -1, &(a->ns1__ErrorResponse::error), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__ErrorResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__ErrorResponse(soap, tag, this, type); } -SOAP_FMAC3 struct __ns3__Hello * SOAP_FMAC4 soap_in___ns3__Hello(struct soap *soap, const char *tag, struct __ns3__Hello *a, const char *type) +SOAP_FMAC3 ns1__ErrorResponse * SOAP_FMAC4 soap_in_ns1__ErrorResponse(struct soap *soap, const char *tag, ns1__ErrorResponse *a, const char *type) { - size_t soap_flag_ns1__Hello = 1; - short soap_flag; - a = (struct __ns3__Hello *)soap_id_enter(soap, "", a, SOAP_TYPE___ns3__Hello, sizeof(struct __ns3__Hello), 0, NULL, NULL, NULL); + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__ErrorResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__ErrorResponse, sizeof(ns1__ErrorResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default___ns3__Hello(soap, a); - for (soap_flag = 0;; soap_flag = 1) + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__ErrorResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__ErrorResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item3 = 1; + size_t soap_flag_clientID2 = 1; + size_t soap_flag_context2 = 1; + size_t soap_flag_dumpGroupID2 = 1; + size_t soap_flag_dumpID2 = 1; + size_t soap_flag_garbage2 = 1; + size_t soap_flag_problemID2 = 1; + size_t soap_flag_urlToProblem2 = 1; + size_t soap_flag_error1 = 1; + if (soap->body && !*soap->href) + { + for (;;) { soap->error = SOAP_TAG_MISMATCH; - if (soap_flag_ns1__Hello && soap->error == SOAP_TAG_MISMATCH) - if (soap_in_PointerTo_ns1__Hello(soap, "ns1:Hello", &a->ns1__Hello, "")) - { soap_flag_ns1__Hello--; + /* transient soap skipped */ + if (soap_flag_clientID2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID2--; continue; } - if (soap->error == SOAP_TAG_MISMATCH) - if (soap_flag) - { soap->error = SOAP_OK; - break; + if (soap_flag_context2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context2--; + continue; } - if (soap->error == SOAP_NO_TAG) - break; + if (soap_flag_dumpGroupID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID2--; + continue; + } + if (soap_flag_dumpID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID2--; + continue; + } + if (soap_flag_garbage2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage2--; + continue; + } + if (soap_flag_problemID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID2--; + continue; + } + if (soap_flag_urlToProblem2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem2--; + continue; + } + if (soap_flag_error1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:error", &(a->ns1__ErrorResponse::error), "xsd:string")) + { soap_flag_error1--; + continue; + } + if (soap_flag___item3 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item3--; + 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 = (ns1__ErrorResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__ErrorResponse, 0, sizeof(ns1__ErrorResponse), 0, soap_copy_ns1__ErrorResponse); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__Hello(struct soap *soap, const struct __ns3__Hello *a, const char *tag, const char *type) +int ns1__ErrorResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = 0; - if (soap_out___ns3__Hello(soap, tag?tag:"-ns3:Hello", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__ErrorResponse); + if (this->soap_out(soap, tag?tag:"ns1:ErrorResponse", id, type)) return soap->error; - return SOAP_OK; + return soap_putindependent(soap); +} + +void *ns1__ErrorResponse::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__ErrorResponse(soap, this, tag, type); } -SOAP_FMAC3 struct __ns3__Hello * SOAP_FMAC4 soap_get___ns3__Hello(struct soap *soap, struct __ns3__Hello *p, const char *tag, const char *type) +SOAP_FMAC3 ns1__ErrorResponse * SOAP_FMAC4 soap_get_ns1__ErrorResponse(struct soap *soap, ns1__ErrorResponse *p, const char *tag, const char *type) { - if ((p = soap_in___ns3__Hello(soap, tag, p, type))) + if ((p = soap_in_ns1__ErrorResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct __ns3__Hello * SOAP_FMAC2 soap_instantiate___ns3__Hello(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns1__ErrorResponse * SOAP_FMAC2 soap_instantiate_ns1__ErrorResponse(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___ns3__Hello(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns3__Hello, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns1__ErrorResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__ErrorResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct __ns3__Hello); + { cp->ptr = (void*)SOAP_NEW(ns1__ErrorResponse); if (size) - *size = sizeof(struct __ns3__Hello); + *size = sizeof(ns1__ErrorResponse); + ((ns1__ErrorResponse*)cp->ptr)->soap = soap; } else - { cp->ptr = (void*)SOAP_NEW(struct __ns3__Hello[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; - return NULL; - } + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ErrorResponse, n); if (size) - *size = n * sizeof(struct __ns3__Hello); + *size = n * sizeof(ns1__ErrorResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ErrorResponse*)cp->ptr)[i].soap = soap; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct __ns3__Hello*)cp->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ErrorResponse*)cp->ptr; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__Hello(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ErrorResponse(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 __ns3__Hello %p -> %p\n", q, p)); - *(struct __ns3__Hello*)p = *(struct __ns3__Hello*)q; + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__ErrorResponse %p -> %p\n", q, p)); + *(ns1__ErrorResponse*)p = *(ns1__ErrorResponse*)q; } -SOAP_FMAC3 void SOAP_FMAC4 soap_default__xop__Include(struct soap *soap, struct _xop__Include *a) +void ns1__StopResponse::soap_default(struct soap *soap) +{ + this->soap = soap; + this->ns1__Response::soap_default(soap); +} + +void ns1__StopResponse::soap_serialize(struct soap *soap) const { +#ifndef WITH_NOIDREF (void)soap; /* appease -Wall -Werror */ - a->__size = 0; - a->__ptr = NULL; - a->id = NULL; - a->type = NULL; - a->options = NULL; + this->ns1__Response::soap_serialize(soap); +#endif } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize__xop__Include(struct soap *soap, struct _xop__Include const*a) +int ns1__StopResponse::soap_out(struct soap *soap, const char *tag, int id, const char *type) const { - if (a->__ptr && !soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE__xop__Include)) - if (a->id || a->type) - soap->mode |= SOAP_ENC_DIME; + return soap_out_ns1__StopResponse(soap, tag, id, this, type); } -SOAP_FMAC3 int SOAP_FMAC4 soap_out__xop__Include(struct soap *soap, const char *tag, int id, const struct _xop__Include *a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__StopResponse(struct soap *soap, const char *tag, int id, const ns1__StopResponse *a, const char *type) { -#ifndef WITH_LEANER - id = soap_attachment(soap, tag, id, a, (struct soap_array*)&a->__ptr, a->id, a->type, a->options, 1, type, SOAP_TYPE__xop__Include); -#else - id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE__xop__Include); -#endif - if (id < 0) + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__StopResponse), "ns1:StopResponse")) return soap->error; - if (soap_element_begin_out(soap, tag, id, type)) + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) return soap->error; - if (soap_putbase64(soap, a->__ptr, a->__size)) + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) return soap->error; return soap_element_end_out(soap, tag); } -SOAP_FMAC3 struct _xop__Include * SOAP_FMAC4 soap_in__xop__Include(struct soap *soap, const char *tag, struct _xop__Include *a, const char *type) +void *ns1__StopResponse::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__StopResponse(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__StopResponse * SOAP_FMAC4 soap_in_ns1__StopResponse(struct soap *soap, const char *tag, ns1__StopResponse *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, ":base64Binary") && soap_match_tag(soap, soap->type, ":base64")) - { soap->error = SOAP_TYPE; + if (soap_element_begin_in(soap, tag, 0, NULL)) return NULL; - } - a = (struct _xop__Include *)soap_id_enter(soap, soap->id, a, SOAP_TYPE__xop__Include, sizeof(struct _xop__Include), 0, NULL, NULL, NULL); + a = (ns1__StopResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__StopResponse, sizeof(ns1__StopResponse), soap->type, soap->arrayType); if (!a) return NULL; - soap_default__xop__Include(soap, a); + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__StopResponse) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__StopResponse *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item3 = 1; + size_t soap_flag_clientID2 = 1; + size_t soap_flag_context2 = 1; + size_t soap_flag_dumpGroupID2 = 1; + size_t soap_flag_dumpID2 = 1; + size_t soap_flag_garbage2 = 1; + size_t soap_flag_problemID2 = 1; + size_t soap_flag_urlToProblem2 = 1; if (soap->body && !*soap->href) { - a->__ptr = soap_getbase64(soap, &a->__size, 0); -#ifndef WITH_LEANER - if (soap_xop_forward(soap, &a->__ptr, &a->__size, &a->id, &a->type, &a->options)) - return NULL; -#endif - if ((!a->__ptr && soap->error) || soap_element_end_in(soap, tag)) + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_clientID2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID2--; + continue; + } + if (soap_flag_context2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context2--; + continue; + } + if (soap_flag_dumpGroupID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID2--; + continue; + } + if (soap_flag_dumpID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID2--; + continue; + } + if (soap_flag_garbage2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage2--; + continue; + } + if (soap_flag_problemID2 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID2--; + continue; + } + if (soap_flag_urlToProblem2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem2--; + continue; + } + if (soap_flag___item3 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item3--; + 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 - { -#ifndef WITH_LEANER - if (*soap->href != '#') - { if (soap_dime_forward(soap, &a->__ptr, &a->__size, &a->id, &a->type, &a->options)) - return NULL; - } - else -#endif - a = (struct _xop__Include *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__xop__Include, 0, sizeof(struct _xop__Include), 0, NULL); + { a = (ns1__StopResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__StopResponse, 0, sizeof(ns1__StopResponse), 0, soap_copy_ns1__StopResponse); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put__xop__Include(struct soap *soap, const struct _xop__Include *a, const char *tag, const char *type) +int ns1__StopResponse::soap_put(struct soap *soap, const char *tag, const char *type) const { - register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE__xop__Include); - if (soap_out__xop__Include(soap, tag?tag:"xop:Include", id, a, type)) + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__StopResponse); + if (this->soap_out(soap, tag?tag:"ns1:StopResponse", id, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 struct _xop__Include * SOAP_FMAC4 soap_get__xop__Include(struct soap *soap, struct _xop__Include *p, const char *tag, const char *type) +void *ns1__StopResponse::soap_get(struct soap *soap, const char *tag, const char *type) { - if ((p = soap_in__xop__Include(soap, tag, p, type))) + return soap_get_ns1__StopResponse(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__StopResponse * SOAP_FMAC4 soap_get_ns1__StopResponse(struct soap *soap, ns1__StopResponse *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__StopResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC1 struct _xop__Include * SOAP_FMAC2 soap_instantiate__xop__Include(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +SOAP_FMAC1 ns1__StopResponse * SOAP_FMAC2 soap_instantiate_ns1__StopResponse(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__xop__Include(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); - struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__xop__Include, n, soap_fdelete); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_ns1__StopResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__StopResponse, n, soap_fdelete); if (!cp) return NULL; if (n < 0) - { cp->ptr = (void*)SOAP_NEW(struct _xop__Include); + { cp->ptr = (void*)SOAP_NEW(ns1__StopResponse); if (size) - *size = sizeof(struct _xop__Include); + *size = sizeof(ns1__StopResponse); + ((ns1__StopResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__StopResponse, n); + if (size) + *size = n * sizeof(ns1__StopResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__StopResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__StopResponse*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__StopResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__StopResponse %p -> %p\n", q, p)); + *(ns1__StopResponse*)p = *(ns1__StopResponse*)q; +} + +void ns1__Response::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + this->ns1__Response::clientID = NULL; + this->ns1__Response::context = NULL; + this->ns1__Response::dumpGroupID = NULL; + this->ns1__Response::dumpID = NULL; + this->ns1__Response::garbage = NULL; + this->ns1__Response::problemID = NULL; + this->ns1__Response::urlToProblem = NULL; +} + +void ns1__Response::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTostd__wstring(soap, &this->ns1__Response::clientID); + soap_serialize_PointerTo_xop__Include(soap, &this->ns1__Response::context); + soap_serialize_PointerToint(soap, &this->ns1__Response::dumpGroupID); + soap_serialize_PointerToint(soap, &this->ns1__Response::dumpID); + soap_serialize_PointerTo_xop__Include(soap, &this->ns1__Response::garbage); + soap_serialize_PointerToint(soap, &this->ns1__Response::problemID); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__Response::urlToProblem); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__Response::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__Response(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Response(struct soap *soap, const char *tag, int id, const ns1__Response *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__Response), "ns1:Response")) + return soap->error; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:clientID", -1, &(a->ns1__Response::clientID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:context", -1, &(a->ns1__Response::context), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpGroupID", -1, &(a->ns1__Response::dumpGroupID), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:dumpID", -1, &(a->ns1__Response::dumpID), "")) + return soap->error; + if (soap_out_PointerTo_xop__Include(soap, "ns1:garbage", -1, &(a->ns1__Response::garbage), "")) + return soap->error; + if (soap_out_PointerToint(soap, "ns1:problemID", -1, &(a->ns1__Response::problemID), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:urlToProblem", -1, &(a->ns1__Response::urlToProblem), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__Response::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__Response(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_in_ns1__Response(struct soap *soap, const char *tag, ns1__Response *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__Response *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__Response, sizeof(ns1__Response), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__Response) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__Response *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + size_t soap_flag_clientID1 = 1; + size_t soap_flag_context1 = 1; + size_t soap_flag_dumpGroupID1 = 1; + size_t soap_flag_dumpID1 = 1; + size_t soap_flag_garbage1 = 1; + size_t soap_flag_problemID1 = 1; + size_t soap_flag_urlToProblem1 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_clientID1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:clientID", &(a->ns1__Response::clientID), "xsd:string")) + { soap_flag_clientID1--; + continue; + } + if (soap_flag_context1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:context", &(a->ns1__Response::context), "")) + { soap_flag_context1--; + continue; + } + if (soap_flag_dumpGroupID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpGroupID", &(a->ns1__Response::dumpGroupID), "xsd:int")) + { soap_flag_dumpGroupID1--; + continue; + } + if (soap_flag_dumpID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:dumpID", &(a->ns1__Response::dumpID), "xsd:int")) + { soap_flag_dumpID1--; + continue; + } + if (soap_flag_garbage1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_xop__Include(soap, "ns1:garbage", &(a->ns1__Response::garbage), "")) + { soap_flag_garbage1--; + continue; + } + if (soap_flag_problemID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerToint(soap, "ns1:problemID", &(a->ns1__Response::problemID), "xsd:int")) + { soap_flag_problemID1--; + continue; + } + if (soap_flag_urlToProblem1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:urlToProblem", &(a->ns1__Response::urlToProblem), "xsd:string")) + { soap_flag_urlToProblem1--; + continue; + } + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__Response *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__Response, 0, sizeof(ns1__Response), 0, soap_copy_ns1__Response); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +int ns1__Response::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__Response); + if (this->soap_out(soap, tag?tag:"ns1:Response", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__Response::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__Response(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_get_ns1__Response(struct soap *soap, ns1__Response *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__Response(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__Response * SOAP_FMAC2 soap_instantiate_ns1__Response(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_ns1__Response(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__Response, n, soap_fdelete); + if (!cp) + return NULL; + if (type && !soap_match_tag(soap, type, "ns1:StopResponse")) + { cp->type = SOAP_TYPE_ns1__StopResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__StopResponse); + if (size) + *size = sizeof(ns1__StopResponse); + ((ns1__StopResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__StopResponse, n); + if (size) + *size = n * sizeof(ns1__StopResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__StopResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__StopResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:ErrorResponse")) + { cp->type = SOAP_TYPE_ns1__ErrorResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ErrorResponse); + if (size) + *size = sizeof(ns1__ErrorResponse); + ((ns1__ErrorResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ErrorResponse, n); + if (size) + *size = n * sizeof(ns1__ErrorResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ErrorResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ErrorResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:HaveSolutionResponse")) + { cp->type = SOAP_TYPE_ns1__HaveSolutionResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__HaveSolutionResponse); + if (size) + *size = sizeof(ns1__HaveSolutionResponse); + ((ns1__HaveSolutionResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__HaveSolutionResponse, n); + if (size) + *size = n * sizeof(ns1__HaveSolutionResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__HaveSolutionResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__HaveSolutionResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedSymbolsThenMiniDumpResponse")) + { cp->type = SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedSymbolsThenMiniDumpResponse); + if (size) + *size = sizeof(ns1__NeedSymbolsThenMiniDumpResponse); + ((ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedSymbolsThenMiniDumpResponse, n); + if (size) + *size = n * sizeof(ns1__NeedSymbolsThenMiniDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedMiniDumpResponse")) + { cp->type = SOAP_TYPE_ns1__NeedMiniDumpResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedMiniDumpResponse); + if (size) + *size = sizeof(ns1__NeedMiniDumpResponse); + ((ns1__NeedMiniDumpResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedMiniDumpResponse, n); + if (size) + *size = n * sizeof(ns1__NeedMiniDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedMiniDumpResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedMiniDumpResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedFullDumpResponse")) + { cp->type = SOAP_TYPE_ns1__NeedFullDumpResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedFullDumpResponse); + if (size) + *size = sizeof(ns1__NeedFullDumpResponse); + ((ns1__NeedFullDumpResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedFullDumpResponse, n); + if (size) + *size = n * sizeof(ns1__NeedFullDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedFullDumpResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedFullDumpResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedMoreInfoResponse")) + { cp->type = SOAP_TYPE_ns1__NeedMoreInfoResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedMoreInfoResponse); + if (size) + *size = sizeof(ns1__NeedMoreInfoResponse); + ((ns1__NeedMoreInfoResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedMoreInfoResponse, n); + if (size) + *size = n * sizeof(ns1__NeedMoreInfoResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedMoreInfoResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedMoreInfoResponse*)cp->ptr; + } + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__Response); + if (size) + *size = sizeof(ns1__Response); + ((ns1__Response*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__Response, n); + if (size) + *size = n * sizeof(ns1__Response); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__Response*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__Response*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Response(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__Response %p -> %p\n", q, p)); + *(ns1__Response*)p = *(ns1__Response*)q; +} + +void ns1__Pdb70File::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_unsignedInt(soap, &this->ns1__Pdb70File::age); + this->ns1__Pdb70File::path = NULL; + soap_default_ns3__guid(soap, &this->ns1__Pdb70File::signature); +} + +void ns1__Pdb70File::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTostd__wstring(soap, &this->ns1__Pdb70File::path); + soap_serialize_ns3__guid(soap, &this->ns1__Pdb70File::signature); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__Pdb70File::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__Pdb70File(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Pdb70File(struct soap *soap, const char *tag, int id, const ns1__Pdb70File *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__Pdb70File), "ns1:Pdb70File")) + return soap->error; + /* transient soap skipped */ + if (soap_out_unsignedInt(soap, "ns1:age", -1, &(a->ns1__Pdb70File::age), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:path", -1, &(a->ns1__Pdb70File::path), "")) + return soap->error; + if (soap_out_ns3__guid(soap, "ns1:signature", -1, &(a->ns1__Pdb70File::signature), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__Pdb70File::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__Pdb70File(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__Pdb70File * SOAP_FMAC4 soap_in_ns1__Pdb70File(struct soap *soap, const char *tag, ns1__Pdb70File *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__Pdb70File *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__Pdb70File, sizeof(ns1__Pdb70File), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__Pdb70File) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__Pdb70File *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + size_t soap_flag_age1 = 1; + size_t soap_flag_path1 = 1; + size_t soap_flag_signature1 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_age1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedInt(soap, "ns1:age", &(a->ns1__Pdb70File::age), "xsd:unsignedInt")) + { soap_flag_age1--; + continue; + } + if (soap_flag_path1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:path", &(a->ns1__Pdb70File::path), "xsd:string")) + { soap_flag_path1--; + continue; + } + if (soap_flag_signature1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_ns3__guid(soap, "ns1:signature", &(a->ns1__Pdb70File::signature), "ns3:guid")) + { soap_flag_signature1--; + continue; + } + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__Pdb70File *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__Pdb70File, 0, sizeof(ns1__Pdb70File), 0, soap_copy_ns1__Pdb70File); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_age1 > 0 || soap_flag_signature1 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +int ns1__Pdb70File::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__Pdb70File); + if (this->soap_out(soap, tag?tag:"ns1:Pdb70File", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__Pdb70File::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__Pdb70File(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__Pdb70File * SOAP_FMAC4 soap_get_ns1__Pdb70File(struct soap *soap, ns1__Pdb70File *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__Pdb70File(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__Pdb70File * SOAP_FMAC2 soap_instantiate_ns1__Pdb70File(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_ns1__Pdb70File(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__Pdb70File, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__Pdb70File); + if (size) + *size = sizeof(ns1__Pdb70File); + ((ns1__Pdb70File*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__Pdb70File, n); + if (size) + *size = n * sizeof(ns1__Pdb70File); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__Pdb70File*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__Pdb70File*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Pdb70File(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__Pdb70File %p -> %p\n", q, p)); + *(ns1__Pdb70File*)p = *(ns1__Pdb70File*)q; +} + +void ns1__ModuleSymbolInfo::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_bool(soap, &this->ns1__ModuleSymbolInfo::isMicrosoftModule); + this->ns1__ModuleSymbolInfo::path = NULL; + this->ns1__ModuleSymbolInfo::pdb = NULL; + soap_default_unsignedInt(soap, &this->ns1__ModuleSymbolInfo::sizeOfImage); + soap_default_unsignedInt(soap, &this->ns1__ModuleSymbolInfo::timeDateStamp); +} + +void ns1__ModuleSymbolInfo::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->ns1__ModuleSymbolInfo::isMicrosoftModule, SOAP_TYPE_bool); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__ModuleSymbolInfo::path); + soap_serialize_PointerTons1__Pdb70File(soap, &this->ns1__ModuleSymbolInfo::pdb); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__ModuleSymbolInfo::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__ModuleSymbolInfo(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ModuleSymbolInfo(struct soap *soap, const char *tag, int id, const ns1__ModuleSymbolInfo *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ModuleSymbolInfo), "ns1:ModuleSymbolInfo")) + return soap->error; + /* transient soap skipped */ + if (soap_out_bool(soap, "ns1:isMicrosoftModule", -1, &(a->ns1__ModuleSymbolInfo::isMicrosoftModule), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:path", -1, &(a->ns1__ModuleSymbolInfo::path), "")) + return soap->error; + if (soap_out_PointerTons1__Pdb70File(soap, "ns1:pdb", -1, &(a->ns1__ModuleSymbolInfo::pdb), "")) + return soap->error; + if (soap_out_unsignedInt(soap, "ns1:sizeOfImage", -1, &(a->ns1__ModuleSymbolInfo::sizeOfImage), "")) + return soap->error; + if (soap_out_unsignedInt(soap, "ns1:timeDateStamp", -1, &(a->ns1__ModuleSymbolInfo::timeDateStamp), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__ModuleSymbolInfo::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__ModuleSymbolInfo(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__ModuleSymbolInfo * SOAP_FMAC4 soap_in_ns1__ModuleSymbolInfo(struct soap *soap, const char *tag, ns1__ModuleSymbolInfo *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__ModuleSymbolInfo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__ModuleSymbolInfo, sizeof(ns1__ModuleSymbolInfo), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__ModuleSymbolInfo) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__ModuleSymbolInfo *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + size_t soap_flag_isMicrosoftModule1 = 1; + size_t soap_flag_path1 = 1; + size_t soap_flag_pdb1 = 1; + size_t soap_flag_sizeOfImage1 = 1; + size_t soap_flag_timeDateStamp1 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_isMicrosoftModule1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_bool(soap, "ns1:isMicrosoftModule", &(a->ns1__ModuleSymbolInfo::isMicrosoftModule), "xsd:boolean")) + { soap_flag_isMicrosoftModule1--; + continue; + } + if (soap_flag_path1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:path", &(a->ns1__ModuleSymbolInfo::path), "xsd:string")) + { soap_flag_path1--; + continue; + } + if (soap_flag_pdb1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTons1__Pdb70File(soap, "ns1:pdb", &(a->ns1__ModuleSymbolInfo::pdb), "ns1:Pdb70File")) + { soap_flag_pdb1--; + continue; + } + if (soap_flag_sizeOfImage1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedInt(soap, "ns1:sizeOfImage", &(a->ns1__ModuleSymbolInfo::sizeOfImage), "xsd:unsignedInt")) + { soap_flag_sizeOfImage1--; + continue; + } + if (soap_flag_timeDateStamp1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedInt(soap, "ns1:timeDateStamp", &(a->ns1__ModuleSymbolInfo::timeDateStamp), "xsd:unsignedInt")) + { soap_flag_timeDateStamp1--; + continue; + } + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__ModuleSymbolInfo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__ModuleSymbolInfo, 0, sizeof(ns1__ModuleSymbolInfo), 0, soap_copy_ns1__ModuleSymbolInfo); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_isMicrosoftModule1 > 0 || soap_flag_sizeOfImage1 > 0 || soap_flag_timeDateStamp1 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +int ns1__ModuleSymbolInfo::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__ModuleSymbolInfo); + if (this->soap_out(soap, tag?tag:"ns1:ModuleSymbolInfo", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__ModuleSymbolInfo::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__ModuleSymbolInfo(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__ModuleSymbolInfo * SOAP_FMAC4 soap_get_ns1__ModuleSymbolInfo(struct soap *soap, ns1__ModuleSymbolInfo *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__ModuleSymbolInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__ModuleSymbolInfo * SOAP_FMAC2 soap_instantiate_ns1__ModuleSymbolInfo(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_ns1__ModuleSymbolInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__ModuleSymbolInfo, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ModuleSymbolInfo); + if (size) + *size = sizeof(ns1__ModuleSymbolInfo); + ((ns1__ModuleSymbolInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ModuleSymbolInfo, n); + if (size) + *size = n * sizeof(ns1__ModuleSymbolInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ModuleSymbolInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ModuleSymbolInfo*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ModuleSymbolInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__ModuleSymbolInfo %p -> %p\n", q, p)); + *(ns1__ModuleSymbolInfo*)p = *(ns1__ModuleSymbolInfo*)q; +} + +void ns1__ArrayOfModuleSymbolInfo::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(soap, &this->ns1__ArrayOfModuleSymbolInfo::ModuleSymbolInfo); +} + +void ns1__ArrayOfModuleSymbolInfo::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(soap, &this->ns1__ArrayOfModuleSymbolInfo::ModuleSymbolInfo); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__ArrayOfModuleSymbolInfo::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__ArrayOfModuleSymbolInfo(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ArrayOfModuleSymbolInfo(struct soap *soap, const char *tag, int id, const ns1__ArrayOfModuleSymbolInfo *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo), "ns1:ArrayOfModuleSymbolInfo")) + return soap->error; + /* transient soap skipped */ + if (soap_out_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(soap, "ns1:ModuleSymbolInfo", -1, &(a->ns1__ArrayOfModuleSymbolInfo::ModuleSymbolInfo), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__ArrayOfModuleSymbolInfo::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__ArrayOfModuleSymbolInfo(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo * SOAP_FMAC4 soap_in_ns1__ArrayOfModuleSymbolInfo(struct soap *soap, const char *tag, ns1__ArrayOfModuleSymbolInfo *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__ArrayOfModuleSymbolInfo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo, sizeof(ns1__ArrayOfModuleSymbolInfo), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__ArrayOfModuleSymbolInfo *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_in_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(soap, "ns1:ModuleSymbolInfo", &(a->ns1__ArrayOfModuleSymbolInfo::ModuleSymbolInfo), "ns1:ModuleSymbolInfo")) + continue; + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__ArrayOfModuleSymbolInfo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo, 0, sizeof(ns1__ArrayOfModuleSymbolInfo), 0, soap_copy_ns1__ArrayOfModuleSymbolInfo); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +int ns1__ArrayOfModuleSymbolInfo::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo); + if (this->soap_out(soap, tag?tag:"ns1:ArrayOfModuleSymbolInfo", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__ArrayOfModuleSymbolInfo::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__ArrayOfModuleSymbolInfo(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo * SOAP_FMAC4 soap_get_ns1__ArrayOfModuleSymbolInfo(struct soap *soap, ns1__ArrayOfModuleSymbolInfo *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__ArrayOfModuleSymbolInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__ArrayOfModuleSymbolInfo * SOAP_FMAC2 soap_instantiate_ns1__ArrayOfModuleSymbolInfo(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_ns1__ArrayOfModuleSymbolInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ArrayOfModuleSymbolInfo); + if (size) + *size = sizeof(ns1__ArrayOfModuleSymbolInfo); + ((ns1__ArrayOfModuleSymbolInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ArrayOfModuleSymbolInfo, n); + if (size) + *size = n * sizeof(ns1__ArrayOfModuleSymbolInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ArrayOfModuleSymbolInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ArrayOfModuleSymbolInfo*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ArrayOfModuleSymbolInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__ArrayOfModuleSymbolInfo %p -> %p\n", q, p)); + *(ns1__ArrayOfModuleSymbolInfo*)p = *(ns1__ArrayOfModuleSymbolInfo*)q; +} + +void ns1__DumpAdditionalInfo::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_int(soap, &this->ns1__DumpAdditionalInfo::PCID); + soap_default_time(soap, &this->ns1__DumpAdditionalInfo::crashDate); + this->ns1__DumpAdditionalInfo::description = NULL; + this->ns1__DumpAdditionalInfo::group = NULL; + soap_default_int(soap, &this->ns1__DumpAdditionalInfo::submitterID); +} + +void ns1__DumpAdditionalInfo::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->ns1__DumpAdditionalInfo::PCID, SOAP_TYPE_int); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__DumpAdditionalInfo::description); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__DumpAdditionalInfo::group); + soap_embedded(soap, &this->ns1__DumpAdditionalInfo::submitterID, SOAP_TYPE_int); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__DumpAdditionalInfo::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__DumpAdditionalInfo(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__DumpAdditionalInfo(struct soap *soap, const char *tag, int id, const ns1__DumpAdditionalInfo *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__DumpAdditionalInfo), "ns1:DumpAdditionalInfo")) + return soap->error; + /* transient soap skipped */ + if (soap_out_int(soap, "ns1:PCID", -1, &(a->ns1__DumpAdditionalInfo::PCID), "")) + return soap->error; + if (soap_out_time(soap, "ns1:crashDate", -1, &(a->ns1__DumpAdditionalInfo::crashDate), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:description", -1, &(a->ns1__DumpAdditionalInfo::description), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:group", -1, &(a->ns1__DumpAdditionalInfo::group), "")) + return soap->error; + if (soap_out_int(soap, "ns1:submitterID", -1, &(a->ns1__DumpAdditionalInfo::submitterID), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__DumpAdditionalInfo::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__DumpAdditionalInfo(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__DumpAdditionalInfo * SOAP_FMAC4 soap_in_ns1__DumpAdditionalInfo(struct soap *soap, const char *tag, ns1__DumpAdditionalInfo *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__DumpAdditionalInfo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__DumpAdditionalInfo, sizeof(ns1__DumpAdditionalInfo), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__DumpAdditionalInfo) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__DumpAdditionalInfo *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + size_t soap_flag_PCID1 = 1; + size_t soap_flag_crashDate1 = 1; + size_t soap_flag_description1 = 1; + size_t soap_flag_group1 = 1; + size_t soap_flag_submitterID1 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_PCID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_int(soap, "ns1:PCID", &(a->ns1__DumpAdditionalInfo::PCID), "xsd:int")) + { soap_flag_PCID1--; + continue; + } + if (soap_flag_crashDate1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_time(soap, "ns1:crashDate", &(a->ns1__DumpAdditionalInfo::crashDate), "xsd:dateTime")) + { soap_flag_crashDate1--; + continue; + } + if (soap_flag_description1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:description", &(a->ns1__DumpAdditionalInfo::description), "xsd:string")) + { soap_flag_description1--; + continue; + } + if (soap_flag_group1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:group", &(a->ns1__DumpAdditionalInfo::group), "xsd:string")) + { soap_flag_group1--; + continue; + } + if (soap_flag_submitterID1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_int(soap, "ns1:submitterID", &(a->ns1__DumpAdditionalInfo::submitterID), "xsd:int")) + { soap_flag_submitterID1--; + continue; + } + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__DumpAdditionalInfo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__DumpAdditionalInfo, 0, sizeof(ns1__DumpAdditionalInfo), 0, soap_copy_ns1__DumpAdditionalInfo); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_PCID1 > 0 || soap_flag_crashDate1 > 0 || soap_flag_submitterID1 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +int ns1__DumpAdditionalInfo::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__DumpAdditionalInfo); + if (this->soap_out(soap, tag?tag:"ns1:DumpAdditionalInfo", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__DumpAdditionalInfo::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__DumpAdditionalInfo(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__DumpAdditionalInfo * SOAP_FMAC4 soap_get_ns1__DumpAdditionalInfo(struct soap *soap, ns1__DumpAdditionalInfo *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__DumpAdditionalInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__DumpAdditionalInfo * SOAP_FMAC2 soap_instantiate_ns1__DumpAdditionalInfo(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_ns1__DumpAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__DumpAdditionalInfo, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__DumpAdditionalInfo); + if (size) + *size = sizeof(ns1__DumpAdditionalInfo); + ((ns1__DumpAdditionalInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__DumpAdditionalInfo, n); + if (size) + *size = n * sizeof(ns1__DumpAdditionalInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__DumpAdditionalInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__DumpAdditionalInfo*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__DumpAdditionalInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__DumpAdditionalInfo %p -> %p\n", q, p)); + *(ns1__DumpAdditionalInfo*)p = *(ns1__DumpAdditionalInfo*)q; +} + +void ns1__AppAdditionalInfo::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + this->ns1__AppAdditionalInfo::appName = NULL; + this->ns1__AppAdditionalInfo::companyName = NULL; +} + +void ns1__AppAdditionalInfo::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_PointerTostd__wstring(soap, &this->ns1__AppAdditionalInfo::appName); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__AppAdditionalInfo::companyName); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__AppAdditionalInfo::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__AppAdditionalInfo(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__AppAdditionalInfo(struct soap *soap, const char *tag, int id, const ns1__AppAdditionalInfo *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__AppAdditionalInfo), "ns1:AppAdditionalInfo")) + return soap->error; + /* transient soap skipped */ + if (soap_out_PointerTostd__wstring(soap, "ns1:appName", -1, &(a->ns1__AppAdditionalInfo::appName), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:companyName", -1, &(a->ns1__AppAdditionalInfo::companyName), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__AppAdditionalInfo::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__AppAdditionalInfo(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__AppAdditionalInfo * SOAP_FMAC4 soap_in_ns1__AppAdditionalInfo(struct soap *soap, const char *tag, ns1__AppAdditionalInfo *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__AppAdditionalInfo *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__AppAdditionalInfo, sizeof(ns1__AppAdditionalInfo), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__AppAdditionalInfo) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__AppAdditionalInfo *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + size_t soap_flag_appName1 = 1; + size_t soap_flag_companyName1 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_appName1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:appName", &(a->ns1__AppAdditionalInfo::appName), "xsd:string")) + { soap_flag_appName1--; + continue; + } + if (soap_flag_companyName1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:companyName", &(a->ns1__AppAdditionalInfo::companyName), "xsd:string")) + { soap_flag_companyName1--; + continue; + } + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__AppAdditionalInfo *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__AppAdditionalInfo, 0, sizeof(ns1__AppAdditionalInfo), 0, soap_copy_ns1__AppAdditionalInfo); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +int ns1__AppAdditionalInfo::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__AppAdditionalInfo); + if (this->soap_out(soap, tag?tag:"ns1:AppAdditionalInfo", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__AppAdditionalInfo::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__AppAdditionalInfo(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__AppAdditionalInfo * SOAP_FMAC4 soap_get_ns1__AppAdditionalInfo(struct soap *soap, ns1__AppAdditionalInfo *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__AppAdditionalInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__AppAdditionalInfo * SOAP_FMAC2 soap_instantiate_ns1__AppAdditionalInfo(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_ns1__AppAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__AppAdditionalInfo, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__AppAdditionalInfo); + if (size) + *size = sizeof(ns1__AppAdditionalInfo); + ((ns1__AppAdditionalInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__AppAdditionalInfo, n); + if (size) + *size = n * sizeof(ns1__AppAdditionalInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__AppAdditionalInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__AppAdditionalInfo*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__AppAdditionalInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__AppAdditionalInfo %p -> %p\n", q, p)); + *(ns1__AppAdditionalInfo*)p = *(ns1__AppAdditionalInfo*)q; +} + +void ns1__Application::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_ns3__guid(soap, &this->ns1__Application::applicationGUID); + soap_default_unsignedShort(soap, &this->ns1__Application::hotfix); + this->ns1__Application::mainModule = NULL; + soap_default_unsignedShort(soap, &this->ns1__Application::v1); + soap_default_unsignedShort(soap, &this->ns1__Application::v2); + soap_default_unsignedShort(soap, &this->ns1__Application::v3); + soap_default_unsignedShort(soap, &this->ns1__Application::v4); +} + +void ns1__Application::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_ns3__guid(soap, &this->ns1__Application::applicationGUID); + soap_serialize_PointerTostd__wstring(soap, &this->ns1__Application::mainModule); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__Application::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__Application(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Application(struct soap *soap, const char *tag, int id, const ns1__Application *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__Application), "ns1:Application")) + return soap->error; + /* transient soap skipped */ + if (soap_out_ns3__guid(soap, "ns1:applicationGUID", -1, &(a->ns1__Application::applicationGUID), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:hotfix", -1, &(a->ns1__Application::hotfix), "")) + return soap->error; + if (soap_out_PointerTostd__wstring(soap, "ns1:mainModule", -1, &(a->ns1__Application::mainModule), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v1", -1, &(a->ns1__Application::v1), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v2", -1, &(a->ns1__Application::v2), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v3", -1, &(a->ns1__Application::v3), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v4", -1, &(a->ns1__Application::v4), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__Application::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__Application(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_in_ns1__Application(struct soap *soap, const char *tag, ns1__Application *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__Application *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__Application, sizeof(ns1__Application), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__Application) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__Application *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + size_t soap_flag_applicationGUID1 = 1; + size_t soap_flag_hotfix1 = 1; + size_t soap_flag_mainModule1 = 1; + size_t soap_flag_v11 = 1; + size_t soap_flag_v21 = 1; + size_t soap_flag_v31 = 1; + size_t soap_flag_v41 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_applicationGUID1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_ns3__guid(soap, "ns1:applicationGUID", &(a->ns1__Application::applicationGUID), "ns3:guid")) + { soap_flag_applicationGUID1--; + continue; + } + if (soap_flag_hotfix1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:hotfix", &(a->ns1__Application::hotfix), "xsd:unsignedShort")) + { soap_flag_hotfix1--; + continue; + } + if (soap_flag_mainModule1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_in_PointerTostd__wstring(soap, "ns1:mainModule", &(a->ns1__Application::mainModule), "xsd:string")) + { soap_flag_mainModule1--; + continue; + } + if (soap_flag_v11 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v1", &(a->ns1__Application::v1), "xsd:unsignedShort")) + { soap_flag_v11--; + continue; + } + if (soap_flag_v21 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v2", &(a->ns1__Application::v2), "xsd:unsignedShort")) + { soap_flag_v21--; + continue; + } + if (soap_flag_v31 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v3", &(a->ns1__Application::v3), "xsd:unsignedShort")) + { soap_flag_v31--; + continue; + } + if (soap_flag_v41 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v4", &(a->ns1__Application::v4), "xsd:unsignedShort")) + { soap_flag_v41--; + continue; + } + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__Application *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__Application, 0, sizeof(ns1__Application), 0, soap_copy_ns1__Application); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_applicationGUID1 > 0 || soap_flag_hotfix1 > 0 || soap_flag_v11 > 0 || soap_flag_v21 > 0 || soap_flag_v31 > 0 || soap_flag_v41 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +int ns1__Application::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__Application); + if (this->soap_out(soap, tag?tag:"ns1:Application", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__Application::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__Application(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_get_ns1__Application(struct soap *soap, ns1__Application *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__Application(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__Application * SOAP_FMAC2 soap_instantiate_ns1__Application(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_ns1__Application(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__Application, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__Application); + if (size) + *size = sizeof(ns1__Application); + ((ns1__Application*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__Application, n); + if (size) + *size = n * sizeof(ns1__Application); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__Application*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__Application*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Application(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__Application %p -> %p\n", q, p)); + *(ns1__Application*)p = *(ns1__Application*)q; +} + +void ns1__ClientLib::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_ns4__ClientLib_Architecture(soap, &this->ns1__ClientLib::arch); + soap_default_ns4__ClientLib_ClientType(soap, &this->ns1__ClientLib::type); + soap_default_unsignedShort(soap, &this->ns1__ClientLib::v1); + soap_default_unsignedShort(soap, &this->ns1__ClientLib::v2); + soap_default_unsignedShort(soap, &this->ns1__ClientLib::v3); + soap_default_unsignedShort(soap, &this->ns1__ClientLib::v4); +} + +void ns1__ClientLib::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int ns1__ClientLib::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_ns1__ClientLib(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ClientLib(struct soap *soap, const char *tag, int id, const ns1__ClientLib *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ClientLib), "ns1:ClientLib")) + return soap->error; + /* transient soap skipped */ + if (soap_out_ns4__ClientLib_Architecture(soap, "ns1:arch", -1, &(a->ns1__ClientLib::arch), "")) + return soap->error; + if (soap_out_ns4__ClientLib_ClientType(soap, "ns1:type", -1, &(a->ns1__ClientLib::type), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v1", -1, &(a->ns1__ClientLib::v1), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v2", -1, &(a->ns1__ClientLib::v2), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v3", -1, &(a->ns1__ClientLib::v3), "")) + return soap->error; + if (soap_out_unsignedShort(soap, "ns1:v4", -1, &(a->ns1__ClientLib::v4), "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +void *ns1__ClientLib::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_ns1__ClientLib(soap, tag, this, type); +} + +SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_in_ns1__ClientLib(struct soap *soap, const char *tag, ns1__ClientLib *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + a = (ns1__ClientLib *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_ns1__ClientLib, sizeof(ns1__ClientLib), soap->type, soap->arrayType); + if (!a) + return NULL; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_ns1__ClientLib) + { soap_revert(soap); + *soap->id = '\0'; + return (ns1__ClientLib *)a->soap_in(soap, tag, type); + } + } + size_t soap_flag___item2 = 1; + size_t soap_flag_arch1 = 1; + size_t soap_flag_type1 = 1; + size_t soap_flag_v11 = 1; + size_t soap_flag_v21 = 1; + size_t soap_flag_v31 = 1; + size_t soap_flag_v41 = 1; + if (soap->body && !*soap->href) + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + /* transient soap skipped */ + if (soap_flag_arch1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_ns4__ClientLib_Architecture(soap, "ns1:arch", &(a->ns1__ClientLib::arch), "ns4:ClientLib.Architecture")) + { soap_flag_arch1--; + continue; + } + if (soap_flag_type1 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_ns4__ClientLib_ClientType(soap, "ns1:type", &(a->ns1__ClientLib::type), "ns4:ClientLib.ClientType")) + { soap_flag_type1--; + continue; + } + if (soap_flag_v11 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v1", &(a->ns1__ClientLib::v1), "xsd:unsignedShort")) + { soap_flag_v11--; + continue; + } + if (soap_flag_v21 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v2", &(a->ns1__ClientLib::v2), "xsd:unsignedShort")) + { soap_flag_v21--; + continue; + } + if (soap_flag_v31 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v3", &(a->ns1__ClientLib::v3), "xsd:unsignedShort")) + { soap_flag_v31--; + continue; + } + if (soap_flag_v41 && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_unsignedShort(soap, "ns1:v4", &(a->ns1__ClientLib::v4), "xsd:unsignedShort")) + { soap_flag_v41--; + continue; + } + if (soap_flag___item2 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + if (soap_inliteral(soap, "-item", &(a->xsd__anyType::__item))) + { soap_flag___item2--; + 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 = (ns1__ClientLib *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_ns1__ClientLib, 0, sizeof(ns1__ClientLib), 0, soap_copy_ns1__ClientLib); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_arch1 > 0 || soap_flag_type1 > 0 || soap_flag_v11 > 0 || soap_flag_v21 > 0 || soap_flag_v31 > 0 || soap_flag_v41 > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +int ns1__ClientLib::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_ns1__ClientLib); + if (this->soap_out(soap, tag?tag:"ns1:ClientLib", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *ns1__ClientLib::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_ns1__ClientLib(soap, this, tag, type); +} + +SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_get_ns1__ClientLib(struct soap *soap, ns1__ClientLib *p, const char *tag, const char *type) +{ + if ((p = soap_in_ns1__ClientLib(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 ns1__ClientLib * SOAP_FMAC2 soap_instantiate_ns1__ClientLib(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_ns1__ClientLib(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_ns1__ClientLib, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ClientLib); + if (size) + *size = sizeof(ns1__ClientLib); + ((ns1__ClientLib*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ClientLib, n); + if (size) + *size = n * sizeof(ns1__ClientLib); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ClientLib*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ClientLib*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ClientLib(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying ns1__ClientLib %p -> %p\n", q, p)); + *(ns1__ClientLib*)p = *(ns1__ClientLib*)q; +} + +void xsd__unsignedShort::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_unsignedShort(soap, &this->xsd__unsignedShort::__item); +} + +void xsd__unsignedShort::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__unsignedShort::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__unsignedShort(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedShort(struct soap *soap, const char *tag, int id, const xsd__unsignedShort *a, const char *type) +{ + return soap_out_unsignedShort(soap, tag, id, &(a->xsd__unsignedShort::__item), "xsd:unsignedShort"); +} + +void *xsd__unsignedShort::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__unsignedShort(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__unsignedShort * SOAP_FMAC4 soap_in_xsd__unsignedShort(struct soap *soap, const char *tag, xsd__unsignedShort *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__unsignedShort *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__unsignedShort, sizeof(xsd__unsignedShort), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__unsignedShort) + return (xsd__unsignedShort *)a->soap_in(soap, tag, type); + } + if (!soap_in_unsignedShort(soap, tag, &(a->xsd__unsignedShort::__item), "xsd:unsignedShort")) + return NULL; + return a; +} + +int xsd__unsignedShort::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__unsignedShort); + if (this->soap_out(soap, tag?tag:"xsd:unsignedShort", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__unsignedShort::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__unsignedShort(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__unsignedShort * SOAP_FMAC4 soap_get_xsd__unsignedShort(struct soap *soap, xsd__unsignedShort *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__unsignedShort(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__unsignedShort * SOAP_FMAC2 soap_instantiate_xsd__unsignedShort(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__unsignedShort(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__unsignedShort, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedShort); + if (size) + *size = sizeof(xsd__unsignedShort); + ((xsd__unsignedShort*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedShort, n); + if (size) + *size = n * sizeof(xsd__unsignedShort); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedShort*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedShort*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedShort(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__unsignedShort %p -> %p\n", q, p)); + *(xsd__unsignedShort*)p = *(xsd__unsignedShort*)q; +} + +void xsd__unsignedLong::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_unsignedLONG64(soap, &this->xsd__unsignedLong::__item); +} + +void xsd__unsignedLong::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__unsignedLong::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__unsignedLong(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedLong(struct soap *soap, const char *tag, int id, const xsd__unsignedLong *a, const char *type) +{ + return soap_out_unsignedLONG64(soap, tag, id, &(a->xsd__unsignedLong::__item), "xsd:unsignedLong"); +} + +void *xsd__unsignedLong::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__unsignedLong(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__unsignedLong * SOAP_FMAC4 soap_in_xsd__unsignedLong(struct soap *soap, const char *tag, xsd__unsignedLong *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__unsignedLong *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__unsignedLong, sizeof(xsd__unsignedLong), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__unsignedLong) + return (xsd__unsignedLong *)a->soap_in(soap, tag, type); + } + if (!soap_in_unsignedLONG64(soap, tag, &(a->xsd__unsignedLong::__item), "xsd:unsignedLong")) + return NULL; + return a; +} + +int xsd__unsignedLong::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__unsignedLong); + if (this->soap_out(soap, tag?tag:"xsd:unsignedLong", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__unsignedLong::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__unsignedLong(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__unsignedLong * SOAP_FMAC4 soap_get_xsd__unsignedLong(struct soap *soap, xsd__unsignedLong *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__unsignedLong(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__unsignedLong * SOAP_FMAC2 soap_instantiate_xsd__unsignedLong(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__unsignedLong(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__unsignedLong, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedLong); + if (size) + *size = sizeof(xsd__unsignedLong); + ((xsd__unsignedLong*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedLong, n); + if (size) + *size = n * sizeof(xsd__unsignedLong); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedLong*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedLong*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedLong(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__unsignedLong %p -> %p\n", q, p)); + *(xsd__unsignedLong*)p = *(xsd__unsignedLong*)q; +} + +void xsd__unsignedInt::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_unsignedInt(soap, &this->xsd__unsignedInt::__item); +} + +void xsd__unsignedInt::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__unsignedInt::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__unsignedInt(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedInt(struct soap *soap, const char *tag, int id, const xsd__unsignedInt *a, const char *type) +{ + return soap_out_unsignedInt(soap, tag, id, &(a->xsd__unsignedInt::__item), "xsd:unsignedInt"); +} + +void *xsd__unsignedInt::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__unsignedInt(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__unsignedInt * SOAP_FMAC4 soap_in_xsd__unsignedInt(struct soap *soap, const char *tag, xsd__unsignedInt *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__unsignedInt *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__unsignedInt, sizeof(xsd__unsignedInt), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__unsignedInt) + return (xsd__unsignedInt *)a->soap_in(soap, tag, type); + } + if (!soap_in_unsignedInt(soap, tag, &(a->xsd__unsignedInt::__item), "xsd:unsignedInt")) + return NULL; + return a; +} + +int xsd__unsignedInt::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__unsignedInt); + if (this->soap_out(soap, tag?tag:"xsd:unsignedInt", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__unsignedInt::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__unsignedInt(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__unsignedInt * SOAP_FMAC4 soap_get_xsd__unsignedInt(struct soap *soap, xsd__unsignedInt *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__unsignedInt(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__unsignedInt * SOAP_FMAC2 soap_instantiate_xsd__unsignedInt(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__unsignedInt(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__unsignedInt, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedInt); + if (size) + *size = sizeof(xsd__unsignedInt); + ((xsd__unsignedInt*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedInt, n); + if (size) + *size = n * sizeof(xsd__unsignedInt); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedInt*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedInt*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedInt(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__unsignedInt %p -> %p\n", q, p)); + *(xsd__unsignedInt*)p = *(xsd__unsignedInt*)q; +} + +void xsd__unsignedByte_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__unsignedByte(soap, &this->xsd__unsignedByte_::__item); +} + +void xsd__unsignedByte_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__unsignedByte_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__unsignedByte_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedByte_(struct soap *soap, const char *tag, int id, const xsd__unsignedByte_ *a, const char *type) +{ + return soap_out_xsd__unsignedByte(soap, tag, id, &(a->xsd__unsignedByte_::__item), "xsd:unsignedByte"); +} + +void *xsd__unsignedByte_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__unsignedByte_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__unsignedByte_ * SOAP_FMAC4 soap_in_xsd__unsignedByte_(struct soap *soap, const char *tag, xsd__unsignedByte_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__unsignedByte_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__unsignedByte_, sizeof(xsd__unsignedByte_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__unsignedByte_) + return (xsd__unsignedByte_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__unsignedByte(soap, tag, &(a->xsd__unsignedByte_::__item), "xsd:unsignedByte")) + return NULL; + return a; +} + +int xsd__unsignedByte_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__unsignedByte_); + if (this->soap_out(soap, tag?tag:"xsd:unsignedByte", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__unsignedByte_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__unsignedByte_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__unsignedByte_ * SOAP_FMAC4 soap_get_xsd__unsignedByte_(struct soap *soap, xsd__unsignedByte_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__unsignedByte_(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__unsignedByte_ * SOAP_FMAC2 soap_instantiate_xsd__unsignedByte_(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__unsignedByte_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__unsignedByte_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedByte_); + if (size) + *size = sizeof(xsd__unsignedByte_); + ((xsd__unsignedByte_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedByte_, n); + if (size) + *size = n * sizeof(xsd__unsignedByte_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedByte_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedByte_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedByte_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__unsignedByte_ %p -> %p\n", q, p)); + *(xsd__unsignedByte_*)p = *(xsd__unsignedByte_*)q; +} + +void xsd__string::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_std__wstring(soap, &this->xsd__string::__item); +} + +void xsd__string::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->xsd__string::__item, SOAP_TYPE_std__wstring); + soap_serialize_std__wstring(soap, &this->xsd__string::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__string::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__string(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap *soap, const char *tag, int id, const xsd__string *a, const char *type) +{ + return soap_out_std__wstring(soap, tag, id, &(a->xsd__string::__item), "xsd:string"); +} + +void *xsd__string::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__string(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__string * SOAP_FMAC4 soap_in_xsd__string(struct soap *soap, const char *tag, xsd__string *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__string *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__string, sizeof(xsd__string), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__string) + return (xsd__string *)a->soap_in(soap, tag, type); + } + if (!soap_in_std__wstring(soap, tag, &(a->xsd__string::__item), "xsd:string")) + return NULL; + return a; +} + +int xsd__string::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__string); + if (this->soap_out(soap, tag?tag:"xsd:string", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__string::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__string(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__string * SOAP_FMAC4 soap_get_xsd__string(struct soap *soap, xsd__string *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_FMAC1 xsd__string * SOAP_FMAC2 soap_instantiate_xsd__string(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__string(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__string, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__string); + if (size) + *size = sizeof(xsd__string); + ((xsd__string*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__string, n); + if (size) + *size = n * sizeof(xsd__string); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__string*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__string*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__string(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__string %p -> %p\n", q, p)); + *(xsd__string*)p = *(xsd__string*)q; +} + +void xsd__short::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_short(soap, &this->xsd__short::__item); +} + +void xsd__short::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__short::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__short(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__short(struct soap *soap, const char *tag, int id, const xsd__short *a, const char *type) +{ + return soap_out_short(soap, tag, id, &(a->xsd__short::__item), "xsd:short"); +} + +void *xsd__short::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__short(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__short * SOAP_FMAC4 soap_in_xsd__short(struct soap *soap, const char *tag, xsd__short *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__short *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__short, sizeof(xsd__short), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__short) + return (xsd__short *)a->soap_in(soap, tag, type); + } + if (!soap_in_short(soap, tag, &(a->xsd__short::__item), "xsd:short")) + return NULL; + return a; +} + +int xsd__short::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__short); + if (this->soap_out(soap, tag?tag:"xsd:short", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__short::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__short(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__short * SOAP_FMAC4 soap_get_xsd__short(struct soap *soap, xsd__short *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__short(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__short * SOAP_FMAC2 soap_instantiate_xsd__short(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__short(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__short, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__short); + if (size) + *size = sizeof(xsd__short); + ((xsd__short*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__short, n); + if (size) + *size = n * sizeof(xsd__short); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__short*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__short*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__short(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__short %p -> %p\n", q, p)); + *(xsd__short*)p = *(xsd__short*)q; +} + +void xsd__long::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_LONG64(soap, &this->xsd__long::__item); +} + +void xsd__long::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__long::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__long(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap *soap, const char *tag, int id, const xsd__long *a, const char *type) +{ + return soap_out_LONG64(soap, tag, id, &(a->xsd__long::__item), "xsd:long"); +} + +void *xsd__long::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__long(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__long * SOAP_FMAC4 soap_in_xsd__long(struct soap *soap, const char *tag, xsd__long *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__long *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__long, sizeof(xsd__long), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__long) + return (xsd__long *)a->soap_in(soap, tag, type); + } + if (!soap_in_LONG64(soap, tag, &(a->xsd__long::__item), "xsd:long")) + return NULL; + return a; +} + +int xsd__long::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__long); + if (this->soap_out(soap, tag?tag:"xsd:long", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__long::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__long(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__long * SOAP_FMAC4 soap_get_xsd__long(struct soap *soap, xsd__long *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_FMAC1 xsd__long * SOAP_FMAC2 soap_instantiate_xsd__long(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__long(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__long, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__long); + if (size) + *size = sizeof(xsd__long); + ((xsd__long*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__long, n); + if (size) + *size = n * sizeof(xsd__long); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__long*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__long*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__long(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__long %p -> %p\n", q, p)); + *(xsd__long*)p = *(xsd__long*)q; +} + +void xsd__int::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_int(soap, &this->xsd__int::__item); +} + +void xsd__int::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->xsd__int::__item, SOAP_TYPE_int); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__int::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__int(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap *soap, const char *tag, int id, const xsd__int *a, const char *type) +{ + return soap_out_int(soap, tag, id, &(a->xsd__int::__item), "xsd:int"); +} + +void *xsd__int::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__int(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__int * SOAP_FMAC4 soap_in_xsd__int(struct soap *soap, const char *tag, xsd__int *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__int *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__int, sizeof(xsd__int), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__int) + return (xsd__int *)a->soap_in(soap, tag, type); + } + if (!soap_in_int(soap, tag, &(a->xsd__int::__item), "xsd:int")) + return NULL; + return a; +} + +int xsd__int::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__int); + if (this->soap_out(soap, tag?tag:"xsd:int", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__int::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__int(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__int * SOAP_FMAC4 soap_get_xsd__int(struct soap *soap, xsd__int *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_FMAC1 xsd__int * SOAP_FMAC2 soap_instantiate_xsd__int(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__int(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__int, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__int); + if (size) + *size = sizeof(xsd__int); + ((xsd__int*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__int, n); + if (size) + *size = n * sizeof(xsd__int); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__int*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__int*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__int(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__int %p -> %p\n", q, p)); + *(xsd__int*)p = *(xsd__int*)q; +} + +void xsd__float::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_float(soap, &this->xsd__float::__item); +} + +void xsd__float::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__float::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__float(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap *soap, const char *tag, int id, const xsd__float *a, const char *type) +{ + return soap_out_float(soap, tag, id, &(a->xsd__float::__item), "xsd:float"); +} + +void *xsd__float::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__float(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__float * SOAP_FMAC4 soap_in_xsd__float(struct soap *soap, const char *tag, xsd__float *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__float *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__float, sizeof(xsd__float), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__float) + return (xsd__float *)a->soap_in(soap, tag, type); + } + if (!soap_in_float(soap, tag, &(a->xsd__float::__item), "xsd:float")) + return NULL; + return a; +} + +int xsd__float::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__float); + if (this->soap_out(soap, tag?tag:"xsd:float", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__float::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__float(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__float * SOAP_FMAC4 soap_get_xsd__float(struct soap *soap, xsd__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_FMAC1 xsd__float * SOAP_FMAC2 soap_instantiate_xsd__float(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__float(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__float, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__float); + if (size) + *size = sizeof(xsd__float); + ((xsd__float*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__float, n); + if (size) + *size = n * sizeof(xsd__float); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__float*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__float*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__float(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__float %p -> %p\n", q, p)); + *(xsd__float*)p = *(xsd__float*)q; +} + +void xsd__duration_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__duration(soap, &this->xsd__duration_::__item); +} + +void xsd__duration_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_xsd__duration(soap, &this->xsd__duration_::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__duration_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__duration_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration_(struct soap *soap, const char *tag, int id, const xsd__duration_ *a, const char *type) +{ + return soap_out_xsd__duration(soap, tag, id, &(a->xsd__duration_::__item), "xsd:duration"); +} + +void *xsd__duration_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__duration_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__duration_ * SOAP_FMAC4 soap_in_xsd__duration_(struct soap *soap, const char *tag, xsd__duration_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__duration_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__duration_, sizeof(xsd__duration_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__duration_) + return (xsd__duration_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__duration(soap, tag, &(a->xsd__duration_::__item), "xsd:duration")) + return NULL; + return a; +} + +int xsd__duration_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__duration_); + if (this->soap_out(soap, tag?tag:"xsd:duration", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__duration_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__duration_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__duration_ * SOAP_FMAC4 soap_get_xsd__duration_(struct soap *soap, xsd__duration_ *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_FMAC1 xsd__duration_ * SOAP_FMAC2 soap_instantiate_xsd__duration_(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__duration_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__duration_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__duration_); + if (size) + *size = sizeof(xsd__duration_); + ((xsd__duration_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__duration_, n); + if (size) + *size = n * sizeof(xsd__duration_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__duration_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__duration_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__duration_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__duration_ %p -> %p\n", q, p)); + *(xsd__duration_*)p = *(xsd__duration_*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__duration(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_xsd__duration), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__duration(struct soap *soap, const char *tag, std::wstring *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__duration, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__duration, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_xsd__duration, 0, sizeof(std::wstring), 0, soap_copy_xsd__duration); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_xsd__duration); + if (soap_out_xsd__duration(soap, tag?tag:"xsd:duration", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__duration(struct soap *soap, std::wstring *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; +} + +void xsd__double::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_double(soap, &this->xsd__double::__item); +} + +void xsd__double::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__double::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__double(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__double(struct soap *soap, const char *tag, int id, const xsd__double *a, const char *type) +{ + return soap_out_double(soap, tag, id, &(a->xsd__double::__item), "xsd:double"); +} + +void *xsd__double::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__double(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__double * SOAP_FMAC4 soap_in_xsd__double(struct soap *soap, const char *tag, xsd__double *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__double *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__double, sizeof(xsd__double), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__double) + return (xsd__double *)a->soap_in(soap, tag, type); + } + if (!soap_in_double(soap, tag, &(a->xsd__double::__item), "xsd:double")) + return NULL; + return a; +} + +int xsd__double::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__double); + if (this->soap_out(soap, tag?tag:"xsd:double", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__double::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__double(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__double * SOAP_FMAC4 soap_get_xsd__double(struct soap *soap, xsd__double *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__double(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__double * SOAP_FMAC2 soap_instantiate_xsd__double(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__double(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__double, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__double); + if (size) + *size = sizeof(xsd__double); + ((xsd__double*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__double, n); + if (size) + *size = n * sizeof(xsd__double); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__double*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__double*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__double(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__double %p -> %p\n", q, p)); + *(xsd__double*)p = *(xsd__double*)q; +} + +void xsd__decimal_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__decimal(soap, &this->xsd__decimal_::__item); +} + +void xsd__decimal_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_xsd__decimal(soap, &this->xsd__decimal_::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__decimal_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__decimal_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__decimal_(struct soap *soap, const char *tag, int id, const xsd__decimal_ *a, const char *type) +{ + return soap_out_xsd__decimal(soap, tag, id, &(a->xsd__decimal_::__item), "xsd:decimal"); +} + +void *xsd__decimal_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__decimal_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__decimal_ * SOAP_FMAC4 soap_in_xsd__decimal_(struct soap *soap, const char *tag, xsd__decimal_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__decimal_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__decimal_, sizeof(xsd__decimal_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__decimal_) + return (xsd__decimal_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__decimal(soap, tag, &(a->xsd__decimal_::__item), "xsd:decimal")) + return NULL; + return a; +} + +int xsd__decimal_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__decimal_); + if (this->soap_out(soap, tag?tag:"xsd:decimal", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__decimal_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__decimal_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__decimal_ * SOAP_FMAC4 soap_get_xsd__decimal_(struct soap *soap, xsd__decimal_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__decimal_(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__decimal_ * SOAP_FMAC2 soap_instantiate_xsd__decimal_(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__decimal_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__decimal_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__decimal_); + if (size) + *size = sizeof(xsd__decimal_); + ((xsd__decimal_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__decimal_, n); + if (size) + *size = n * sizeof(xsd__decimal_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__decimal_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__decimal_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__decimal_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__decimal_ %p -> %p\n", q, p)); + *(xsd__decimal_*)p = *(xsd__decimal_*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__decimal(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__decimal(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_xsd__decimal), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__decimal(struct soap *soap, const char *tag, std::wstring *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__decimal, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__decimal, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_xsd__decimal, 0, sizeof(std::wstring), 0, soap_copy_xsd__decimal); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__decimal(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_xsd__decimal); + if (soap_out_xsd__decimal(soap, tag?tag:"xsd:decimal", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__decimal(struct soap *soap, std::wstring *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__decimal(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +void xsd__dateTime::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_time(soap, &this->xsd__dateTime::__item); +} + +void xsd__dateTime::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__dateTime::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__dateTime(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap *soap, const char *tag, int id, const xsd__dateTime *a, const char *type) +{ + return soap_out_time(soap, tag, id, &(a->xsd__dateTime::__item), "xsd:dateTime"); +} + +void *xsd__dateTime::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__dateTime(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__dateTime * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap *soap, const char *tag, xsd__dateTime *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__dateTime *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__dateTime, sizeof(xsd__dateTime), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__dateTime) + return (xsd__dateTime *)a->soap_in(soap, tag, type); + } + if (!soap_in_time(soap, tag, &(a->xsd__dateTime::__item), "xsd:dateTime")) + return NULL; + return a; +} + +int xsd__dateTime::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__dateTime); + if (this->soap_out(soap, tag?tag:"xsd:dateTime", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__dateTime::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__dateTime(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__dateTime * SOAP_FMAC4 soap_get_xsd__dateTime(struct soap *soap, xsd__dateTime *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_FMAC1 xsd__dateTime * SOAP_FMAC2 soap_instantiate_xsd__dateTime(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__dateTime(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__dateTime, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__dateTime); + if (size) + *size = sizeof(xsd__dateTime); + ((xsd__dateTime*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__dateTime, n); + if (size) + *size = n * sizeof(xsd__dateTime); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__dateTime*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__dateTime*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__dateTime(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__dateTime %p -> %p\n", q, p)); + *(xsd__dateTime*)p = *(xsd__dateTime*)q; +} + +void xsd__byte_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__byte(soap, &this->xsd__byte_::__item); +} + +void xsd__byte_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__byte_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__byte_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__byte_(struct soap *soap, const char *tag, int id, const xsd__byte_ *a, const char *type) +{ + return soap_out_xsd__byte(soap, tag, id, &(a->xsd__byte_::__item), "xsd:byte"); +} + +void *xsd__byte_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__byte_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__byte_ * SOAP_FMAC4 soap_in_xsd__byte_(struct soap *soap, const char *tag, xsd__byte_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__byte_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__byte_, sizeof(xsd__byte_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__byte_) + return (xsd__byte_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__byte(soap, tag, &(a->xsd__byte_::__item), "xsd:byte")) + return NULL; + return a; +} + +int xsd__byte_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__byte_); + if (this->soap_out(soap, tag?tag:"xsd:byte", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__byte_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__byte_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__byte_ * SOAP_FMAC4 soap_get_xsd__byte_(struct soap *soap, xsd__byte_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__byte_(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__byte_ * SOAP_FMAC2 soap_instantiate_xsd__byte_(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__byte_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__byte_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__byte_); + if (size) + *size = sizeof(xsd__byte_); + ((xsd__byte_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__byte_, n); + if (size) + *size = n * sizeof(xsd__byte_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__byte_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__byte_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__byte_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__byte_ %p -> %p\n", q, p)); + *(xsd__byte_*)p = *(xsd__byte_*)q; +} + +void xsd__boolean::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_bool(soap, &this->xsd__boolean::__item); +} + +void xsd__boolean::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->xsd__boolean::__item, SOAP_TYPE_bool); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__boolean::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__boolean(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap *soap, const char *tag, int id, const xsd__boolean *a, const char *type) +{ + return soap_out_bool(soap, tag, id, &(a->xsd__boolean::__item), "xsd:boolean"); +} + +void *xsd__boolean::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__boolean(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__boolean * SOAP_FMAC4 soap_in_xsd__boolean(struct soap *soap, const char *tag, xsd__boolean *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__boolean *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__boolean, sizeof(xsd__boolean), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__boolean) + return (xsd__boolean *)a->soap_in(soap, tag, type); + } + if (!soap_in_bool(soap, tag, &(a->xsd__boolean::__item), "xsd:boolean")) + return NULL; + return a; +} + +int xsd__boolean::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__boolean); + if (this->soap_out(soap, tag?tag:"xsd:boolean", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__boolean::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__boolean(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__boolean * SOAP_FMAC4 soap_get_xsd__boolean(struct soap *soap, xsd__boolean *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_FMAC1 xsd__boolean * SOAP_FMAC2 soap_instantiate_xsd__boolean(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__boolean(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__boolean, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__boolean); + if (size) + *size = sizeof(xsd__boolean); + ((xsd__boolean*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__boolean, n); + if (size) + *size = n * sizeof(xsd__boolean); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__boolean*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__boolean*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__boolean(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__boolean %p -> %p\n", q, p)); + *(xsd__boolean*)p = *(xsd__boolean*)q; +} + +void xsd__base64Binary::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default__xop__Include(soap, &this->xsd__base64Binary::__item); +} + +void xsd__base64Binary::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_embedded(soap, &this->xsd__base64Binary::__item, SOAP_TYPE__xop__Include); + soap_serialize__xop__Include(soap, &this->xsd__base64Binary::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__base64Binary::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__base64Binary(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__base64Binary(struct soap *soap, const char *tag, int id, const xsd__base64Binary *a, const char *type) +{ + return soap_out__xop__Include(soap, tag, id, &(a->xsd__base64Binary::__item), "xsd:base64Binary"); +} + +void *xsd__base64Binary::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__base64Binary(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__base64Binary * SOAP_FMAC4 soap_in_xsd__base64Binary(struct soap *soap, const char *tag, xsd__base64Binary *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__base64Binary *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__base64Binary, sizeof(xsd__base64Binary), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__base64Binary) + return (xsd__base64Binary *)a->soap_in(soap, tag, type); + } + if (!soap_in__xop__Include(soap, tag, &(a->xsd__base64Binary::__item), "xsd:base64Binary")) + return NULL; + return a; +} + +int xsd__base64Binary::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__base64Binary); + if (this->soap_out(soap, tag?tag:"xsd:base64Binary", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__base64Binary::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__base64Binary(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__base64Binary * SOAP_FMAC4 soap_get_xsd__base64Binary(struct soap *soap, xsd__base64Binary *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__base64Binary(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__base64Binary * SOAP_FMAC2 soap_instantiate_xsd__base64Binary(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__base64Binary(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__base64Binary, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__base64Binary); + if (size) + *size = sizeof(xsd__base64Binary); + ((xsd__base64Binary*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__base64Binary, n); + if (size) + *size = n * sizeof(xsd__base64Binary); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__base64Binary*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__base64Binary*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__base64Binary(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__base64Binary %p -> %p\n", q, p)); + *(xsd__base64Binary*)p = *(xsd__base64Binary*)q; +} + +void xsd__anyURI_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__anyURI(soap, &this->xsd__anyURI_::__item); +} + +void xsd__anyURI_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_xsd__anyURI(soap, &this->xsd__anyURI_::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__anyURI_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__anyURI_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__anyURI_(struct soap *soap, const char *tag, int id, const xsd__anyURI_ *a, const char *type) +{ + return soap_out_xsd__anyURI(soap, tag, id, &(a->xsd__anyURI_::__item), "xsd:anyURI"); +} + +void *xsd__anyURI_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__anyURI_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__anyURI_ * SOAP_FMAC4 soap_in_xsd__anyURI_(struct soap *soap, const char *tag, xsd__anyURI_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__anyURI_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__anyURI_, sizeof(xsd__anyURI_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__anyURI_) + return (xsd__anyURI_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__anyURI(soap, tag, &(a->xsd__anyURI_::__item), "xsd:anyURI")) + return NULL; + return a; +} + +int xsd__anyURI_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__anyURI_); + if (this->soap_out(soap, tag?tag:"xsd:anyURI", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__anyURI_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__anyURI_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__anyURI_ * SOAP_FMAC4 soap_get_xsd__anyURI_(struct soap *soap, xsd__anyURI_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__anyURI_(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__anyURI_ * SOAP_FMAC2 soap_instantiate_xsd__anyURI_(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__anyURI_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__anyURI_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__anyURI_); + if (size) + *size = sizeof(xsd__anyURI_); + ((xsd__anyURI_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__anyURI_, n); + if (size) + *size = n * sizeof(xsd__anyURI_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__anyURI_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__anyURI_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__anyURI_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__anyURI_ %p -> %p\n", q, p)); + *(xsd__anyURI_*)p = *(xsd__anyURI_*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__anyURI(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__anyURI(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_xsd__anyURI), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__anyURI(struct soap *soap, const char *tag, std::wstring *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__anyURI, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__anyURI, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_xsd__anyURI, 0, sizeof(std::wstring), 0, soap_copy_xsd__anyURI); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__anyURI(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_xsd__anyURI); + if (soap_out_xsd__anyURI(soap, tag?tag:"xsd:anyURI", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__anyURI(struct soap *soap, std::wstring *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__anyURI(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +void xsd__QName_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__QName(soap, &this->xsd__QName_::__item); +} + +void xsd__QName_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_xsd__QName(soap, &this->xsd__QName_::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__QName_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__QName_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__QName_(struct soap *soap, const char *tag, int id, const xsd__QName_ *a, const char *type) +{ + std::string soap_tmp___item(soap_QName2s(soap, a->__item.c_str())); + return soap_out_xsd__QName(soap, tag, id, &soap_tmp___item, "xsd:QName"); +} + +void *xsd__QName_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__QName_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__QName_ * SOAP_FMAC4 soap_in_xsd__QName_(struct soap *soap, const char *tag, xsd__QName_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__QName_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__QName_, sizeof(xsd__QName_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__QName_) + return (xsd__QName_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__QName(soap, tag, &(a->xsd__QName_::__item), "xsd:QName")) + return NULL; + return a; +} + +int xsd__QName_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__QName_); + if (this->soap_out(soap, tag?tag:"xsd:QName", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__QName_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__QName_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__QName_ * SOAP_FMAC4 soap_get_xsd__QName_(struct soap *soap, xsd__QName_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__QName_(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__QName_ * SOAP_FMAC2 soap_instantiate_xsd__QName_(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__QName_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__QName_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__QName_); + if (size) + *size = sizeof(xsd__QName_); + ((xsd__QName_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__QName_, n); + if (size) + *size = n * sizeof(xsd__QName_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__QName_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__QName_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__QName_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__QName_ %p -> %p\n", q, p)); + *(xsd__QName_*)p = *(xsd__QName_*)q; +} + +void xsd__IDREF_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__IDREF(soap, &this->xsd__IDREF_::__item); +} + +void xsd__IDREF_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_xsd__IDREF(soap, &this->xsd__IDREF_::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__IDREF_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__IDREF_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__IDREF_(struct soap *soap, const char *tag, int id, const xsd__IDREF_ *a, const char *type) +{ + return soap_out_xsd__IDREF(soap, tag, id, &(a->xsd__IDREF_::__item), "xsd:IDREF"); +} + +void *xsd__IDREF_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__IDREF_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__IDREF_ * SOAP_FMAC4 soap_in_xsd__IDREF_(struct soap *soap, const char *tag, xsd__IDREF_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__IDREF_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__IDREF_, sizeof(xsd__IDREF_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__IDREF_) + return (xsd__IDREF_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__IDREF(soap, tag, &(a->xsd__IDREF_::__item), "xsd:IDREF")) + return NULL; + return a; +} + +int xsd__IDREF_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__IDREF_); + if (this->soap_out(soap, tag?tag:"xsd:IDREF", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__IDREF_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__IDREF_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__IDREF_ * SOAP_FMAC4 soap_get_xsd__IDREF_(struct soap *soap, xsd__IDREF_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__IDREF_(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__IDREF_ * SOAP_FMAC2 soap_instantiate_xsd__IDREF_(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__IDREF_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__IDREF_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__IDREF_); + if (size) + *size = sizeof(xsd__IDREF_); + ((xsd__IDREF_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__IDREF_, n); + if (size) + *size = n * sizeof(xsd__IDREF_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__IDREF_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__IDREF_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__IDREF_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__IDREF_ %p -> %p\n", q, p)); + *(xsd__IDREF_*)p = *(xsd__IDREF_*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__IDREF(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__IDREF(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_xsd__IDREF), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__IDREF(struct soap *soap, const char *tag, std::wstring *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__IDREF, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__IDREF, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_xsd__IDREF, 0, sizeof(std::wstring), 0, soap_copy_xsd__IDREF); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__IDREF(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_xsd__IDREF); + if (soap_out_xsd__IDREF(soap, tag?tag:"xsd:IDREF", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__IDREF(struct soap *soap, std::wstring *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__IDREF(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +void xsd__ID_::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::soap_default(soap); + soap_default_xsd__ID(soap, &this->xsd__ID_::__item); +} + +void xsd__ID_::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + soap_serialize_xsd__ID(soap, &this->xsd__ID_::__item); + this->xsd__anyType::soap_serialize(soap); +#endif +} + +int xsd__ID_::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__ID_(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__ID_(struct soap *soap, const char *tag, int id, const xsd__ID_ *a, const char *type) +{ + return soap_out_xsd__ID(soap, tag, id, &(a->xsd__ID_::__item), "xsd:ID"); +} + +void *xsd__ID_::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__ID_(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__ID_ * SOAP_FMAC4 soap_in_xsd__ID_(struct soap *soap, const char *tag, xsd__ID_ *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__ID_ *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__ID_, sizeof(xsd__ID_), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__ID_) + return (xsd__ID_ *)a->soap_in(soap, tag, type); + } + if (!soap_in_xsd__ID(soap, tag, &(a->xsd__ID_::__item), "xsd:ID")) + return NULL; + return a; +} + +int xsd__ID_::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__ID_); + if (this->soap_out(soap, tag?tag:"xsd:ID", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__ID_::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__ID_(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__ID_ * SOAP_FMAC4 soap_get_xsd__ID_(struct soap *soap, xsd__ID_ *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__ID_(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__ID_ * SOAP_FMAC2 soap_instantiate_xsd__ID_(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__ID_(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__ID_, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__ID_); + if (size) + *size = sizeof(xsd__ID_); + ((xsd__ID_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__ID_, n); + if (size) + *size = n * sizeof(xsd__ID_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__ID_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__ID_*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__ID_(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__ID_ %p -> %p\n", q, p)); + *(xsd__ID_*)p = *(xsd__ID_*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__ID(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__ID(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_xsd__ID), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__ID(struct soap *soap, const char *tag, std::wstring *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__ID, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__ID, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_xsd__ID, 0, sizeof(std::wstring), 0, soap_copy_xsd__ID); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__ID(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_xsd__ID); + if (soap_out_xsd__ID(soap, tag?tag:"xsd:ID", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__ID(struct soap *soap, std::wstring *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__ID(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__wstring(struct soap *soap, std::wstring *p) +{ + (void)soap; /* appease -Wall -Werror */ + p->erase(); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__wstring(struct soap *soap, const std::wstring *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__wstring(struct soap *soap, const char *tag, int id, const std::wstring *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_std__wstring), type) || soap_wstring_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_std__wstring(struct soap *soap, const char *tag, std::wstring *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__wstring(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { wchar_t *t; + s = (std::wstring*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__wstring, sizeof(std::wstring), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_wstring_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::wstring*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__wstring, sizeof(std::wstring), soap->type, soap->arrayType), 0, SOAP_TYPE_std__wstring, 0, sizeof(std::wstring), 0, soap_copy_std__wstring); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_std__wstring(struct soap *soap, const std::wstring *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_std__wstring); + if (soap_out_std__wstring(soap, tag?tag:"string", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_std__wstring(struct soap *soap, std::wstring *p, const char *tag, const char *type) +{ + if ((p = soap_in_std__wstring(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 std::wstring * SOAP_FMAC2 soap_instantiate_std__wstring(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_std__wstring(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_std__wstring, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(std::wstring); + if (size) + *size = sizeof(std::wstring); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(std::wstring, n); + if (size) + *size = n * sizeof(std::wstring); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (std::wstring*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__wstring(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying std::wstring %p -> %p\n", q, p)); + *(std::wstring*)p = *(std::wstring*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__QName(struct soap *soap, std::string *p) +{ + (void)soap; /* appease -Wall -Werror */ + p->erase(); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__QName(struct soap *soap, const std::string *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__QName(struct soap *soap, const char *tag, int id, const std::string *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_xsd__QName), type) || soap_string_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC1 std::string * SOAP_FMAC2 soap_in_xsd__QName(struct soap *soap, const char *tag, std::string *s, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, type)) + return NULL; + if (!s) + s = soap_new_std__string(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { char *t; + s = (std::string*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__QName, sizeof(std::string), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_string_in(soap, 2, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::string*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_xsd__QName, sizeof(std::string), soap->type, soap->arrayType), 0, SOAP_TYPE_xsd__QName, 0, sizeof(std::string), 0, soap_copy_xsd__QName); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__QName(struct soap *soap, const std::string *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_xsd__QName); + if (soap_out_xsd__QName(soap, tag?tag:"xsd:QName", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::string * SOAP_FMAC4 soap_get_xsd__QName(struct soap *soap, std::string *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__QName(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 std::string * SOAP_FMAC2 soap_instantiate_xsd__QName(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__QName(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__QName, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(std::string); + if (size) + *size = sizeof(std::string); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(std::string, n); + if (size) + *size = n * sizeof(std::string); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (std::string*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__QName(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying std::string %p -> %p\n", q, p)); + *(std::string*)p = *(std::string*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__string(struct soap *soap, std::string *p) +{ + (void)soap; /* appease -Wall -Werror */ + p->erase(); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__string(struct soap *soap, const std::string *a) +{ (void)soap; (void)a; /* appease -Wall -Werror */ +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__string(struct soap *soap, const char *tag, int id, const std::string *s, const char *type) +{ + if ((soap->mode & SOAP_C_NILSTRING) && s->empty()) + return soap_element_null(soap, tag, id, type); + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, s, SOAP_TYPE_std__string), type) || soap_string_out(soap, s->c_str(), 0) || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 std::string * SOAP_FMAC4 soap_in_std__string(struct soap *soap, const char *tag, std::string *s, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!s) + s = soap_new_std__string(soap, -1); + if (soap->null) + if (s) + s->erase(); + if (soap->body && !*soap->href) + { char *t; + s = (std::string*)soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__string, sizeof(std::string), soap->type, soap->arrayType); + if (s) + { if (!(t = soap_string_in(soap, 1, 0, -1))) + return NULL; + s->assign(t); + } + } + else + s = (std::string*)soap_id_forward(soap, soap->href, soap_class_id_enter(soap, soap->id, s, SOAP_TYPE_std__string, sizeof(std::string), soap->type, soap->arrayType), 0, SOAP_TYPE_std__string, 0, sizeof(std::string), 0, soap_copy_std__string); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return s; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_std__string(struct soap *soap, const std::string *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_std__string); + if (soap_out_std__string(soap, tag?tag:"string", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 std::string * SOAP_FMAC4 soap_get_std__string(struct soap *soap, std::string *p, const char *tag, const char *type) +{ + if ((p = soap_in_std__string(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 std::string * SOAP_FMAC2 soap_instantiate_std__string(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_std__string(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_std__string, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(std::string); + if (size) + *size = sizeof(std::string); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(std::string, n); + if (size) + *size = n * sizeof(std::string); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (std::string*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__string(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying std::string %p -> %p\n", q, p)); + *(std::string*)p = *(std::string*)q; +} + +void xsd__anyType::soap_default(struct soap *soap) +{ + this->soap = soap; + this->xsd__anyType::__item = NULL; + /* transient soap skipped */ +} + +void xsd__anyType::soap_serialize(struct soap *soap) const +{ +#ifndef WITH_NOIDREF + (void)soap; /* appease -Wall -Werror */ + /* transient soap skipped */ +#endif +} + +int xsd__anyType::soap_out(struct soap *soap, const char *tag, int id, const char *type) const +{ + return soap_out_xsd__anyType(soap, tag, id, this, type); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__anyType(struct soap *soap, const char *tag, int id, const xsd__anyType *a, const char *type) +{ + return soap_outliteral(soap, tag, &(a->xsd__anyType::__item), NULL); +} + +void *xsd__anyType::soap_in(struct soap *soap, const char *tag, const char *type) +{ return soap_in_xsd__anyType(soap, tag, this, type); +} + +SOAP_FMAC3 xsd__anyType * SOAP_FMAC4 soap_in_xsd__anyType(struct soap *soap, const char *tag, xsd__anyType *a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!(a = (xsd__anyType *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_xsd__anyType, sizeof(xsd__anyType), soap->type, soap->arrayType))) + { soap->error = SOAP_TAG_MISMATCH; + return NULL; + } + soap_revert(soap); + *soap->id = '\0'; + if (soap->alloced) + { a->soap_default(soap); + if (soap->clist->type != SOAP_TYPE_xsd__anyType) + return (xsd__anyType *)a->soap_in(soap, tag, type); + } + if (!soap_inliteral(soap, tag, &(a->xsd__anyType::__item))) + return NULL; + return a; +} + +int xsd__anyType::soap_put(struct soap *soap, const char *tag, const char *type) const +{ + register int id = soap_embed(soap, (void*)this, NULL, 0, tag, SOAP_TYPE_xsd__anyType); + if (this->soap_out(soap, tag?tag:"xsd:anyType", id, type)) + return soap->error; + return soap_putindependent(soap); +} + +void *xsd__anyType::soap_get(struct soap *soap, const char *tag, const char *type) +{ + return soap_get_xsd__anyType(soap, this, tag, type); +} + +SOAP_FMAC3 xsd__anyType * SOAP_FMAC4 soap_get_xsd__anyType(struct soap *soap, xsd__anyType *p, const char *tag, const char *type) +{ + if ((p = soap_in_xsd__anyType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 xsd__anyType * SOAP_FMAC2 soap_instantiate_xsd__anyType(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__anyType(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_xsd__anyType, n, soap_fdelete); + if (!cp) + return NULL; + if (type && !soap_match_tag(soap, type, "xsd:ID")) + { cp->type = SOAP_TYPE_xsd__ID_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__ID_); + if (size) + *size = sizeof(xsd__ID_); + ((xsd__ID_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__ID_, n); + if (size) + *size = n * sizeof(xsd__ID_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__ID_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__ID_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:IDREF")) + { cp->type = SOAP_TYPE_xsd__IDREF_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__IDREF_); + if (size) + *size = sizeof(xsd__IDREF_); + ((xsd__IDREF_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__IDREF_, n); + if (size) + *size = n * sizeof(xsd__IDREF_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__IDREF_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__IDREF_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:QName")) + { cp->type = SOAP_TYPE_xsd__QName_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__QName_); + if (size) + *size = sizeof(xsd__QName_); + ((xsd__QName_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__QName_, n); + if (size) + *size = n * sizeof(xsd__QName_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__QName_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__QName_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:anyURI")) + { cp->type = SOAP_TYPE_xsd__anyURI_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__anyURI_); + if (size) + *size = sizeof(xsd__anyURI_); + ((xsd__anyURI_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__anyURI_, n); + if (size) + *size = n * sizeof(xsd__anyURI_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__anyURI_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__anyURI_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:base64Binary")) + { cp->type = SOAP_TYPE_xsd__base64Binary; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__base64Binary); + if (size) + *size = sizeof(xsd__base64Binary); + ((xsd__base64Binary*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__base64Binary, n); + if (size) + *size = n * sizeof(xsd__base64Binary); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__base64Binary*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__base64Binary*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:boolean")) + { cp->type = SOAP_TYPE_xsd__boolean; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__boolean); + if (size) + *size = sizeof(xsd__boolean); + ((xsd__boolean*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__boolean, n); + if (size) + *size = n * sizeof(xsd__boolean); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__boolean*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__boolean*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:byte")) + { cp->type = SOAP_TYPE_xsd__byte_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__byte_); + if (size) + *size = sizeof(xsd__byte_); + ((xsd__byte_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__byte_, n); + if (size) + *size = n * sizeof(xsd__byte_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__byte_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__byte_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:dateTime")) + { cp->type = SOAP_TYPE_xsd__dateTime; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__dateTime); + if (size) + *size = sizeof(xsd__dateTime); + ((xsd__dateTime*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__dateTime, n); + if (size) + *size = n * sizeof(xsd__dateTime); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__dateTime*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__dateTime*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:decimal")) + { cp->type = SOAP_TYPE_xsd__decimal_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__decimal_); + if (size) + *size = sizeof(xsd__decimal_); + ((xsd__decimal_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__decimal_, n); + if (size) + *size = n * sizeof(xsd__decimal_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__decimal_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__decimal_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:double")) + { cp->type = SOAP_TYPE_xsd__double; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__double); + if (size) + *size = sizeof(xsd__double); + ((xsd__double*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__double, n); + if (size) + *size = n * sizeof(xsd__double); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__double*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__double*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:duration")) + { cp->type = SOAP_TYPE_xsd__duration_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__duration_); + if (size) + *size = sizeof(xsd__duration_); + ((xsd__duration_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__duration_, n); + if (size) + *size = n * sizeof(xsd__duration_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__duration_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__duration_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:float")) + { cp->type = SOAP_TYPE_xsd__float; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__float); + if (size) + *size = sizeof(xsd__float); + ((xsd__float*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__float, n); + if (size) + *size = n * sizeof(xsd__float); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__float*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__float*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:int")) + { cp->type = SOAP_TYPE_xsd__int; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__int); + if (size) + *size = sizeof(xsd__int); + ((xsd__int*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__int, n); + if (size) + *size = n * sizeof(xsd__int); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__int*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__int*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:long")) + { cp->type = SOAP_TYPE_xsd__long; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__long); + if (size) + *size = sizeof(xsd__long); + ((xsd__long*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__long, n); + if (size) + *size = n * sizeof(xsd__long); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__long*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__long*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:short")) + { cp->type = SOAP_TYPE_xsd__short; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__short); + if (size) + *size = sizeof(xsd__short); + ((xsd__short*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__short, n); + if (size) + *size = n * sizeof(xsd__short); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__short*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__short*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:string")) + { cp->type = SOAP_TYPE_xsd__string; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__string); + if (size) + *size = sizeof(xsd__string); + ((xsd__string*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__string, n); + if (size) + *size = n * sizeof(xsd__string); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__string*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__string*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:unsignedByte")) + { cp->type = SOAP_TYPE_xsd__unsignedByte_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedByte_); + if (size) + *size = sizeof(xsd__unsignedByte_); + ((xsd__unsignedByte_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedByte_, n); + if (size) + *size = n * sizeof(xsd__unsignedByte_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedByte_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedByte_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:unsignedInt")) + { cp->type = SOAP_TYPE_xsd__unsignedInt; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedInt); + if (size) + *size = sizeof(xsd__unsignedInt); + ((xsd__unsignedInt*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedInt, n); + if (size) + *size = n * sizeof(xsd__unsignedInt); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedInt*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedInt*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:unsignedLong")) + { cp->type = SOAP_TYPE_xsd__unsignedLong; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedLong); + if (size) + *size = sizeof(xsd__unsignedLong); + ((xsd__unsignedLong*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedLong, n); + if (size) + *size = n * sizeof(xsd__unsignedLong); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedLong*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedLong*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "xsd:unsignedShort")) + { cp->type = SOAP_TYPE_xsd__unsignedShort; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__unsignedShort); + if (size) + *size = sizeof(xsd__unsignedShort); + ((xsd__unsignedShort*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__unsignedShort, n); + if (size) + *size = n * sizeof(xsd__unsignedShort); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__unsignedShort*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__unsignedShort*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns3:char")) + { cp->type = SOAP_TYPE_ns3__char__; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns3__char__); + if (size) + *size = sizeof(ns3__char__); + ((ns3__char__*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns3__char__, n); + if (size) + *size = n * sizeof(ns3__char__); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns3__char__*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns3__char__*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns3:duration")) + { cp->type = SOAP_TYPE_ns3__duration__; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns3__duration__); + if (size) + *size = sizeof(ns3__duration__); + ((ns3__duration__*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns3__duration__, n); + if (size) + *size = n * sizeof(ns3__duration__); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns3__duration__*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns3__duration__*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns3:guid")) + { cp->type = SOAP_TYPE_ns3__guid__; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns3__guid__); + if (size) + *size = sizeof(ns3__guid__); + ((ns3__guid__*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns3__guid__, n); + if (size) + *size = n * sizeof(ns3__guid__); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns3__guid__*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns3__guid__*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns4:ClientLib.Architecture")) + { cp->type = SOAP_TYPE_ns4__ClientLib_Architecture_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns4__ClientLib_Architecture_); + if (size) + *size = sizeof(ns4__ClientLib_Architecture_); + ((ns4__ClientLib_Architecture_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns4__ClientLib_Architecture_, n); + if (size) + *size = n * sizeof(ns4__ClientLib_Architecture_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns4__ClientLib_Architecture_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns4__ClientLib_Architecture_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns4:ClientLib.ClientType")) + { cp->type = SOAP_TYPE_ns4__ClientLib_ClientType_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns4__ClientLib_ClientType_); + if (size) + *size = sizeof(ns4__ClientLib_ClientType_); + ((ns4__ClientLib_ClientType_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns4__ClientLib_ClientType_, n); + if (size) + *size = n * sizeof(ns4__ClientLib_ClientType_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns4__ClientLib_ClientType_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns4__ClientLib_ClientType_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns4:HaveSolutionResponse.SolutionType")) + { cp->type = SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns4__HaveSolutionResponse_SolutionType_); + if (size) + *size = sizeof(ns4__HaveSolutionResponse_SolutionType_); + ((ns4__HaveSolutionResponse_SolutionType_*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns4__HaveSolutionResponse_SolutionType_, n); + if (size) + *size = n * sizeof(ns4__HaveSolutionResponse_SolutionType_); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns4__HaveSolutionResponse_SolutionType_*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns4__HaveSolutionResponse_SolutionType_*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:ClientLib")) + { cp->type = SOAP_TYPE_ns1__ClientLib; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ClientLib); + if (size) + *size = sizeof(ns1__ClientLib); + ((ns1__ClientLib*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ClientLib, n); + if (size) + *size = n * sizeof(ns1__ClientLib); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ClientLib*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ClientLib*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:Application")) + { cp->type = SOAP_TYPE_ns1__Application; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__Application); + if (size) + *size = sizeof(ns1__Application); + ((ns1__Application*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__Application, n); + if (size) + *size = n * sizeof(ns1__Application); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__Application*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__Application*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:AppAdditionalInfo")) + { cp->type = SOAP_TYPE_ns1__AppAdditionalInfo; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__AppAdditionalInfo); + if (size) + *size = sizeof(ns1__AppAdditionalInfo); + ((ns1__AppAdditionalInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__AppAdditionalInfo, n); + if (size) + *size = n * sizeof(ns1__AppAdditionalInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__AppAdditionalInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__AppAdditionalInfo*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:DumpAdditionalInfo")) + { cp->type = SOAP_TYPE_ns1__DumpAdditionalInfo; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__DumpAdditionalInfo); + if (size) + *size = sizeof(ns1__DumpAdditionalInfo); + ((ns1__DumpAdditionalInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__DumpAdditionalInfo, n); + if (size) + *size = n * sizeof(ns1__DumpAdditionalInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__DumpAdditionalInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__DumpAdditionalInfo*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:ArrayOfModuleSymbolInfo")) + { cp->type = SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ArrayOfModuleSymbolInfo); + if (size) + *size = sizeof(ns1__ArrayOfModuleSymbolInfo); + ((ns1__ArrayOfModuleSymbolInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ArrayOfModuleSymbolInfo, n); + if (size) + *size = n * sizeof(ns1__ArrayOfModuleSymbolInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ArrayOfModuleSymbolInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ArrayOfModuleSymbolInfo*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:ModuleSymbolInfo")) + { cp->type = SOAP_TYPE_ns1__ModuleSymbolInfo; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ModuleSymbolInfo); + if (size) + *size = sizeof(ns1__ModuleSymbolInfo); + ((ns1__ModuleSymbolInfo*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ModuleSymbolInfo, n); + if (size) + *size = n * sizeof(ns1__ModuleSymbolInfo); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ModuleSymbolInfo*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ModuleSymbolInfo*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:Pdb70File")) + { cp->type = SOAP_TYPE_ns1__Pdb70File; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__Pdb70File); + if (size) + *size = sizeof(ns1__Pdb70File); + ((ns1__Pdb70File*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__Pdb70File, n); + if (size) + *size = n * sizeof(ns1__Pdb70File); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__Pdb70File*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__Pdb70File*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:Response")) + { cp->type = SOAP_TYPE_ns1__Response; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__Response); + if (size) + *size = sizeof(ns1__Response); + ((ns1__Response*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__Response, n); + if (size) + *size = n * sizeof(ns1__Response); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__Response*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__Response*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns5:ArrayOfstring")) + { cp->type = SOAP_TYPE_ns5__ArrayOfstring; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns5__ArrayOfstring); + if (size) + *size = sizeof(ns5__ArrayOfstring); + ((ns5__ArrayOfstring*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns5__ArrayOfstring, n); + if (size) + *size = n * sizeof(ns5__ArrayOfstring); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns5__ArrayOfstring*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns5__ArrayOfstring*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:StopResponse")) + { cp->type = SOAP_TYPE_ns1__StopResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__StopResponse); + if (size) + *size = sizeof(ns1__StopResponse); + ((ns1__StopResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__StopResponse, n); + if (size) + *size = n * sizeof(ns1__StopResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__StopResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__StopResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:ErrorResponse")) + { cp->type = SOAP_TYPE_ns1__ErrorResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__ErrorResponse); + if (size) + *size = sizeof(ns1__ErrorResponse); + ((ns1__ErrorResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__ErrorResponse, n); + if (size) + *size = n * sizeof(ns1__ErrorResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__ErrorResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__ErrorResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:HaveSolutionResponse")) + { cp->type = SOAP_TYPE_ns1__HaveSolutionResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__HaveSolutionResponse); + if (size) + *size = sizeof(ns1__HaveSolutionResponse); + ((ns1__HaveSolutionResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__HaveSolutionResponse, n); + if (size) + *size = n * sizeof(ns1__HaveSolutionResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__HaveSolutionResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__HaveSolutionResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedSymbolsThenMiniDumpResponse")) + { cp->type = SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedSymbolsThenMiniDumpResponse); + if (size) + *size = sizeof(ns1__NeedSymbolsThenMiniDumpResponse); + ((ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedSymbolsThenMiniDumpResponse, n); + if (size) + *size = n * sizeof(ns1__NeedSymbolsThenMiniDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedSymbolsThenMiniDumpResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedMiniDumpResponse")) + { cp->type = SOAP_TYPE_ns1__NeedMiniDumpResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedMiniDumpResponse); + if (size) + *size = sizeof(ns1__NeedMiniDumpResponse); + ((ns1__NeedMiniDumpResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedMiniDumpResponse, n); + if (size) + *size = n * sizeof(ns1__NeedMiniDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedMiniDumpResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedMiniDumpResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedFullDumpResponse")) + { cp->type = SOAP_TYPE_ns1__NeedFullDumpResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedFullDumpResponse); + if (size) + *size = sizeof(ns1__NeedFullDumpResponse); + ((ns1__NeedFullDumpResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedFullDumpResponse, n); + if (size) + *size = n * sizeof(ns1__NeedFullDumpResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedFullDumpResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedFullDumpResponse*)cp->ptr; + } + if (type && !soap_match_tag(soap, type, "ns1:NeedMoreInfoResponse")) + { cp->type = SOAP_TYPE_ns1__NeedMoreInfoResponse; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(ns1__NeedMoreInfoResponse); + if (size) + *size = sizeof(ns1__NeedMoreInfoResponse); + ((ns1__NeedMoreInfoResponse*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(ns1__NeedMoreInfoResponse, n); + if (size) + *size = n * sizeof(ns1__NeedMoreInfoResponse); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((ns1__NeedMoreInfoResponse*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (ns1__NeedMoreInfoResponse*)cp->ptr; + } + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(xsd__anyType); + if (size) + *size = sizeof(xsd__anyType); + ((xsd__anyType*)cp->ptr)->soap = soap; + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(xsd__anyType, n); + if (size) + *size = n * sizeof(xsd__anyType); + if (cp->ptr) + for (int i = 0; i < n; i++) + ((xsd__anyType*)cp->ptr)[i].soap = soap; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (xsd__anyType*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__anyType(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying xsd__anyType %p -> %p\n", q, p)); + *(xsd__anyType*)p = *(xsd__anyType*)q; +} + +#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) +{ +#ifndef WITH_NOIDREF + (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); +#endif +} + +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); + (void)soap; (void)tag; (void)id; (void)type; + 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_ARRAY(struct SOAP_ENV__Fault, n); + if (size) + *size = n * sizeof(struct SOAP_ENV__Fault); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + 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)tt; (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) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_serialize_string(soap, &a->SOAP_ENV__Text); +#endif +} + +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) +{ + (void)soap; (void)tag; (void)id; (void)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_ARRAY(struct SOAP_ENV__Reason, n); + if (size) + *size = n * sizeof(struct SOAP_ENV__Reason); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + 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)tt; (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->__any = NULL; + a->__type = 0; + a->fault = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_markelement(soap, a->fault, a->__type); +#endif +} + +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) +{ + (void)soap; (void)tag; (void)id; (void)type; + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Detail), type)) + return soap->error; + soap_outliteral(soap, "-any", &a->__any, NULL); + if (soap_putelement(soap, a->fault, "fault", -1, a->__type)) + return soap->error; + 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___any = 1; + size_t soap_flag_fault = 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_ARRAY(struct SOAP_ENV__Detail, n); + if (size) + *size = n * sizeof(struct SOAP_ENV__Detail); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + 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)tt; (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) +{ +#ifndef WITH_NOIDREF + (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); +#endif +} + +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); + (void)soap; (void)tag; (void)id; (void)type; + 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_ARRAY(struct SOAP_ENV__Code, n); + if (size) + *size = n * sizeof(struct SOAP_ENV__Code); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + 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)tt; (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) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ +#endif +} + +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) +{ + (void)soap; (void)tag; (void)id; (void)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_ARRAY(struct SOAP_ENV__Header, n); + if (size) + *size = n * sizeof(struct SOAP_ENV__Header); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + 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)tt; (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___ns1__UploadSymbol(struct soap *soap, struct __ns1__UploadSymbol *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->ns1__UploadSymbol = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadSymbol(struct soap *soap, const struct __ns1__UploadSymbol *a) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_serialize_PointerTo_ns1__UploadSymbol(soap, &a->ns1__UploadSymbol); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadSymbol(struct soap *soap, const char *tag, int id, const struct __ns1__UploadSymbol *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)type; + if (soap_out_PointerTo_ns1__UploadSymbol(soap, "ns1:UploadSymbol", -1, &a->ns1__UploadSymbol, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadSymbol * SOAP_FMAC4 soap_in___ns1__UploadSymbol(struct soap *soap, const char *tag, struct __ns1__UploadSymbol *a, const char *type) +{ + size_t soap_flag_ns1__UploadSymbol = 1; + short soap_flag; + a = (struct __ns1__UploadSymbol *)soap_id_enter(soap, "", a, SOAP_TYPE___ns1__UploadSymbol, sizeof(struct __ns1__UploadSymbol), 0, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___ns1__UploadSymbol(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_ns1__UploadSymbol && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_ns1__UploadSymbol(soap, "ns1:UploadSymbol", &a->ns1__UploadSymbol, "")) + { soap_flag_ns1__UploadSymbol--; + continue; + } + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadSymbol(struct soap *soap, const struct __ns1__UploadSymbol *a, const char *tag, const char *type) +{ + register int id = 0; + if (soap_out___ns1__UploadSymbol(soap, tag?tag:"-ns1:UploadSymbol", id, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadSymbol * SOAP_FMAC4 soap_get___ns1__UploadSymbol(struct soap *soap, struct __ns1__UploadSymbol *p, const char *tag, const char *type) +{ + if ((p = soap_in___ns1__UploadSymbol(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 struct __ns1__UploadSymbol * SOAP_FMAC2 soap_instantiate___ns1__UploadSymbol(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___ns1__UploadSymbol(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns1__UploadSymbol, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(struct __ns1__UploadSymbol); + if (size) + *size = sizeof(struct __ns1__UploadSymbol); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(struct __ns1__UploadSymbol, n); + if (size) + *size = n * sizeof(struct __ns1__UploadSymbol); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (struct __ns1__UploadSymbol*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadSymbol(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct __ns1__UploadSymbol %p -> %p\n", q, p)); + *(struct __ns1__UploadSymbol*)p = *(struct __ns1__UploadSymbol*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__RejectedToSendAdditionalInfo(struct soap *soap, struct __ns1__RejectedToSendAdditionalInfo *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->ns1__RejectedToSendAdditionalInfo = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__RejectedToSendAdditionalInfo(struct soap *soap, const struct __ns1__RejectedToSendAdditionalInfo *a) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, &a->ns1__RejectedToSendAdditionalInfo); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__RejectedToSendAdditionalInfo(struct soap *soap, const char *tag, int id, const struct __ns1__RejectedToSendAdditionalInfo *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)type; + if (soap_out_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, "ns1:RejectedToSendAdditionalInfo", -1, &a->ns1__RejectedToSendAdditionalInfo, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_in___ns1__RejectedToSendAdditionalInfo(struct soap *soap, const char *tag, struct __ns1__RejectedToSendAdditionalInfo *a, const char *type) +{ + size_t soap_flag_ns1__RejectedToSendAdditionalInfo = 1; + short soap_flag; + a = (struct __ns1__RejectedToSendAdditionalInfo *)soap_id_enter(soap, "", a, SOAP_TYPE___ns1__RejectedToSendAdditionalInfo, sizeof(struct __ns1__RejectedToSendAdditionalInfo), 0, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___ns1__RejectedToSendAdditionalInfo(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_ns1__RejectedToSendAdditionalInfo && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, "ns1:RejectedToSendAdditionalInfo", &a->ns1__RejectedToSendAdditionalInfo, "")) + { soap_flag_ns1__RejectedToSendAdditionalInfo--; + continue; + } + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__RejectedToSendAdditionalInfo(struct soap *soap, const struct __ns1__RejectedToSendAdditionalInfo *a, const char *tag, const char *type) +{ + register int id = 0; + if (soap_out___ns1__RejectedToSendAdditionalInfo(soap, tag?tag:"-ns1:RejectedToSendAdditionalInfo", id, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_get___ns1__RejectedToSendAdditionalInfo(struct soap *soap, struct __ns1__RejectedToSendAdditionalInfo *p, const char *tag, const char *type) +{ + if ((p = soap_in___ns1__RejectedToSendAdditionalInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 struct __ns1__RejectedToSendAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns1__RejectedToSendAdditionalInfo(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___ns1__RejectedToSendAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns1__RejectedToSendAdditionalInfo, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(struct __ns1__RejectedToSendAdditionalInfo); + if (size) + *size = sizeof(struct __ns1__RejectedToSendAdditionalInfo); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(struct __ns1__RejectedToSendAdditionalInfo, n); + if (size) + *size = n * sizeof(struct __ns1__RejectedToSendAdditionalInfo); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (struct __ns1__RejectedToSendAdditionalInfo*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__RejectedToSendAdditionalInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct __ns1__RejectedToSendAdditionalInfo %p -> %p\n", q, p)); + *(struct __ns1__RejectedToSendAdditionalInfo*)p = *(struct __ns1__RejectedToSendAdditionalInfo*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__UploadAdditionalInfo(struct soap *soap, struct __ns1__UploadAdditionalInfo *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->ns1__UploadAdditionalInfo = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadAdditionalInfo(struct soap *soap, const struct __ns1__UploadAdditionalInfo *a) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_serialize_PointerTo_ns1__UploadAdditionalInfo(soap, &a->ns1__UploadAdditionalInfo); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, int id, const struct __ns1__UploadAdditionalInfo *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)type; + if (soap_out_PointerTo_ns1__UploadAdditionalInfo(soap, "ns1:UploadAdditionalInfo", -1, &a->ns1__UploadAdditionalInfo, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_in___ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, struct __ns1__UploadAdditionalInfo *a, const char *type) +{ + size_t soap_flag_ns1__UploadAdditionalInfo = 1; + short soap_flag; + a = (struct __ns1__UploadAdditionalInfo *)soap_id_enter(soap, "", a, SOAP_TYPE___ns1__UploadAdditionalInfo, sizeof(struct __ns1__UploadAdditionalInfo), 0, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___ns1__UploadAdditionalInfo(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_ns1__UploadAdditionalInfo && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_ns1__UploadAdditionalInfo(soap, "ns1:UploadAdditionalInfo", &a->ns1__UploadAdditionalInfo, "")) + { soap_flag_ns1__UploadAdditionalInfo--; + continue; + } + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadAdditionalInfo(struct soap *soap, const struct __ns1__UploadAdditionalInfo *a, const char *tag, const char *type) +{ + register int id = 0; + if (soap_out___ns1__UploadAdditionalInfo(soap, tag?tag:"-ns1:UploadAdditionalInfo", id, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_get___ns1__UploadAdditionalInfo(struct soap *soap, struct __ns1__UploadAdditionalInfo *p, const char *tag, const char *type) +{ + if ((p = soap_in___ns1__UploadAdditionalInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 struct __ns1__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns1__UploadAdditionalInfo(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___ns1__UploadAdditionalInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns1__UploadAdditionalInfo, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(struct __ns1__UploadAdditionalInfo); + if (size) + *size = sizeof(struct __ns1__UploadAdditionalInfo); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(struct __ns1__UploadAdditionalInfo, n); + if (size) + *size = n * sizeof(struct __ns1__UploadAdditionalInfo); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (struct __ns1__UploadAdditionalInfo*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadAdditionalInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct __ns1__UploadAdditionalInfo %p -> %p\n", q, p)); + *(struct __ns1__UploadAdditionalInfo*)p = *(struct __ns1__UploadAdditionalInfo*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__UploadFullDump(struct soap *soap, struct __ns1__UploadFullDump *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->ns1__UploadFullDump = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadFullDump(struct soap *soap, const struct __ns1__UploadFullDump *a) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_serialize_PointerTo_ns1__UploadFullDump(soap, &a->ns1__UploadFullDump); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadFullDump(struct soap *soap, const char *tag, int id, const struct __ns1__UploadFullDump *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)type; + if (soap_out_PointerTo_ns1__UploadFullDump(soap, "ns1:UploadFullDump", -1, &a->ns1__UploadFullDump, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadFullDump * SOAP_FMAC4 soap_in___ns1__UploadFullDump(struct soap *soap, const char *tag, struct __ns1__UploadFullDump *a, const char *type) +{ + size_t soap_flag_ns1__UploadFullDump = 1; + short soap_flag; + a = (struct __ns1__UploadFullDump *)soap_id_enter(soap, "", a, SOAP_TYPE___ns1__UploadFullDump, sizeof(struct __ns1__UploadFullDump), 0, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___ns1__UploadFullDump(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_ns1__UploadFullDump && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_ns1__UploadFullDump(soap, "ns1:UploadFullDump", &a->ns1__UploadFullDump, "")) + { soap_flag_ns1__UploadFullDump--; + continue; + } + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadFullDump(struct soap *soap, const struct __ns1__UploadFullDump *a, const char *tag, const char *type) +{ + register int id = 0; + if (soap_out___ns1__UploadFullDump(soap, tag?tag:"-ns1:UploadFullDump", id, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadFullDump * SOAP_FMAC4 soap_get___ns1__UploadFullDump(struct soap *soap, struct __ns1__UploadFullDump *p, const char *tag, const char *type) +{ + if ((p = soap_in___ns1__UploadFullDump(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 struct __ns1__UploadFullDump * SOAP_FMAC2 soap_instantiate___ns1__UploadFullDump(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___ns1__UploadFullDump(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns1__UploadFullDump, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(struct __ns1__UploadFullDump); + if (size) + *size = sizeof(struct __ns1__UploadFullDump); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(struct __ns1__UploadFullDump, n); + if (size) + *size = n * sizeof(struct __ns1__UploadFullDump); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (struct __ns1__UploadFullDump*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadFullDump(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct __ns1__UploadFullDump %p -> %p\n", q, p)); + *(struct __ns1__UploadFullDump*)p = *(struct __ns1__UploadFullDump*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__UploadMiniDump(struct soap *soap, struct __ns1__UploadMiniDump *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->ns1__UploadMiniDump = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadMiniDump(struct soap *soap, const struct __ns1__UploadMiniDump *a) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_serialize_PointerTo_ns1__UploadMiniDump(soap, &a->ns1__UploadMiniDump); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadMiniDump(struct soap *soap, const char *tag, int id, const struct __ns1__UploadMiniDump *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)type; + if (soap_out_PointerTo_ns1__UploadMiniDump(soap, "ns1:UploadMiniDump", -1, &a->ns1__UploadMiniDump, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadMiniDump * SOAP_FMAC4 soap_in___ns1__UploadMiniDump(struct soap *soap, const char *tag, struct __ns1__UploadMiniDump *a, const char *type) +{ + size_t soap_flag_ns1__UploadMiniDump = 1; + short soap_flag; + a = (struct __ns1__UploadMiniDump *)soap_id_enter(soap, "", a, SOAP_TYPE___ns1__UploadMiniDump, sizeof(struct __ns1__UploadMiniDump), 0, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___ns1__UploadMiniDump(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_ns1__UploadMiniDump && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_ns1__UploadMiniDump(soap, "ns1:UploadMiniDump", &a->ns1__UploadMiniDump, "")) + { soap_flag_ns1__UploadMiniDump--; + continue; + } + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadMiniDump(struct soap *soap, const struct __ns1__UploadMiniDump *a, const char *tag, const char *type) +{ + register int id = 0; + if (soap_out___ns1__UploadMiniDump(soap, tag?tag:"-ns1:UploadMiniDump", id, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__UploadMiniDump * SOAP_FMAC4 soap_get___ns1__UploadMiniDump(struct soap *soap, struct __ns1__UploadMiniDump *p, const char *tag, const char *type) +{ + if ((p = soap_in___ns1__UploadMiniDump(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 struct __ns1__UploadMiniDump * SOAP_FMAC2 soap_instantiate___ns1__UploadMiniDump(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___ns1__UploadMiniDump(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns1__UploadMiniDump, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(struct __ns1__UploadMiniDump); + if (size) + *size = sizeof(struct __ns1__UploadMiniDump); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(struct __ns1__UploadMiniDump, n); + if (size) + *size = n * sizeof(struct __ns1__UploadMiniDump); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (struct __ns1__UploadMiniDump*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadMiniDump(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct __ns1__UploadMiniDump %p -> %p\n", q, p)); + *(struct __ns1__UploadMiniDump*)p = *(struct __ns1__UploadMiniDump*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__Hello(struct soap *soap, struct __ns1__Hello *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->ns1__Hello = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__Hello(struct soap *soap, const struct __ns1__Hello *a) +{ +#ifndef WITH_NOIDREF + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_serialize_PointerTo_ns1__Hello(soap, &a->ns1__Hello); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__Hello(struct soap *soap, const char *tag, int id, const struct __ns1__Hello *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)type; + if (soap_out_PointerTo_ns1__Hello(soap, "ns1:Hello", -1, &a->ns1__Hello, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__Hello * SOAP_FMAC4 soap_in___ns1__Hello(struct soap *soap, const char *tag, struct __ns1__Hello *a, const char *type) +{ + size_t soap_flag_ns1__Hello = 1; + short soap_flag; + a = (struct __ns1__Hello *)soap_id_enter(soap, "", a, SOAP_TYPE___ns1__Hello, sizeof(struct __ns1__Hello), 0, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___ns1__Hello(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_ns1__Hello && soap->error == SOAP_TAG_MISMATCH) + if (soap_in_PointerTo_ns1__Hello(soap, "ns1:Hello", &a->ns1__Hello, "")) + { soap_flag_ns1__Hello--; + continue; + } + if (soap->error == SOAP_TAG_MISMATCH) + if (soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__Hello(struct soap *soap, const struct __ns1__Hello *a, const char *tag, const char *type) +{ + register int id = 0; + if (soap_out___ns1__Hello(soap, tag?tag:"-ns1:Hello", id, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __ns1__Hello * SOAP_FMAC4 soap_get___ns1__Hello(struct soap *soap, struct __ns1__Hello *p, const char *tag, const char *type) +{ + if ((p = soap_in___ns1__Hello(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 struct __ns1__Hello * SOAP_FMAC2 soap_instantiate___ns1__Hello(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___ns1__Hello(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE___ns1__Hello, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(struct __ns1__Hello); + if (size) + *size = sizeof(struct __ns1__Hello); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(struct __ns1__Hello, n); + if (size) + *size = n * sizeof(struct __ns1__Hello); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (struct __ns1__Hello*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__Hello(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct __ns1__Hello %p -> %p\n", q, p)); + *(struct __ns1__Hello*)p = *(struct __ns1__Hello*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default__xop__Include(struct soap *soap, struct _xop__Include *a) +{ (void)soap; + (void)soap; /* appease -Wall -Werror */ + a->__size = 0; + a->__ptr = NULL; + a->id = NULL; + a->type = NULL; + a->options = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize__xop__Include(struct soap *soap, struct _xop__Include const*a) +{ +#ifndef WITH_NOIDREF + if (a->__ptr && !soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE__xop__Include)) + if (a->id || a->type) + soap->mode |= SOAP_ENC_DIME; +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__xop__Include(struct soap *soap, const char *tag, int id, const struct _xop__Include *a, const char *type) +{ +#ifndef WITH_LEANER + id = soap_attachment(soap, tag, id, a, (struct soap_array*)&a->__ptr, a->id, a->type, a->options, 1, type, SOAP_TYPE__xop__Include); +#else + id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE__xop__Include); +#endif + if (id < 0) + return soap->error; + if (soap_element_begin_out(soap, tag, id, type)) + return soap->error; + if (soap_putbase64(soap, a->__ptr, a->__size)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct _xop__Include * SOAP_FMAC4 soap_in__xop__Include(struct soap *soap, const char *tag, struct _xop__Include *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, ":base64Binary") && soap_match_tag(soap, soap->type, ":base64")) + { soap->error = SOAP_TYPE; + return NULL; + } + a = (struct _xop__Include *)soap_id_enter(soap, soap->id, a, SOAP_TYPE__xop__Include, sizeof(struct _xop__Include), 0, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default__xop__Include(soap, a); + if (soap->body && !*soap->href) + { + a->__ptr = soap_getbase64(soap, &a->__size, 0); +#ifndef WITH_LEANER + if (soap_xop_forward(soap, &a->__ptr, &a->__size, &a->id, &a->type, &a->options)) + return NULL; +#endif + if ((!a->__ptr && soap->error) || soap_element_end_in(soap, tag)) + return NULL; + } + else + { +#ifndef WITH_LEANER + if (*soap->href != '#') + { if (soap_dime_forward(soap, &a->__ptr, &a->__size, &a->id, &a->type, &a->options)) + return NULL; + } + else +#endif + a = (struct _xop__Include *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE__xop__Include, 0, sizeof(struct _xop__Include), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__xop__Include(struct soap *soap, const struct _xop__Include *a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE__xop__Include); + if (soap_out__xop__Include(soap, tag?tag:"xop:Include", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct _xop__Include * SOAP_FMAC4 soap_get__xop__Include(struct soap *soap, struct _xop__Include *p, const char *tag, const char *type) +{ + if ((p = soap_in__xop__Include(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC1 struct _xop__Include * SOAP_FMAC2 soap_instantiate__xop__Include(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__xop__Include(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE__xop__Include, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(struct _xop__Include); + if (size) + *size = sizeof(struct _xop__Include); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(struct _xop__Include, n); + if (size) + *size = n * sizeof(struct _xop__Include); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (struct _xop__Include*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__xop__Include(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct _xop__Include %p -> %p\n", q, p)); + *(struct _xop__Include*)p = *(struct _xop__Include*)q; +} + +#ifndef WITH_NOGLOBAL + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Reason)) + soap_serialize_SOAP_ENV__Reason(soap, *a); +#endif +} + +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) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Detail)) + soap_serialize_SOAP_ENV__Detail(soap, *a); +#endif +} + +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) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Code)) + soap_serialize_SOAP_ENV__Code(soap, *a); +#endif +} + +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 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadSymbolResponse)) + (*a)->soap_serialize(soap); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, const char *tag, int id, _ns1__UploadSymbolResponse *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadSymbolResponse); + if (id < 0) + return soap->error; + return (*a)->soap_out(soap, tag, id, type); +} + +SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, const char *tag, _ns1__UploadSymbolResponse **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (_ns1__UploadSymbolResponse **)soap_malloc(soap, sizeof(_ns1__UploadSymbolResponse *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = (_ns1__UploadSymbolResponse *)soap_instantiate__ns1__UploadSymbolResponse(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) + return NULL; + } + else + { _ns1__UploadSymbolResponse ** p = (_ns1__UploadSymbolResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadSymbolResponse, sizeof(_ns1__UploadSymbolResponse), 0); + a = p; + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse *const*a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadSymbolResponse); + if (soap_out_PointerTo_ns1__UploadSymbolResponse(soap, tag?tag:"ns1:UploadSymbolResponse", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_ns1__UploadSymbolResponse(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadSymbol)) + (*a)->soap_serialize(soap); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadSymbol(struct soap *soap, const char *tag, int id, _ns1__UploadSymbol *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadSymbol); + if (id < 0) + return soap->error; + return (*a)->soap_out(soap, tag, id, type); +} + +SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadSymbol(struct soap *soap, const char *tag, _ns1__UploadSymbol **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (_ns1__UploadSymbol **)soap_malloc(soap, sizeof(_ns1__UploadSymbol *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = (_ns1__UploadSymbol *)soap_instantiate__ns1__UploadSymbol(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) + return NULL; + } + else + { _ns1__UploadSymbol ** p = (_ns1__UploadSymbol **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadSymbol, sizeof(_ns1__UploadSymbol), 0); + a = p; + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *const*a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadSymbol); + if (soap_out_PointerTo_ns1__UploadSymbol(soap, tag?tag:"ns1:UploadSymbol", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_ns1__UploadSymbol(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, _ns1__RejectedToSendAdditionalInfoResponse *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse)) + (*a)->soap_serialize(soap); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, const char *tag, int id, _ns1__RejectedToSendAdditionalInfoResponse *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse); + if (id < 0) + return soap->error; + return (*a)->soap_out(soap, tag, id, type); +} + +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, const char *tag, _ns1__RejectedToSendAdditionalInfoResponse **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (_ns1__RejectedToSendAdditionalInfoResponse **)soap_malloc(soap, sizeof(_ns1__RejectedToSendAdditionalInfoResponse *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = (_ns1__RejectedToSendAdditionalInfoResponse *)soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) + return NULL; + } + else + { _ns1__RejectedToSendAdditionalInfoResponse ** p = (_ns1__RejectedToSendAdditionalInfoResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse, sizeof(_ns1__RejectedToSendAdditionalInfoResponse), 0); + a = p; + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, _ns1__RejectedToSendAdditionalInfoResponse *const*a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfoResponse); + if (soap_out_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, tag?tag:"ns1:RejectedToSendAdditionalInfoResponse", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, _ns1__RejectedToSendAdditionalInfoResponse **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap *soap, _ns1__RejectedToSendAdditionalInfo *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo)) + (*a)->soap_serialize(soap); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap *soap, const char *tag, int id, _ns1__RejectedToSendAdditionalInfo *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo); + if (id < 0) + return soap->error; + return (*a)->soap_out(soap, tag, id, type); +} + +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap *soap, const char *tag, _ns1__RejectedToSendAdditionalInfo **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (_ns1__RejectedToSendAdditionalInfo **)soap_malloc(soap, sizeof(_ns1__RejectedToSendAdditionalInfo *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = (_ns1__RejectedToSendAdditionalInfo *)soap_instantiate__ns1__RejectedToSendAdditionalInfo(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) + return NULL; + } + else + { _ns1__RejectedToSendAdditionalInfo ** p = (_ns1__RejectedToSendAdditionalInfo **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__RejectedToSendAdditionalInfo, sizeof(_ns1__RejectedToSendAdditionalInfo), 0); + a = p; + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap *soap, _ns1__RejectedToSendAdditionalInfo *const*a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfo); + if (soap_out_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, tag?tag:"ns1:RejectedToSendAdditionalInfo", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap *soap, _ns1__RejectedToSendAdditionalInfo **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse)) + (*a)->soap_serialize(soap); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, int id, _ns1__UploadAdditionalInfoResponse *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadAdditionalInfoResponse); + if (id < 0) + return soap->error; + return (*a)->soap_out(soap, tag, id, type); +} + +SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfoResponse **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (_ns1__UploadAdditionalInfoResponse **)soap_malloc(soap, sizeof(_ns1__UploadAdditionalInfoResponse *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = (_ns1__UploadAdditionalInfoResponse *)soap_instantiate__ns1__UploadAdditionalInfoResponse(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) + return NULL; + } + else + { _ns1__UploadAdditionalInfoResponse ** p = (_ns1__UploadAdditionalInfoResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, sizeof(_ns1__UploadAdditionalInfoResponse), 0); + a = p; + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse *const*a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse); + if (soap_out_PointerTo_ns1__UploadAdditionalInfoResponse(soap, tag?tag:"ns1:UploadAdditionalInfoResponse", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_ns1__UploadAdditionalInfoResponse(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadAdditionalInfo)) + (*a)->soap_serialize(soap); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, int id, _ns1__UploadAdditionalInfo *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadAdditionalInfo); + if (id < 0) + return soap->error; + return (*a)->soap_out(soap, tag, id, type); +} + +SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfo **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (_ns1__UploadAdditionalInfo **)soap_malloc(soap, sizeof(_ns1__UploadAdditionalInfo *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = (_ns1__UploadAdditionalInfo *)soap_instantiate__ns1__UploadAdditionalInfo(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) + return NULL; } else - { cp->ptr = (void*)SOAP_NEW(struct _xop__Include[n]); - if (!cp->ptr) - { soap->error = SOAP_EOM; + { _ns1__UploadAdditionalInfo ** p = (_ns1__UploadAdditionalInfo **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadAdditionalInfo, sizeof(_ns1__UploadAdditionalInfo), 0); + a = p; + if (soap->body && soap_element_end_in(soap, tag)) return NULL; - } - if (size) - *size = n * sizeof(struct _xop__Include); } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); - return (struct _xop__Include*)cp->ptr; + return a; } -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__xop__Include(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *const*a, const char *tag, const char *type) { - (void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct _xop__Include %p -> %p\n", q, p)); - *(struct _xop__Include*)p = *(struct _xop__Include*)q; + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo); + if (soap_out_PointerTo_ns1__UploadAdditionalInfo(soap, tag?tag:"ns1:UploadAdditionalInfo", id, a, type)) + return soap->error; + return soap_putindependent(soap); } -#ifndef WITH_NOGLOBAL +SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_ns1__UploadAdditionalInfo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadFullDumpResponse(struct soap *soap, _ns1__UploadFullDumpResponse *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Reason)) - soap_serialize_SOAP_ENV__Reason(soap, *a); +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadFullDumpResponse)) + (*a)->soap_serialize(soap); +#endif } -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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadFullDumpResponse(struct soap *soap, const char *tag, int id, _ns1__UploadFullDumpResponse *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_SOAP_ENV__Reason); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadFullDumpResponse); if (id < 0) return soap->error; - return soap_out_SOAP_ENV__Reason(soap, tag, id, *a, type); + return (*a)->soap_out(soap, tag, id, 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) +SOAP_FMAC3 _ns1__UploadFullDumpResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadFullDumpResponse(struct soap *soap, const char *tag, _ns1__UploadFullDumpResponse **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 *)))) + if (!(a = (_ns1__UploadFullDumpResponse **)soap_malloc(soap, sizeof(_ns1__UploadFullDumpResponse *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = soap_in_SOAP_ENV__Reason(soap, tag, *a, type))) + if (!(*a = (_ns1__UploadFullDumpResponse *)soap_instantiate__ns1__UploadFullDumpResponse(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) 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); + { _ns1__UploadFullDumpResponse ** p = (_ns1__UploadFullDumpResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadFullDumpResponse, sizeof(_ns1__UploadFullDumpResponse), 0); + a = p; 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) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadFullDumpResponse(struct soap *soap, _ns1__UploadFullDumpResponse *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)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadFullDumpResponse); + if (soap_out_PointerTo_ns1__UploadFullDumpResponse(soap, tag?tag:"ns1:UploadFullDumpResponse", 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) +SOAP_FMAC3 _ns1__UploadFullDumpResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadFullDumpResponse(struct soap *soap, _ns1__UploadFullDumpResponse **p, const char *tag, const char *type) { - if ((p = soap_in_PointerToSOAP_ENV__Reason(soap, tag, p, type))) + if ((p = soap_in_PointerTo_ns1__UploadFullDumpResponse(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) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadFullDump(struct soap *soap, _ns1__UploadFullDump *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Detail)) - soap_serialize_SOAP_ENV__Detail(soap, *a); +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadFullDump)) + (*a)->soap_serialize(soap); +#endif } -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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadFullDump(struct soap *soap, const char *tag, int id, _ns1__UploadFullDump *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_SOAP_ENV__Detail); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadFullDump); if (id < 0) return soap->error; - return soap_out_SOAP_ENV__Detail(soap, tag, id, *a, type); + return (*a)->soap_out(soap, tag, id, 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) +SOAP_FMAC3 _ns1__UploadFullDump ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadFullDump(struct soap *soap, const char *tag, _ns1__UploadFullDump **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 *)))) + if (!(a = (_ns1__UploadFullDump **)soap_malloc(soap, sizeof(_ns1__UploadFullDump *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = soap_in_SOAP_ENV__Detail(soap, tag, *a, type))) + if (!(*a = (_ns1__UploadFullDump *)soap_instantiate__ns1__UploadFullDump(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) 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); + { _ns1__UploadFullDump ** p = (_ns1__UploadFullDump **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadFullDump, sizeof(_ns1__UploadFullDump), 0); + a = p; 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) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadFullDump(struct soap *soap, _ns1__UploadFullDump *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)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadFullDump); + if (soap_out_PointerTo_ns1__UploadFullDump(soap, tag?tag:"ns1:UploadFullDump", 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) +SOAP_FMAC3 _ns1__UploadFullDump ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadFullDump(struct soap *soap, _ns1__UploadFullDump **p, const char *tag, const char *type) { - if ((p = soap_in_PointerToSOAP_ENV__Detail(soap, tag, p, type))) + if ((p = soap_in_PointerTo_ns1__UploadFullDump(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) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Code)) - soap_serialize_SOAP_ENV__Code(soap, *a); +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadMiniDumpResponse)) + (*a)->soap_serialize(soap); +#endif } -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) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, int id, _ns1__UploadMiniDumpResponse *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_SOAP_ENV__Code); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadMiniDumpResponse); if (id < 0) return soap->error; - return soap_out_SOAP_ENV__Code(soap, tag, id, *a, type); + return (*a)->soap_out(soap, tag, id, 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) +SOAP_FMAC3 _ns1__UploadMiniDumpResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, _ns1__UploadMiniDumpResponse **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 *)))) + if (!(a = (_ns1__UploadMiniDumpResponse **)soap_malloc(soap, sizeof(_ns1__UploadMiniDumpResponse *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = soap_in_SOAP_ENV__Code(soap, tag, *a, type))) + if (!(*a = (_ns1__UploadMiniDumpResponse *)soap_instantiate__ns1__UploadMiniDumpResponse(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) 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); + { _ns1__UploadMiniDumpResponse ** p = (_ns1__UploadMiniDumpResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadMiniDumpResponse, sizeof(_ns1__UploadMiniDumpResponse), 0); + a = p; 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) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse *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)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse); + if (soap_out_PointerTo_ns1__UploadMiniDumpResponse(soap, tag?tag:"ns1:UploadMiniDumpResponse", 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) +SOAP_FMAC3 _ns1__UploadMiniDumpResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse **p, const char *tag, const char *type) { - if ((p = soap_in_PointerToSOAP_ENV__Code(soap, tag, p, type))) + if ((p = soap_in_PointerTo_ns1__UploadMiniDumpResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -#endif - -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadSymbolResponse)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadMiniDump)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, const char *tag, int id, _ns1__UploadSymbolResponse *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadMiniDump(struct soap *soap, const char *tag, int id, _ns1__UploadMiniDump *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadSymbolResponse); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadMiniDump); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, const char *tag, _ns1__UploadSymbolResponse **a, const char *type) +SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadMiniDump(struct soap *soap, const char *tag, _ns1__UploadMiniDump **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__UploadSymbolResponse **)soap_malloc(soap, sizeof(_ns1__UploadSymbolResponse *)))) + if (!(a = (_ns1__UploadMiniDump **)soap_malloc(soap, sizeof(_ns1__UploadMiniDump *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__UploadSymbolResponse *)soap_instantiate__ns1__UploadSymbolResponse(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (_ns1__UploadMiniDump *)soap_instantiate__ns1__UploadMiniDump(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { _ns1__UploadSymbolResponse ** p = (_ns1__UploadSymbolResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadSymbolResponse, sizeof(_ns1__UploadSymbolResponse), 0); + { _ns1__UploadMiniDump ** p = (_ns1__UploadMiniDump **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadMiniDump, sizeof(_ns1__UploadMiniDump), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5429,54 +14327,56 @@ SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__Uploa return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadSymbolResponse); - if (soap_out_PointerTo_ns1__UploadSymbolResponse(soap, tag?tag:"ns1:UploadSymbolResponse", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadMiniDump); + if (soap_out_PointerTo_ns1__UploadMiniDump(soap, tag?tag:"ns1:UploadMiniDump", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse **p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__UploadSymbolResponse(soap, tag, p, type))) + if ((p = soap_in_PointerTo_ns1__UploadMiniDump(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadSymbol)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__HelloResponse)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadSymbol(struct soap *soap, const char *tag, int id, _ns1__UploadSymbol *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__HelloResponse(struct soap *soap, const char *tag, int id, _ns1__HelloResponse *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadSymbol); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__HelloResponse); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadSymbol(struct soap *soap, const char *tag, _ns1__UploadSymbol **a, const char *type) +SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__HelloResponse(struct soap *soap, const char *tag, _ns1__HelloResponse **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__UploadSymbol **)soap_malloc(soap, sizeof(_ns1__UploadSymbol *)))) + if (!(a = (_ns1__HelloResponse **)soap_malloc(soap, sizeof(_ns1__HelloResponse *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__UploadSymbol *)soap_instantiate__ns1__UploadSymbol(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (_ns1__HelloResponse *)soap_instantiate__ns1__HelloResponse(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { _ns1__UploadSymbol ** p = (_ns1__UploadSymbol **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadSymbol, sizeof(_ns1__UploadSymbol), 0); + { _ns1__HelloResponse ** p = (_ns1__HelloResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__HelloResponse, sizeof(_ns1__HelloResponse), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5484,54 +14384,56 @@ SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadSymbol( return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadSymbol); - if (soap_out_PointerTo_ns1__UploadSymbol(soap, tag?tag:"ns1:UploadSymbol", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__HelloResponse); + if (soap_out_PointerTo_ns1__HelloResponse(soap, tag?tag:"ns1:HelloResponse", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol **p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__UploadSymbol(soap, tag, p, type))) + if ((p = soap_in_PointerTo_ns1__HelloResponse(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__Hello(struct soap *soap, _ns1__Hello *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__ns1__Hello)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, int id, _ns1__UploadAdditionalInfoResponse *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__Hello(struct soap *soap, const char *tag, int id, _ns1__Hello *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadAdditionalInfoResponse); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__Hello); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfoResponse **a, const char *type) +SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_in_PointerTo_ns1__Hello(struct soap *soap, const char *tag, _ns1__Hello **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__UploadAdditionalInfoResponse **)soap_malloc(soap, sizeof(_ns1__UploadAdditionalInfoResponse *)))) + if (!(a = (_ns1__Hello **)soap_malloc(soap, sizeof(_ns1__Hello *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__UploadAdditionalInfoResponse *)soap_instantiate__ns1__UploadAdditionalInfoResponse(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (_ns1__Hello *)soap_instantiate__ns1__Hello(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { _ns1__UploadAdditionalInfoResponse ** p = (_ns1__UploadAdditionalInfoResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadAdditionalInfoResponse, sizeof(_ns1__UploadAdditionalInfoResponse), 0); + { _ns1__Hello ** p = (_ns1__Hello **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__Hello, sizeof(_ns1__Hello), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5539,54 +14441,56 @@ SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_in_PointerTo_ns return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__Hello(struct soap *soap, _ns1__Hello *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse); - if (soap_out_PointerTo_ns1__UploadAdditionalInfoResponse(soap, tag?tag:"ns1:UploadAdditionalInfoResponse", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__Hello); + if (soap_out_PointerTo_ns1__Hello(soap, tag?tag:"ns1:Hello", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse **p, const char *tag, const char *type) +SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_get_PointerTo_ns1__Hello(struct soap *soap, _ns1__Hello **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__UploadAdditionalInfoResponse(soap, tag, p, type))) + if ((p = soap_in_PointerTo_ns1__Hello(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons5__ArrayOfstring(struct soap *soap, ns5__ArrayOfstring *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadAdditionalInfo)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_ns5__ArrayOfstring)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, int id, _ns1__UploadAdditionalInfo *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons5__ArrayOfstring(struct soap *soap, const char *tag, int id, ns5__ArrayOfstring *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadAdditionalInfo); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns5__ArrayOfstring); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, const char *tag, _ns1__UploadAdditionalInfo **a, const char *type) +SOAP_FMAC3 ns5__ArrayOfstring ** SOAP_FMAC4 soap_in_PointerTons5__ArrayOfstring(struct soap *soap, const char *tag, ns5__ArrayOfstring **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__UploadAdditionalInfo **)soap_malloc(soap, sizeof(_ns1__UploadAdditionalInfo *)))) + if (!(a = (ns5__ArrayOfstring **)soap_malloc(soap, sizeof(ns5__ArrayOfstring *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__UploadAdditionalInfo *)soap_instantiate__ns1__UploadAdditionalInfo(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (ns5__ArrayOfstring *)soap_instantiate_ns5__ArrayOfstring(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { _ns1__UploadAdditionalInfo ** p = (_ns1__UploadAdditionalInfo **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadAdditionalInfo, sizeof(_ns1__UploadAdditionalInfo), 0); + { ns5__ArrayOfstring ** p = (ns5__ArrayOfstring **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns5__ArrayOfstring, sizeof(ns5__ArrayOfstring), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5594,109 +14498,136 @@ SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTo_ns1__Uploa return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons5__ArrayOfstring(struct soap *soap, ns5__ArrayOfstring *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo); - if (soap_out_PointerTo_ns1__UploadAdditionalInfo(soap, tag?tag:"ns1:UploadAdditionalInfo", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons5__ArrayOfstring); + if (soap_out_PointerTons5__ArrayOfstring(soap, tag?tag:"ns5:ArrayOfstring", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo **p, const char *tag, const char *type) +SOAP_FMAC3 ns5__ArrayOfstring ** SOAP_FMAC4 soap_get_PointerTons5__ArrayOfstring(struct soap *soap, ns5__ArrayOfstring **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__UploadAdditionalInfo(soap, tag, p, type))) + if ((p = soap_in_PointerTons5__ArrayOfstring(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTobool(struct soap *soap, bool *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadMiniDumpResponse)) - (*a)->soap_serialize(soap); +#ifndef WITH_NOIDREF + soap_reference(soap, *a, SOAP_TYPE_bool); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, int id, _ns1__UploadMiniDumpResponse *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTobool(struct soap *soap, const char *tag, int id, bool *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadMiniDumpResponse); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_bool); if (id < 0) return soap->error; - return (*a)->soap_out(soap, tag, id, type); + return soap_out_bool(soap, tag, id, *a, type); } -SOAP_FMAC3 _ns1__UploadMiniDumpResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, const char *tag, _ns1__UploadMiniDumpResponse **a, const char *type) +SOAP_FMAC3 bool ** SOAP_FMAC4 soap_in_PointerTobool(struct soap *soap, const char *tag, bool **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__UploadMiniDumpResponse **)soap_malloc(soap, sizeof(_ns1__UploadMiniDumpResponse *)))) + if (!(a = (bool **)soap_malloc(soap, sizeof(bool *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__UploadMiniDumpResponse *)soap_instantiate__ns1__UploadMiniDumpResponse(soap, -1, soap->type, soap->arrayType, NULL))) - return NULL; - (*a)->soap_default(soap); - if (!(*a)->soap_in(soap, tag, NULL)) + if (!(*a = soap_in_bool(soap, tag, *a, type))) return NULL; } else - { _ns1__UploadMiniDumpResponse ** p = (_ns1__UploadMiniDumpResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadMiniDumpResponse, sizeof(_ns1__UploadMiniDumpResponse), 0); - a = p; + { a = (bool **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_bool, sizeof(bool), 0); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTobool(struct soap *soap, bool *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse); - if (soap_out_PointerTo_ns1__UploadMiniDumpResponse(soap, tag?tag:"ns1:UploadMiniDumpResponse", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTobool); + if (soap_out_PointerTobool(soap, tag?tag:"boolean", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__UploadMiniDumpResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse **p, const char *tag, const char *type) +SOAP_FMAC3 bool ** SOAP_FMAC4 soap_get_PointerTobool(struct soap *soap, bool **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__UploadMiniDumpResponse(soap, tag, p, type))) + if ((p = soap_in_PointerTobool(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Response(struct soap *soap, ns1__Response *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__UploadMiniDump)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_ns1__Response)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadMiniDump(struct soap *soap, const char *tag, int id, _ns1__UploadMiniDump *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Response(struct soap *soap, const char *tag, int id, ns1__Response *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__UploadMiniDump); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__Response); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadMiniDump(struct soap *soap, const char *tag, _ns1__UploadMiniDump **a, const char *type) +SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_in_PointerTons1__Response(struct soap *soap, const char *tag, ns1__Response **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__UploadMiniDump **)soap_malloc(soap, sizeof(_ns1__UploadMiniDump *)))) + if (!(a = (ns1__Response **)soap_malloc(soap, sizeof(ns1__Response *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__UploadMiniDump *)soap_instantiate__ns1__UploadMiniDump(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (ns1__Response *)soap_instantiate_ns1__Response(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { _ns1__UploadMiniDump ** p = (_ns1__UploadMiniDump **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__UploadMiniDump, sizeof(_ns1__UploadMiniDump), 0); + { ns1__Response ** p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__Response, sizeof(ns1__Response), 0); + if (!p && soap->error == SOAP_HREF) + { soap->error = SOAP_OK; + p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__StopResponse, sizeof(ns1__StopResponse), 0); + } + if (!p && soap->error == SOAP_HREF) + { soap->error = SOAP_OK; + p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__ErrorResponse, sizeof(ns1__ErrorResponse), 0); + } + if (!p && soap->error == SOAP_HREF) + { soap->error = SOAP_OK; + p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__HaveSolutionResponse, sizeof(ns1__HaveSolutionResponse), 0); + } + if (!p && soap->error == SOAP_HREF) + { soap->error = SOAP_OK; + p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse, sizeof(ns1__NeedSymbolsThenMiniDumpResponse), 0); + } + if (!p && soap->error == SOAP_HREF) + { soap->error = SOAP_OK; + p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__NeedMiniDumpResponse, sizeof(ns1__NeedMiniDumpResponse), 0); + } + if (!p && soap->error == SOAP_HREF) + { soap->error = SOAP_OK; + p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__NeedFullDumpResponse, sizeof(ns1__NeedFullDumpResponse), 0); + } + if (!p && soap->error == SOAP_HREF) + { soap->error = SOAP_OK; + p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__NeedMoreInfoResponse, sizeof(ns1__NeedMoreInfoResponse), 0); + } a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5704,54 +14635,56 @@ SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadMiniD return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Response(struct soap *soap, ns1__Response *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__UploadMiniDump); - if (soap_out_PointerTo_ns1__UploadMiniDump(soap, tag?tag:"ns1:UploadMiniDump", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__Response); + if (soap_out_PointerTons1__Response(soap, tag?tag:"ns1:Response", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump **p, const char *tag, const char *type) +SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_get_PointerTons1__Response(struct soap *soap, ns1__Response **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__UploadMiniDump(soap, tag, p, type))) + if ((p = soap_in_PointerTons1__Response(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__ArrayOfModuleSymbolInfo(struct soap *soap, ns1__ArrayOfModuleSymbolInfo *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__HelloResponse)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__HelloResponse(struct soap *soap, const char *tag, int id, _ns1__HelloResponse *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__ArrayOfModuleSymbolInfo(struct soap *soap, const char *tag, int id, ns1__ArrayOfModuleSymbolInfo *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__HelloResponse); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__HelloResponse(struct soap *soap, const char *tag, _ns1__HelloResponse **a, const char *type) +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo ** SOAP_FMAC4 soap_in_PointerTons1__ArrayOfModuleSymbolInfo(struct soap *soap, const char *tag, ns1__ArrayOfModuleSymbolInfo **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__HelloResponse **)soap_malloc(soap, sizeof(_ns1__HelloResponse *)))) + if (!(a = (ns1__ArrayOfModuleSymbolInfo **)soap_malloc(soap, sizeof(ns1__ArrayOfModuleSymbolInfo *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__HelloResponse *)soap_instantiate__ns1__HelloResponse(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (ns1__ArrayOfModuleSymbolInfo *)soap_instantiate_ns1__ArrayOfModuleSymbolInfo(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { _ns1__HelloResponse ** p = (_ns1__HelloResponse **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__HelloResponse, sizeof(_ns1__HelloResponse), 0); + { ns1__ArrayOfModuleSymbolInfo ** p = (ns1__ArrayOfModuleSymbolInfo **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo, sizeof(ns1__ArrayOfModuleSymbolInfo), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5759,54 +14692,56 @@ SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__HelloRespons return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__ArrayOfModuleSymbolInfo(struct soap *soap, ns1__ArrayOfModuleSymbolInfo *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__HelloResponse); - if (soap_out_PointerTo_ns1__HelloResponse(soap, tag?tag:"ns1:HelloResponse", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__ArrayOfModuleSymbolInfo); + if (soap_out_PointerTons1__ArrayOfModuleSymbolInfo(soap, tag?tag:"ns1:ArrayOfModuleSymbolInfo", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse **p, const char *tag, const char *type) +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo ** SOAP_FMAC4 soap_get_PointerTons1__ArrayOfModuleSymbolInfo(struct soap *soap, ns1__ArrayOfModuleSymbolInfo **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__HelloResponse(soap, tag, p, type))) + if ((p = soap_in_PointerTons1__ArrayOfModuleSymbolInfo(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__Hello(struct soap *soap, _ns1__Hello *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__DumpAdditionalInfo(struct soap *soap, ns1__DumpAdditionalInfo *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE__ns1__Hello)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_ns1__DumpAdditionalInfo)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__Hello(struct soap *soap, const char *tag, int id, _ns1__Hello *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__DumpAdditionalInfo(struct soap *soap, const char *tag, int id, ns1__DumpAdditionalInfo *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__ns1__Hello); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__DumpAdditionalInfo); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_in_PointerTo_ns1__Hello(struct soap *soap, const char *tag, _ns1__Hello **a, const char *type) +SOAP_FMAC3 ns1__DumpAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTons1__DumpAdditionalInfo(struct soap *soap, const char *tag, ns1__DumpAdditionalInfo **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (_ns1__Hello **)soap_malloc(soap, sizeof(_ns1__Hello *)))) + if (!(a = (ns1__DumpAdditionalInfo **)soap_malloc(soap, sizeof(ns1__DumpAdditionalInfo *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (_ns1__Hello *)soap_instantiate__ns1__Hello(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (ns1__DumpAdditionalInfo *)soap_instantiate_ns1__DumpAdditionalInfo(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { _ns1__Hello ** p = (_ns1__Hello **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__ns1__Hello, sizeof(_ns1__Hello), 0); + { ns1__DumpAdditionalInfo ** p = (ns1__DumpAdditionalInfo **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__DumpAdditionalInfo, sizeof(ns1__DumpAdditionalInfo), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5814,54 +14749,56 @@ SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_in_PointerTo_ns1__Hello(struct soap *s return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__Hello(struct soap *soap, _ns1__Hello *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__DumpAdditionalInfo(struct soap *soap, ns1__DumpAdditionalInfo *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTo_ns1__Hello); - if (soap_out_PointerTo_ns1__Hello(soap, tag?tag:"ns1:Hello", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__DumpAdditionalInfo); + if (soap_out_PointerTons1__DumpAdditionalInfo(soap, tag?tag:"ns1:DumpAdditionalInfo", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_get_PointerTo_ns1__Hello(struct soap *soap, _ns1__Hello **p, const char *tag, const char *type) +SOAP_FMAC3 ns1__DumpAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTons1__DumpAdditionalInfo(struct soap *soap, ns1__DumpAdditionalInfo **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTo_ns1__Hello(soap, tag, p, type))) + if ((p = soap_in_PointerTons1__DumpAdditionalInfo(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Response(struct soap *soap, ns1__Response *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__AppAdditionalInfo(struct soap *soap, ns1__AppAdditionalInfo *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE_ns1__Response)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_ns1__AppAdditionalInfo)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Response(struct soap *soap, const char *tag, int id, ns1__Response *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__AppAdditionalInfo(struct soap *soap, const char *tag, int id, ns1__AppAdditionalInfo *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__Response); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__AppAdditionalInfo); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_in_PointerTons1__Response(struct soap *soap, const char *tag, ns1__Response **a, const char *type) +SOAP_FMAC3 ns1__AppAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTons1__AppAdditionalInfo(struct soap *soap, const char *tag, ns1__AppAdditionalInfo **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (ns1__Response **)soap_malloc(soap, sizeof(ns1__Response *)))) + if (!(a = (ns1__AppAdditionalInfo **)soap_malloc(soap, sizeof(ns1__AppAdditionalInfo *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (ns1__Response *)soap_instantiate_ns1__Response(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (ns1__AppAdditionalInfo *)soap_instantiate_ns1__AppAdditionalInfo(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { ns1__Response ** p = (ns1__Response **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__Response, sizeof(ns1__Response), 0); + { ns1__AppAdditionalInfo ** p = (ns1__AppAdditionalInfo **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__AppAdditionalInfo, sizeof(ns1__AppAdditionalInfo), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -5869,17 +14806,17 @@ SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_in_PointerTons1__Response(struct soa return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Response(struct soap *soap, ns1__Response *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__AppAdditionalInfo(struct soap *soap, ns1__AppAdditionalInfo *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__Response); - if (soap_out_PointerTons1__Response(soap, tag?tag:"ns1:Response", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__AppAdditionalInfo); + if (soap_out_PointerTons1__AppAdditionalInfo(soap, tag?tag:"ns1:AppAdditionalInfo", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_get_PointerTons1__Response(struct soap *soap, ns1__Response **p, const char *tag, const char *type) +SOAP_FMAC3 ns1__AppAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTons1__AppAdditionalInfo(struct soap *soap, ns1__AppAdditionalInfo **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTons1__Response(soap, tag, p, type))) + if ((p = soap_in_PointerTons1__AppAdditionalInfo(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; @@ -5887,8 +14824,10 @@ SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_get_PointerTons1__Response(struct so SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Application(struct soap *soap, ns1__Application *const*a) { +#ifndef WITH_NOIDREF if (!soap_reference(soap, *a, SOAP_TYPE_ns1__Application)) (*a)->soap_serialize(soap); +#endif } SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Application(struct soap *soap, const char *tag, int id, ns1__Application *const*a, const char *type) @@ -5942,8 +14881,10 @@ SOAP_FMAC3 ns1__Application ** SOAP_FMAC4 soap_get_PointerTons1__Application(str SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__ClientLib(struct soap *soap, ns1__ClientLib *const*a) { +#ifndef WITH_NOIDREF if (!soap_reference(soap, *a, SOAP_TYPE_ns1__ClientLib)) (*a)->soap_serialize(soap); +#endif } SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__ClientLib(struct soap *soap, const char *tag, int id, ns1__ClientLib *const*a, const char *type) @@ -5995,10 +14936,64 @@ SOAP_FMAC3 ns1__ClientLib ** SOAP_FMAC4 soap_get_PointerTons1__ClientLib(struct return p; } +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToint(struct soap *soap, int *const*a) +{ +#ifndef WITH_NOIDREF + soap_reference(soap, *a, SOAP_TYPE_int); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToint(struct soap *soap, const char *tag, int id, int *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_int); + if (id < 0) + return soap->error; + return soap_out_int(soap, tag, id, *a, type); +} + +SOAP_FMAC3 int ** SOAP_FMAC4 soap_in_PointerToint(struct soap *soap, const char *tag, int **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (int **)soap_malloc(soap, sizeof(int *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_int(soap, tag, *a, type))) + return NULL; + } + else + { a = (int **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_int, sizeof(int), 0); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToint(struct soap *soap, int *const*a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerToint); + if (soap_out_PointerToint(soap, tag?tag:"int", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int ** SOAP_FMAC4 soap_get_PointerToint(struct soap *soap, int **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerToint(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_xop__Include(struct soap *soap, struct _xop__Include *const*a) { +#ifndef WITH_NOIDREF if (*a) soap_serialize__xop__Include(soap, *a); +#endif } SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_xop__Include(struct soap *soap, const char *tag, int id, struct _xop__Include *const*a, const char *type) @@ -6046,38 +15041,97 @@ SOAP_FMAC3 struct _xop__Include ** SOAP_FMAC4 soap_get_PointerTo_xop__Include(st return p; } -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Solution(struct soap *soap, ns1__Solution *const*a) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Pdb70File(struct soap *soap, ns1__Pdb70File *const*a) +{ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_ns1__Pdb70File)) + (*a)->soap_serialize(soap); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Pdb70File(struct soap *soap, const char *tag, int id, ns1__Pdb70File *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__Pdb70File); + if (id < 0) + return soap->error; + return (*a)->soap_out(soap, tag, id, type); +} + +SOAP_FMAC3 ns1__Pdb70File ** SOAP_FMAC4 soap_in_PointerTons1__Pdb70File(struct soap *soap, const char *tag, ns1__Pdb70File **a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (ns1__Pdb70File **)soap_malloc(soap, sizeof(ns1__Pdb70File *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = (ns1__Pdb70File *)soap_instantiate_ns1__Pdb70File(soap, -1, soap->type, soap->arrayType, NULL))) + return NULL; + (*a)->soap_default(soap); + if (!(*a)->soap_in(soap, tag, NULL)) + return NULL; + } + else + { ns1__Pdb70File ** p = (ns1__Pdb70File **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__Pdb70File, sizeof(ns1__Pdb70File), 0); + a = p; + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Pdb70File(struct soap *soap, ns1__Pdb70File *const*a, const char *tag, const char *type) +{ + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__Pdb70File); + if (soap_out_PointerTons1__Pdb70File(soap, tag?tag:"ns1:Pdb70File", id, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 ns1__Pdb70File ** SOAP_FMAC4 soap_get_PointerTons1__Pdb70File(struct soap *soap, ns1__Pdb70File **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTons1__Pdb70File(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__ModuleSymbolInfo(struct soap *soap, ns1__ModuleSymbolInfo *const*a) { - if (!soap_reference(soap, *a, SOAP_TYPE_ns1__Solution)) +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_ns1__ModuleSymbolInfo)) (*a)->soap_serialize(soap); +#endif } -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Solution(struct soap *soap, const char *tag, int id, ns1__Solution *const*a, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__ModuleSymbolInfo(struct soap *soap, const char *tag, int id, ns1__ModuleSymbolInfo *const*a, const char *type) { - id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__Solution); + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns1__ModuleSymbolInfo); if (id < 0) return soap->error; return (*a)->soap_out(soap, tag, id, type); } -SOAP_FMAC3 ns1__Solution ** SOAP_FMAC4 soap_in_PointerTons1__Solution(struct soap *soap, const char *tag, ns1__Solution **a, const char *type) +SOAP_FMAC3 ns1__ModuleSymbolInfo ** SOAP_FMAC4 soap_in_PointerTons1__ModuleSymbolInfo(struct soap *soap, const char *tag, ns1__ModuleSymbolInfo **a, const char *type) { if (soap_element_begin_in(soap, tag, 1, NULL)) return NULL; if (!a) - if (!(a = (ns1__Solution **)soap_malloc(soap, sizeof(ns1__Solution *)))) + if (!(a = (ns1__ModuleSymbolInfo **)soap_malloc(soap, sizeof(ns1__ModuleSymbolInfo *)))) return NULL; *a = NULL; if (!soap->null && *soap->href != '#') { soap_revert(soap); - if (!(*a = (ns1__Solution *)soap_instantiate_ns1__Solution(soap, -1, soap->type, soap->arrayType, NULL))) + if (!(*a = (ns1__ModuleSymbolInfo *)soap_instantiate_ns1__ModuleSymbolInfo(soap, -1, soap->type, soap->arrayType, NULL))) return NULL; (*a)->soap_default(soap); if (!(*a)->soap_in(soap, tag, NULL)) return NULL; } else - { ns1__Solution ** p = (ns1__Solution **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__Solution, sizeof(ns1__Solution), 0); + { ns1__ModuleSymbolInfo ** p = (ns1__ModuleSymbolInfo **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_ns1__ModuleSymbolInfo, sizeof(ns1__ModuleSymbolInfo), 0); a = p; if (soap->body && soap_element_end_in(soap, tag)) return NULL; @@ -6085,17 +15139,17 @@ SOAP_FMAC3 ns1__Solution ** SOAP_FMAC4 soap_in_PointerTons1__Solution(struct soa return a; } -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Solution(struct soap *soap, ns1__Solution *const*a, const char *tag, const char *type) +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__ModuleSymbolInfo(struct soap *soap, ns1__ModuleSymbolInfo *const*a, const char *tag, const char *type) { - register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__Solution); - if (soap_out_PointerTons1__Solution(soap, tag?tag:"ns1:Solution", id, a, type)) + register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerTons1__ModuleSymbolInfo); + if (soap_out_PointerTons1__ModuleSymbolInfo(soap, tag?tag:"ns1:ModuleSymbolInfo", id, a, type)) return soap->error; return soap_putindependent(soap); } -SOAP_FMAC3 ns1__Solution ** SOAP_FMAC4 soap_get_PointerTons1__Solution(struct soap *soap, ns1__Solution **p, const char *tag, const char *type) +SOAP_FMAC3 ns1__ModuleSymbolInfo ** SOAP_FMAC4 soap_get_PointerTons1__ModuleSymbolInfo(struct soap *soap, ns1__ModuleSymbolInfo **p, const char *tag, const char *type) { - if ((p = soap_in_PointerTons1__Solution(soap, tag, p, type))) + if ((p = soap_in_PointerTons1__ModuleSymbolInfo(soap, tag, p, type))) if (soap_getindependent(soap)) return NULL; return p; @@ -6103,8 +15157,10 @@ SOAP_FMAC3 ns1__Solution ** SOAP_FMAC4 soap_get_PointerTons1__Solution(struct so SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTostd__wstring(struct soap *soap, std::wstring *const*a) { +#ifndef WITH_NOIDREF if (!soap_reference(soap, *a, SOAP_TYPE_std__wstring)) soap_serialize_std__wstring(soap, *a); +#endif } SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTostd__wstring(struct soap *soap, const char *tag, int id, std::wstring *const*a, const char *type) @@ -6154,7 +15210,9 @@ SOAP_FMAC3 std::wstring ** SOAP_FMAC4 soap_get_PointerTostd__wstring(struct soap SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap *soap, unsigned char *const*a) { +#ifndef WITH_NOIDREF soap_reference(soap, *a, SOAP_TYPE_unsignedByte); +#endif } SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap *soap, const char *tag, int id, unsigned char *const*a, const char *type) @@ -6202,6 +15260,13 @@ SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soa return p; } +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize__QName(struct soap *soap, char *const*a) +{ +#ifndef WITH_NOIDREF + soap_reference(soap, *a, SOAP_TYPE__QName); +#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); @@ -6209,7 +15274,7 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap *soap, const char *tag, in 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); + p = soap_instring(soap, tag, a, type, SOAP_TYPE__QName, 2, 0, -1); return p; } @@ -6241,7 +15306,9 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap *soap, char **a) SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap *soap, char *const*a) { +#ifndef WITH_NOIDREF soap_reference(soap, *a, SOAP_TYPE_string); +#endif } SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap *soap, const char *tag, int id, char *const*a, const char *type) @@ -6251,7 +15318,7 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap *soap, const char *tag, in 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); + p = soap_instring(soap, tag, a, type, SOAP_TYPE_string, 1, 0, -1); return p; } @@ -6271,6 +15338,178 @@ SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap *soap, char **p, const return p; } +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__vectorTemplateOfstd__wstring(struct soap *soap, std::vector*p) +{ + p->clear(); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__vectorTemplateOfstd__wstring(struct soap *soap, const std::vector*a) +{ +#ifndef WITH_NOIDREF + for (std::vector::const_iterator i = a->begin(); i != a->end(); ++i) + soap_serialize_std__wstring(soap, &(*i)); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__vectorTemplateOfstd__wstring(struct soap *soap, const char *tag, int id, const std::vector*a, const char *type) +{ + for (std::vector::const_iterator i = a->begin(); i != a->end(); ++i) + { + if (soap_out_std__wstring(soap, tag, id, &(*i), "")) + return soap->error; + } + return SOAP_OK; +} + +SOAP_FMAC3 std::vector* SOAP_FMAC4 soap_in_std__vectorTemplateOfstd__wstring(struct soap *soap, const char *tag, std::vector*a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + short soap_flag; + for (soap_flag = 0;; soap_flag = 1) + { std::wstring n; + if (tag && *tag != '-') + { if (soap_element_begin_in(soap, tag, 1, NULL)) + break; + soap_revert(soap); + } + soap_default_std__wstring(soap, &n); + if (tag && *tag != '-' && (*soap->id || *soap->href)) + { if (!soap_container_id_forward(soap, *soap->id?soap->id:soap->href, a, (size_t)a->size(), SOAP_TYPE_std__wstring, SOAP_TYPE_std__vectorTemplateOfstd__wstring, sizeof(std::wstring), 0)) + break; + if (!soap_in_std__wstring(soap, tag, NULL, "xsd:string")) + break; + } + else if (!soap_in_std__wstring(soap, tag, &n, "xsd:string")) + break; + if (!a && !(a = soap_new_std__vectorTemplateOfstd__wstring(soap, -1))) + return NULL; + soap_update_pointers(soap, (char*)&n, (char*)&n + sizeof(n), (char*)&(*a->insert(a->end(), n)), (char*)&n); + if (!tag || *tag == '-') + return a; + } + if (soap_flag && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { soap->error = SOAP_OK; + return a; + } + return NULL; +} + +SOAP_FMAC1 std::vector * SOAP_FMAC2 soap_instantiate_std__vectorTemplateOfstd__wstring(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_std__vectorTemplateOfstd__wstring(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_std__vectorTemplateOfstd__wstring, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(std::vector); + if (size) + *size = sizeof(std::vector); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(std::vector, n); + if (size) + *size = n * sizeof(std::vector); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (std::vector*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__vectorTemplateOfstd__wstring(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying std::vector %p -> %p\n", q, p)); + *(std::vector*)p = *(std::vector*)q; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap *soap, std::vector*p) +{ + p->clear(); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap *soap, const std::vector*a) +{ +#ifndef WITH_NOIDREF + for (std::vector::const_iterator i = a->begin(); i != a->end(); ++i) + soap_serialize_PointerTons1__ModuleSymbolInfo(soap, &(*i)); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap *soap, const char *tag, int id, const std::vector*a, const char *type) +{ + for (std::vector::const_iterator i = a->begin(); i != a->end(); ++i) + { + if (soap_out_PointerTons1__ModuleSymbolInfo(soap, tag, id, &(*i), "")) + return soap->error; + } + return SOAP_OK; +} + +SOAP_FMAC3 std::vector* SOAP_FMAC4 soap_in_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap *soap, const char *tag, std::vector*a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + short soap_flag; + for (soap_flag = 0;; soap_flag = 1) + { ns1__ModuleSymbolInfo *n; + if (tag && *tag != '-') + { if (soap_element_begin_in(soap, tag, 1, NULL)) + break; + soap_revert(soap); + } + n = NULL; + if (tag && *tag != '-' && (*soap->id || *soap->href)) + { if (!soap_container_id_forward(soap, *soap->id?soap->id:soap->href, a, (size_t)a->size(), SOAP_TYPE_ns1__ModuleSymbolInfo, SOAP_TYPE_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo, sizeof(ns1__ModuleSymbolInfo), 1)) + break; + if (!soap_in_PointerTons1__ModuleSymbolInfo(soap, tag, NULL, "ns1:ModuleSymbolInfo")) + break; + } + else if (!soap_in_PointerTons1__ModuleSymbolInfo(soap, tag, &n, "ns1:ModuleSymbolInfo")) + break; + if (!a && !(a = soap_new_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(soap, -1))) + return NULL; + a->push_back(n); + if (!tag || *tag == '-') + return a; + } + if (soap_flag && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { soap->error = SOAP_OK; + return a; + } + return NULL; +} + +SOAP_FMAC1 std::vector * SOAP_FMAC2 soap_instantiate_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(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_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:"")); + struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo, n, soap_fdelete); + if (!cp) + return NULL; + if (n < 0) + { cp->ptr = (void*)SOAP_NEW(std::vector); + if (size) + *size = sizeof(std::vector); + } + else + { cp->ptr = (void*)SOAP_NEW_ARRAY(std::vector, n); + if (size) + *size = n * sizeof(std::vector); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr)); + if (!cp->ptr) + soap->error = SOAP_EOM; + return (std::vector*)cp->ptr; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n) +{ + (void)soap; (void)tt; (void)st; (void)len; (void)n; /* appease -Wall -Werror */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying std::vector %p -> %p\n", q, p)); + *(std::vector*)p = *(std::vector*)q; +} + #if defined(__BORLANDC__) #pragma option pop #pragma option pop diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.cpp new file mode 100644 index 000000000..ebf0fada8 --- /dev/null +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.cpp @@ -0,0 +1,446 @@ +/* soapCustomBinding_DumpUploadService3_UploaderProxy.cpp + Generated by gSOAP 2.8.17r from DumpUploader.h + +Copyright(C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. +The generated code is released under one of the following licenses: +GPL or Genivia's license for commercial use. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +*/ + +#include "soapCustomBinding_DumpUploadService3_UploaderProxy.h" + +CustomBinding_DumpUploadService3_UploaderProxy::CustomBinding_DumpUploadService3_UploaderProxy() +{ CustomBinding_DumpUploadService3_UploaderProxy_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); +} + +CustomBinding_DumpUploadService3_UploaderProxy::CustomBinding_DumpUploadService3_UploaderProxy(const struct soap &_soap) : soap(_soap) +{ } + +CustomBinding_DumpUploadService3_UploaderProxy::CustomBinding_DumpUploadService3_UploaderProxy(const char *url) +{ CustomBinding_DumpUploadService3_UploaderProxy_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); + soap_endpoint = url; +} + +CustomBinding_DumpUploadService3_UploaderProxy::CustomBinding_DumpUploadService3_UploaderProxy(soap_mode iomode) +{ CustomBinding_DumpUploadService3_UploaderProxy_init(iomode, iomode); +} + +CustomBinding_DumpUploadService3_UploaderProxy::CustomBinding_DumpUploadService3_UploaderProxy(const char *url, soap_mode iomode) +{ CustomBinding_DumpUploadService3_UploaderProxy_init(iomode, iomode); + soap_endpoint = url; +} + +CustomBinding_DumpUploadService3_UploaderProxy::CustomBinding_DumpUploadService3_UploaderProxy(soap_mode imode, soap_mode omode) +{ CustomBinding_DumpUploadService3_UploaderProxy_init(imode, omode); +} + +CustomBinding_DumpUploadService3_UploaderProxy::~CustomBinding_DumpUploadService3_UploaderProxy() +{ } + +void CustomBinding_DumpUploadService3_UploaderProxy::CustomBinding_DumpUploadService3_UploaderProxy_init(soap_mode imode, soap_mode omode) +{ soap_imode(this, imode); + soap_omode(this, omode); + soap_endpoint = NULL; + static const struct Namespace namespaces[] = +{ + {"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://schemas.xmlsoap.org/soap/envelope/", NULL}, + {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://schemas.xmlsoap.org/soap/encoding/", NULL}, + {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL}, + {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL}, + {"xop", "http://www.w3.org/2004/08/xop/include", NULL, NULL}, + {"ns5", "http://schemas.microsoft.com/2003/10/Serialization/Arrays", NULL, NULL}, + {"ns3", "http://schemas.microsoft.com/2003/10/Serialization/", NULL, NULL}, + {"ns4", "http://schemas.datacontract.org/2004/07/DumpUploadService3", NULL, NULL}, + {"ns1", "https://www.drdump.com/services", NULL, NULL}, + {NULL, NULL, NULL, NULL} +}; + soap_set_namespaces(this, namespaces); +} + +void CustomBinding_DumpUploadService3_UploaderProxy::destroy() +{ soap_destroy(this); + soap_end(this); +} + +void CustomBinding_DumpUploadService3_UploaderProxy::reset() +{ destroy(); + soap_done(this); + soap_initialize(this); + CustomBinding_DumpUploadService3_UploaderProxy_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); +} + +void CustomBinding_DumpUploadService3_UploaderProxy::soap_noheader() +{ this->header = NULL; +} + +const SOAP_ENV__Header *CustomBinding_DumpUploadService3_UploaderProxy::soap_header() +{ return this->header; +} + +const SOAP_ENV__Fault *CustomBinding_DumpUploadService3_UploaderProxy::soap_fault() +{ return this->fault; +} + +const char *CustomBinding_DumpUploadService3_UploaderProxy::soap_fault_string() +{ return *soap_faultstring(this); +} + +const char *CustomBinding_DumpUploadService3_UploaderProxy::soap_fault_detail() +{ return *soap_faultdetail(this); +} + +int CustomBinding_DumpUploadService3_UploaderProxy::soap_close_socket() +{ return soap_closesock(this); +} + +int CustomBinding_DumpUploadService3_UploaderProxy::soap_force_close_socket() +{ return soap_force_closesock(this); +} + +void CustomBinding_DumpUploadService3_UploaderProxy::soap_print_fault(FILE *fd) +{ ::soap_print_fault(this, fd); +} + +#ifndef WITH_LEAN +#ifndef WITH_COMPAT +void CustomBinding_DumpUploadService3_UploaderProxy::soap_stream_fault(std::ostream& os) +{ ::soap_stream_fault(this, os); +} +#endif + +char *CustomBinding_DumpUploadService3_UploaderProxy::soap_sprint_fault(char *buf, size_t len) +{ return ::soap_sprint_fault(this, buf, len); +} +#endif + +int CustomBinding_DumpUploadService3_UploaderProxy::Hello(const char *endpoint, const char *soap_action, _ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse) +{ struct soap *soap = this; + struct __ns1__Hello soap_tmp___ns1__Hello; + if (endpoint) + soap_endpoint = endpoint; + if (soap_endpoint == NULL) + soap_endpoint = "http://localhost:59175/Service/DumpUploader3.svc"; + if (soap_action == NULL) + soap_action = "https://www.drdump.com/services/DumpUploadService3.Uploader/Hello"; + soap_begin(soap); + soap->encodingStyle = NULL; + soap_tmp___ns1__Hello.ns1__Hello = ns1__Hello; + soap_set_version(soap, 2); /* SOAP1.2 */ + soap_serializeheader(soap); + soap_serialize___ns1__Hello(soap, &soap_tmp___ns1__Hello); + if (soap_begin_count(soap)) + return soap->error; + if (soap->mode & SOAP_IO_LENGTH) + { if (soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__Hello(soap, &soap_tmp___ns1__Hello, "-ns1:Hello", 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_url(soap, soap_endpoint, NULL), soap_action) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__Hello(soap, &soap_tmp___ns1__Hello, "-ns1:Hello", NULL) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + if (!ns1__HelloResponse) + return soap_closesock(soap); + ns1__HelloResponse->soap_default(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + ns1__HelloResponse->soap_get(soap, "ns1:HelloResponse", ""); + 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); +} + +int CustomBinding_DumpUploadService3_UploaderProxy::UploadMiniDump(const char *endpoint, const char *soap_action, _ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse) +{ struct soap *soap = this; + struct __ns1__UploadMiniDump soap_tmp___ns1__UploadMiniDump; + if (endpoint) + soap_endpoint = endpoint; + if (soap_endpoint == NULL) + soap_endpoint = "http://localhost:59175/Service/DumpUploader3.svc"; + if (soap_action == NULL) + soap_action = "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadMiniDump"; + soap_begin(soap); + soap->encodingStyle = NULL; + soap_tmp___ns1__UploadMiniDump.ns1__UploadMiniDump = ns1__UploadMiniDump; + soap_set_version(soap, 2); /* SOAP1.2 */ + soap_serializeheader(soap); + soap_serialize___ns1__UploadMiniDump(soap, &soap_tmp___ns1__UploadMiniDump); + if (soap_begin_count(soap)) + return soap->error; + if (soap->mode & SOAP_IO_LENGTH) + { if (soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadMiniDump(soap, &soap_tmp___ns1__UploadMiniDump, "-ns1:UploadMiniDump", 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_url(soap, soap_endpoint, NULL), soap_action) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadMiniDump(soap, &soap_tmp___ns1__UploadMiniDump, "-ns1:UploadMiniDump", NULL) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + if (!ns1__UploadMiniDumpResponse) + return soap_closesock(soap); + ns1__UploadMiniDumpResponse->soap_default(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + ns1__UploadMiniDumpResponse->soap_get(soap, "ns1:UploadMiniDumpResponse", ""); + 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); +} + +int CustomBinding_DumpUploadService3_UploaderProxy::UploadFullDump(const char *endpoint, const char *soap_action, _ns1__UploadFullDump *ns1__UploadFullDump, _ns1__UploadFullDumpResponse *ns1__UploadFullDumpResponse) +{ struct soap *soap = this; + struct __ns1__UploadFullDump soap_tmp___ns1__UploadFullDump; + if (endpoint) + soap_endpoint = endpoint; + if (soap_endpoint == NULL) + soap_endpoint = "http://localhost:59175/Service/DumpUploader3.svc"; + if (soap_action == NULL) + soap_action = "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadFullDump"; + soap_begin(soap); + soap->encodingStyle = NULL; + soap_tmp___ns1__UploadFullDump.ns1__UploadFullDump = ns1__UploadFullDump; + soap_set_version(soap, 2); /* SOAP1.2 */ + soap_serializeheader(soap); + soap_serialize___ns1__UploadFullDump(soap, &soap_tmp___ns1__UploadFullDump); + if (soap_begin_count(soap)) + return soap->error; + if (soap->mode & SOAP_IO_LENGTH) + { if (soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadFullDump(soap, &soap_tmp___ns1__UploadFullDump, "-ns1:UploadFullDump", 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_url(soap, soap_endpoint, NULL), soap_action) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadFullDump(soap, &soap_tmp___ns1__UploadFullDump, "-ns1:UploadFullDump", NULL) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + if (!ns1__UploadFullDumpResponse) + return soap_closesock(soap); + ns1__UploadFullDumpResponse->soap_default(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + ns1__UploadFullDumpResponse->soap_get(soap, "ns1:UploadFullDumpResponse", ""); + 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); +} + +int CustomBinding_DumpUploadService3_UploaderProxy::UploadAdditionalInfo(const char *endpoint, const char *soap_action, _ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse) +{ struct soap *soap = this; + struct __ns1__UploadAdditionalInfo soap_tmp___ns1__UploadAdditionalInfo; + if (endpoint) + soap_endpoint = endpoint; + if (soap_endpoint == NULL) + soap_endpoint = "http://localhost:59175/Service/DumpUploader3.svc"; + if (soap_action == NULL) + soap_action = "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadAdditionalInfo"; + soap_begin(soap); + soap->encodingStyle = NULL; + soap_tmp___ns1__UploadAdditionalInfo.ns1__UploadAdditionalInfo = ns1__UploadAdditionalInfo; + soap_set_version(soap, 2); /* SOAP1.2 */ + soap_serializeheader(soap); + soap_serialize___ns1__UploadAdditionalInfo(soap, &soap_tmp___ns1__UploadAdditionalInfo); + if (soap_begin_count(soap)) + return soap->error; + if (soap->mode & SOAP_IO_LENGTH) + { if (soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadAdditionalInfo(soap, &soap_tmp___ns1__UploadAdditionalInfo, "-ns1:UploadAdditionalInfo", 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_url(soap, soap_endpoint, NULL), soap_action) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadAdditionalInfo(soap, &soap_tmp___ns1__UploadAdditionalInfo, "-ns1:UploadAdditionalInfo", NULL) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + if (!ns1__UploadAdditionalInfoResponse) + return soap_closesock(soap); + ns1__UploadAdditionalInfoResponse->soap_default(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + ns1__UploadAdditionalInfoResponse->soap_get(soap, "ns1:UploadAdditionalInfoResponse", ""); + 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); +} + +int CustomBinding_DumpUploadService3_UploaderProxy::RejectedToSendAdditionalInfo(const char *endpoint, const char *soap_action, _ns1__RejectedToSendAdditionalInfo *ns1__RejectedToSendAdditionalInfo, _ns1__RejectedToSendAdditionalInfoResponse *ns1__RejectedToSendAdditionalInfoResponse) +{ struct soap *soap = this; + struct __ns1__RejectedToSendAdditionalInfo soap_tmp___ns1__RejectedToSendAdditionalInfo; + if (endpoint) + soap_endpoint = endpoint; + if (soap_endpoint == NULL) + soap_endpoint = "http://localhost:59175/Service/DumpUploader3.svc"; + if (soap_action == NULL) + soap_action = "https://www.drdump.com/services/DumpUploadService3.Uploader/RejectedToSendAdditionalInfo"; + soap_begin(soap); + soap->encodingStyle = NULL; + soap_tmp___ns1__RejectedToSendAdditionalInfo.ns1__RejectedToSendAdditionalInfo = ns1__RejectedToSendAdditionalInfo; + soap_set_version(soap, 2); /* SOAP1.2 */ + soap_serializeheader(soap); + soap_serialize___ns1__RejectedToSendAdditionalInfo(soap, &soap_tmp___ns1__RejectedToSendAdditionalInfo); + if (soap_begin_count(soap)) + return soap->error; + if (soap->mode & SOAP_IO_LENGTH) + { if (soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__RejectedToSendAdditionalInfo(soap, &soap_tmp___ns1__RejectedToSendAdditionalInfo, "-ns1:RejectedToSendAdditionalInfo", 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_url(soap, soap_endpoint, NULL), soap_action) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__RejectedToSendAdditionalInfo(soap, &soap_tmp___ns1__RejectedToSendAdditionalInfo, "-ns1:RejectedToSendAdditionalInfo", NULL) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + if (!ns1__RejectedToSendAdditionalInfoResponse) + return soap_closesock(soap); + ns1__RejectedToSendAdditionalInfoResponse->soap_default(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + ns1__RejectedToSendAdditionalInfoResponse->soap_get(soap, "ns1:RejectedToSendAdditionalInfoResponse", ""); + 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); +} + +int CustomBinding_DumpUploadService3_UploaderProxy::UploadSymbol(const char *endpoint, const char *soap_action, _ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse) +{ struct soap *soap = this; + struct __ns1__UploadSymbol soap_tmp___ns1__UploadSymbol; + if (endpoint) + soap_endpoint = endpoint; + if (soap_endpoint == NULL) + soap_endpoint = "http://localhost:59175/Service/DumpUploader3.svc"; + if (soap_action == NULL) + soap_action = "https://www.drdump.com/services/DumpUploadService3.Uploader/UploadSymbol"; + soap_begin(soap); + soap->encodingStyle = NULL; + soap_tmp___ns1__UploadSymbol.ns1__UploadSymbol = ns1__UploadSymbol; + soap_set_version(soap, 2); /* SOAP1.2 */ + soap_serializeheader(soap); + soap_serialize___ns1__UploadSymbol(soap, &soap_tmp___ns1__UploadSymbol); + if (soap_begin_count(soap)) + return soap->error; + if (soap->mode & SOAP_IO_LENGTH) + { if (soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadSymbol(soap, &soap_tmp___ns1__UploadSymbol, "-ns1:UploadSymbol", 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_url(soap, soap_endpoint, NULL), soap_action) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put___ns1__UploadSymbol(soap, &soap_tmp___ns1__UploadSymbol, "-ns1:UploadSymbol", NULL) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + if (!ns1__UploadSymbolResponse) + return soap_closesock(soap); + ns1__UploadSymbolResponse->soap_default(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + ns1__UploadSymbolResponse->soap_get(soap, "ns1:UploadSymbolResponse", ""); + 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); +} +/* End of client proxy code */ diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.h new file mode 100644 index 000000000..842f43025 --- /dev/null +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapCustomBinding_DumpUploadService3_UploaderProxy.h @@ -0,0 +1,89 @@ +/* soapCustomBinding_DumpUploadService3_UploaderProxy.h + Generated by gSOAP 2.8.17r from DumpUploader.h + +Copyright(C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. +The generated code is released under one of the following licenses: +GPL or Genivia's license for commercial use. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +*/ + +#ifndef soapCustomBinding_DumpUploadService3_UploaderProxy_H +#define soapCustomBinding_DumpUploadService3_UploaderProxy_H +#include "soapH.h" + +class SOAP_CMAC CustomBinding_DumpUploadService3_UploaderProxy : public soap +{ public: + /// Endpoint URL of service 'CustomBinding_DumpUploadService3_UploaderProxy' (change as needed) + const char *soap_endpoint; + /// Constructor + CustomBinding_DumpUploadService3_UploaderProxy(); + /// Construct from another engine state + CustomBinding_DumpUploadService3_UploaderProxy(const struct soap&); + /// Constructor with endpoint URL + CustomBinding_DumpUploadService3_UploaderProxy(const char *url); + /// Constructor with engine input+output mode control + CustomBinding_DumpUploadService3_UploaderProxy(soap_mode iomode); + /// Constructor with URL and input+output mode control + CustomBinding_DumpUploadService3_UploaderProxy(const char *url, soap_mode iomode); + /// Constructor with engine input and output mode control + CustomBinding_DumpUploadService3_UploaderProxy(soap_mode imode, soap_mode omode); + /// Destructor frees deserialized data + virtual ~CustomBinding_DumpUploadService3_UploaderProxy(); + /// Initializer used by constructors + virtual void CustomBinding_DumpUploadService3_UploaderProxy_init(soap_mode imode, soap_mode omode); + /// Delete all deserialized data (with soap_destroy and soap_end) + virtual void destroy(); + /// Delete all deserialized data and reset to default + virtual void reset(); + /// Disables and removes SOAP Header from message + virtual void soap_noheader(); + /// Get SOAP Header structure (NULL when absent) + virtual const SOAP_ENV__Header *soap_header(); + /// Get SOAP Fault structure (NULL when absent) + virtual const SOAP_ENV__Fault *soap_fault(); + /// Get SOAP Fault string (NULL when absent) + virtual const char *soap_fault_string(); + /// Get SOAP Fault detail as string (NULL when absent) + virtual const char *soap_fault_detail(); + /// Close connection (normally automatic, except for send_X ops) + virtual int soap_close_socket(); + /// Force close connection (can kill a thread blocked on IO) + virtual int soap_force_close_socket(); + /// Print fault + virtual void soap_print_fault(FILE*); +#ifndef WITH_LEAN + /// Print fault to stream +#ifndef WITH_COMPAT + virtual void soap_stream_fault(std::ostream&); +#endif + + /// Put fault into buffer + virtual char *soap_sprint_fault(char *buf, size_t len); +#endif + + /// Web service operation 'Hello' (returns error code or SOAP_OK) + virtual int Hello(_ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse) { return this->Hello(NULL, NULL, ns1__Hello, ns1__HelloResponse); } + virtual int Hello(const char *endpoint, const char *soap_action, _ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse); + + /// Web service operation 'UploadMiniDump' (returns error code or SOAP_OK) + virtual int UploadMiniDump(_ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse) { return this->UploadMiniDump(NULL, NULL, ns1__UploadMiniDump, ns1__UploadMiniDumpResponse); } + virtual int UploadMiniDump(const char *endpoint, const char *soap_action, _ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse); + + /// Web service operation 'UploadFullDump' (returns error code or SOAP_OK) + virtual int UploadFullDump(_ns1__UploadFullDump *ns1__UploadFullDump, _ns1__UploadFullDumpResponse *ns1__UploadFullDumpResponse) { return this->UploadFullDump(NULL, NULL, ns1__UploadFullDump, ns1__UploadFullDumpResponse); } + virtual int UploadFullDump(const char *endpoint, const char *soap_action, _ns1__UploadFullDump *ns1__UploadFullDump, _ns1__UploadFullDumpResponse *ns1__UploadFullDumpResponse); + + /// Web service operation 'UploadAdditionalInfo' (returns error code or SOAP_OK) + virtual int UploadAdditionalInfo(_ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse) { return this->UploadAdditionalInfo(NULL, NULL, ns1__UploadAdditionalInfo, ns1__UploadAdditionalInfoResponse); } + virtual int UploadAdditionalInfo(const char *endpoint, const char *soap_action, _ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse); + + /// Web service operation 'RejectedToSendAdditionalInfo' (returns error code or SOAP_OK) + virtual int RejectedToSendAdditionalInfo(_ns1__RejectedToSendAdditionalInfo *ns1__RejectedToSendAdditionalInfo, _ns1__RejectedToSendAdditionalInfoResponse *ns1__RejectedToSendAdditionalInfoResponse) { return this->RejectedToSendAdditionalInfo(NULL, NULL, ns1__RejectedToSendAdditionalInfo, ns1__RejectedToSendAdditionalInfoResponse); } + virtual int RejectedToSendAdditionalInfo(const char *endpoint, const char *soap_action, _ns1__RejectedToSendAdditionalInfo *ns1__RejectedToSendAdditionalInfo, _ns1__RejectedToSendAdditionalInfoResponse *ns1__RejectedToSendAdditionalInfoResponse); + + /// Web service operation 'UploadSymbol' (returns error code or SOAP_OK) + virtual int UploadSymbol(_ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse) { return this->UploadSymbol(NULL, NULL, ns1__UploadSymbol, ns1__UploadSymbolResponse); } + virtual int UploadSymbol(const char *endpoint, const char *soap_action, _ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse); +}; +#endif diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapH.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapH.h index 82c714987..1dccc7976 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapH.h +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapH.h @@ -1,8 +1,11 @@ /* soapH.h - Generated by gSOAP 2.8.0 from DumpUploader.h - Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. - The generated code is released under one of the following licenses: - GPL, the gSOAP public license, or Genivia's license for commercial use. + Generated by gSOAP 2.8.17r from DumpUploader.h + +Copyright(C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. +The generated code is released under one of the following licenses: +GPL or Genivia's license for commercial use. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. */ #ifndef soapH_H @@ -14,8 +17,6 @@ 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 } @@ -23,8 +24,20 @@ 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 + +#ifdef __cplusplus +extern "C" { +#endif +SOAP_FMAC3 void *SOAP_FMAC4 soap_getelement(struct soap*, int*); +SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int); + +#ifdef __cplusplus +} +#endif SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*); +SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *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*); @@ -33,6 +46,28 @@ SOAP_FMAC3 void* SOAP_FMAC4 soap_container_id_forward(struct soap*, const char*, SOAP_FMAC3 void SOAP_FMAC4 soap_container_insert(struct soap*, int, int, void*, size_t, const void*, size_t); +#ifndef SOAP_TYPE_xsd__byte +#define SOAP_TYPE_xsd__byte (16) +#endif + +#define soap_default_xsd__byte(soap, a) soap_default_byte(soap, a) + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__byte(struct soap*, const char*, int, const char *, const char*); +SOAP_FMAC3 char * SOAP_FMAC4 soap_in_xsd__byte(struct soap*, const char*, char *, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__byte(struct soap*, const char *, const char*, const char*); + +#ifndef soap_write_xsd__byte +#define soap_write_xsd__byte(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__byte(soap, data),0) || soap_put_xsd__byte(soap, data, "xsd:byte", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 char * SOAP_FMAC4 soap_get_xsd__byte(struct soap*, char *, const char*, const char*); + +#ifndef soap_read_xsd__byte +#define soap_read_xsd__byte(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__byte(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + #ifndef SOAP_TYPE_byte #define SOAP_TYPE_byte (3) #endif @@ -40,38 +75,60 @@ 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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*); + #ifndef soap_write_byte -#define soap_write_byte(soap, data) ( soap_begin_send(soap) || soap_put_byte(soap, data, "byte", NULL) || soap_end_send(soap) ) +#define soap_write_byte(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_byte(soap, data),0) || soap_put_byte(soap, data, "byte", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*); +SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*); #ifndef soap_read_byte -#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*); #ifndef SOAP_TYPE_short -#define SOAP_TYPE_short (30) +#define SOAP_TYPE_short (44) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_default_short(struct soap*, short *); SOAP_FMAC3 int SOAP_FMAC4 soap_out_short(struct soap*, const char*, int, const short *, const char*); SOAP_FMAC3 short * SOAP_FMAC4 soap_in_short(struct soap*, const char*, short *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_short(struct soap*, const short *, const char*, const char*); + #ifndef soap_write_short -#define soap_write_short(soap, data) ( soap_begin_send(soap) || soap_put_short(soap, data, "short", NULL) || soap_end_send(soap) ) +#define soap_write_short(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_short(soap, data),0) || soap_put_short(soap, data, "short", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_short(struct soap*, const short *, const char*, const char*); +SOAP_FMAC3 short * SOAP_FMAC4 soap_get_short(struct soap*, short *, const char*, const char*); #ifndef soap_read_short -#define soap_read_short(soap, data) ( soap_begin_recv(soap) || !soap_get_short(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_short(soap, data) ( soap_begin_recv(soap) || !soap_get_short(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_ns3__char +#define SOAP_TYPE_ns3__char (80) +#endif + +#define soap_default_ns3__char(soap, a) soap_default_int(soap, a) + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__char(struct soap*, const char*, int, const int *, const char*); +SOAP_FMAC3 int * SOAP_FMAC4 soap_in_ns3__char(struct soap*, const char*, int *, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns3__char(struct soap*, const int *, const char*, const char*); + +#ifndef soap_write_ns3__char +#define soap_write_ns3__char(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_ns3__char(soap, data),0) || soap_put_ns3__char(soap, data, "ns3:char", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 int * SOAP_FMAC4 soap_get_ns3__char(struct soap*, int *, const char*, const char*); + +#ifndef soap_read_ns3__char +#define soap_read_ns3__char(soap, data) ( soap_begin_recv(soap) || !soap_get_ns3__char(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 short * SOAP_FMAC4 soap_get_short(struct soap*, short *, const char*, const char*); #ifndef SOAP_TYPE_int #define SOAP_TYPE_int (1) @@ -80,605 +137,2216 @@ 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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*); + #ifndef soap_write_int -#define soap_write_int(soap, data) ( soap_begin_send(soap) || soap_put_int(soap, data, "int", NULL) || soap_end_send(soap) ) +#define soap_write_int(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_int(soap, data),0) || soap_put_int(soap, data, "int", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*); +SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*); #ifndef soap_read_int -#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_LONG64 +#define SOAP_TYPE_LONG64 (42) +#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*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap*, const LONG64 *, const char*, const char*); + +#ifndef soap_write_LONG64 +#define soap_write_LONG64(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_LONG64(soap, data),0) || soap_put_LONG64(soap, data, "long", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap*, LONG64 *, const char*, const char*); + +#ifndef soap_read_LONG64 +#define soap_read_LONG64(soap, data) ( soap_begin_recv(soap) || !soap_get_LONG64(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_float +#define SOAP_TYPE_float (39) +#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*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap*, const float *, const char*, const char*); + +#ifndef soap_write_float +#define soap_write_float(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_float(soap, data),0) || soap_put_float(soap, data, "float", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap*, float *, const char*, const char*); + +#ifndef soap_read_float +#define soap_read_float(soap, data) ( soap_begin_recv(soap) || !soap_get_float(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_double +#define SOAP_TYPE_double (35) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default_double(struct soap*, double *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_double(struct soap*, const char*, int, const double *, const char*); +SOAP_FMAC3 double * SOAP_FMAC4 soap_in_double(struct soap*, const char*, double *, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_double(struct soap*, const double *, const char*, const char*); + +#ifndef soap_write_double +#define soap_write_double(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_double(soap, data),0) || soap_put_double(soap, data, "double", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 double * SOAP_FMAC4 soap_get_double(struct soap*, double *, const char*, const char*); + +#ifndef soap_read_double +#define soap_read_double(soap, data) ( soap_begin_recv(soap) || !soap_get_double(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_xsd__unsignedByte +#define SOAP_TYPE_xsd__unsignedByte (17) +#endif + +#define soap_default_xsd__unsignedByte(soap, a) soap_default_unsignedByte(soap, a) + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedByte(struct soap*, const char*, int, const unsigned char *, const char*); +SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_xsd__unsignedByte(struct soap*, const char*, unsigned char *, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__unsignedByte(struct soap*, const unsigned char *, const char*, const char*); + +#ifndef soap_write_xsd__unsignedByte +#define soap_write_xsd__unsignedByte(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__unsignedByte(soap, data),0) || soap_put_xsd__unsignedByte(soap, data, "xsd:unsignedByte", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_xsd__unsignedByte(struct soap*, unsigned char *, const char*, const char*); + +#ifndef soap_read_xsd__unsignedByte +#define soap_read_xsd__unsignedByte(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__unsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*); #ifndef SOAP_TYPE_unsignedByte -#define SOAP_TYPE_unsignedByte (10) +#define SOAP_TYPE_unsignedByte (14) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap*, const unsigned char *, const char*, const char*); + #ifndef soap_write_unsignedByte -#define soap_write_unsignedByte(soap, data) ( soap_begin_send(soap) || soap_put_unsignedByte(soap, data, "unsignedByte", NULL) || soap_end_send(soap) ) +#define soap_write_unsignedByte(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_unsignedByte(soap, data),0) || soap_put_unsignedByte(soap, data, "unsignedByte", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap*, const unsigned char *, const char*, const char*); +SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap*, unsigned char *, const char*, const char*); #ifndef soap_read_unsignedByte -#define soap_read_unsignedByte(soap, data) ( soap_begin_recv(soap) || !soap_get_unsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_unsignedByte(soap, data) ( soap_begin_recv(soap) || !soap_get_unsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap*, unsigned char *, const char*, const char*); #ifndef SOAP_TYPE_unsignedShort -#define SOAP_TYPE_unsignedShort (31) +#define SOAP_TYPE_unsignedShort (51) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedShort(struct soap*, unsigned short *); SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedShort(struct soap*, const char*, int, const unsigned short *, const char*); SOAP_FMAC3 unsigned short * SOAP_FMAC4 soap_in_unsignedShort(struct soap*, const char*, unsigned short *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedShort(struct soap*, const unsigned short *, const char*, const char*); + #ifndef soap_write_unsignedShort -#define soap_write_unsignedShort(soap, data) ( soap_begin_send(soap) || soap_put_unsignedShort(soap, data, "unsignedShort", NULL) || soap_end_send(soap) ) +#define soap_write_unsignedShort(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_unsignedShort(soap, data),0) || soap_put_unsignedShort(soap, data, "unsignedShort", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedShort(struct soap*, const unsigned short *, const char*, const char*); +SOAP_FMAC3 unsigned short * SOAP_FMAC4 soap_get_unsignedShort(struct soap*, unsigned short *, const char*, const char*); #ifndef soap_read_unsignedShort -#define soap_read_unsignedShort(soap, data) ( soap_begin_recv(soap) || !soap_get_unsignedShort(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_unsignedShort(soap, data) ( soap_begin_recv(soap) || !soap_get_unsignedShort(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 unsigned short * SOAP_FMAC4 soap_get_unsignedShort(struct soap*, unsigned short *, const char*, const char*); #ifndef SOAP_TYPE_unsignedInt -#define SOAP_TYPE_unsignedInt (9) +#define SOAP_TYPE_unsignedInt (13) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap*, const unsigned int *, const char*, const char*); + #ifndef soap_write_unsignedInt -#define soap_write_unsignedInt(soap, data) ( soap_begin_send(soap) || soap_put_unsignedInt(soap, data, "unsignedInt", NULL) || soap_end_send(soap) ) +#define soap_write_unsignedInt(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_unsignedInt(soap, data),0) || soap_put_unsignedInt(soap, data, "unsignedInt", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap*, const unsigned int *, const char*, const char*); +SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap*, unsigned int *, const char*, const char*); #ifndef soap_read_unsignedInt -#define soap_read_unsignedInt(soap, data) ( soap_begin_recv(soap) || !soap_get_unsignedInt(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_unsignedInt(soap, data) ( soap_begin_recv(soap) || !soap_get_unsignedInt(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap*, unsigned int *, const char*, const char*); -#ifndef SOAP_TYPE_bool -#define SOAP_TYPE_bool (36) +#ifndef SOAP_TYPE_unsignedLONG64 +#define SOAP_TYPE_unsignedLONG64 (49) #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_FMAC3 void SOAP_FMAC4 soap_default_unsignedLONG64(struct soap*, ULONG64 *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedLONG64(struct soap*, const char*, int, const ULONG64 *, const char*); +SOAP_FMAC3 ULONG64 * SOAP_FMAC4 soap_in_unsignedLONG64(struct soap*, const char*, ULONG64 *, const char*); -SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap*, const char*, bool *); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedLONG64(struct soap*, const ULONG64 *, const char*, const char*); -#ifndef soap_write_bool -#define soap_write_bool(soap, data) ( soap_begin_send(soap) || soap_put_bool(soap, data, "boolean", NULL) || soap_end_send(soap) ) +#ifndef soap_write_unsignedLONG64 +#define soap_write_unsignedLONG64(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_unsignedLONG64(soap, data),0) || soap_put_unsignedLONG64(soap, data, "unsignedLong", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 ULONG64 * SOAP_FMAC4 soap_get_unsignedLONG64(struct soap*, ULONG64 *, const char*, const char*); -SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap*, const bool *, const char*, const char*); - -#ifndef soap_read_bool -#define soap_read_bool(soap, data) ( soap_begin_recv(soap) || !soap_get_bool(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_unsignedLONG64 +#define soap_read_unsignedLONG64(soap, data) ( soap_begin_recv(soap) || !soap_get_unsignedLONG64(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap*, bool *, const char*, const char*); -#ifndef SOAP_TYPE_ns1__AdditionalInfoType -#define SOAP_TYPE_ns1__AdditionalInfoType (27) +#ifndef SOAP_TYPE_time +#define SOAP_TYPE_time (31) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__AdditionalInfoType(struct soap*, enum ns1__AdditionalInfoType *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__AdditionalInfoType(struct soap*, const char*, int, const enum ns1__AdditionalInfoType *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_default_time(struct soap*, time_t *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_time(struct soap*, const char*, int, const time_t *, const char*); +SOAP_FMAC3 time_t * SOAP_FMAC4 soap_in_time(struct soap*, const char*, time_t *, const char*); -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__AdditionalInfoType2s(struct soap*, enum ns1__AdditionalInfoType); -SOAP_FMAC3 enum ns1__AdditionalInfoType * SOAP_FMAC4 soap_in_ns1__AdditionalInfoType(struct soap*, const char*, enum ns1__AdditionalInfoType *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_time(struct soap*, const time_t *, const char*, const char*); -SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns1__AdditionalInfoType(struct soap*, const char*, enum ns1__AdditionalInfoType *); - -#ifndef soap_write_ns1__AdditionalInfoType -#define soap_write_ns1__AdditionalInfoType(soap, data) ( soap_begin_send(soap) || soap_put_ns1__AdditionalInfoType(soap, data, "ns1:AdditionalInfoType", NULL) || soap_end_send(soap) ) +#ifndef soap_write_time +#define soap_write_time(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_time(soap, data),0) || soap_put_time(soap, data, "dateTime", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 time_t * SOAP_FMAC4 soap_get_time(struct soap*, time_t *, const char*, const char*); -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns1__AdditionalInfoType(struct soap*, const enum ns1__AdditionalInfoType *, const char*, const char*); - -#ifndef soap_read_ns1__AdditionalInfoType -#define soap_read_ns1__AdditionalInfoType(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__AdditionalInfoType(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_time +#define soap_read_time(soap, data) ( soap_begin_recv(soap) || !soap_get_time(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 enum ns1__AdditionalInfoType * SOAP_FMAC4 soap_get_ns1__AdditionalInfoType(struct soap*, enum ns1__AdditionalInfoType *, const char*, const char*); -#ifndef SOAP_TYPE_ns1__SolutionType -#define SOAP_TYPE_ns1__SolutionType (26) +#ifndef SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType +#define SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType (90) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__SolutionType(struct soap*, enum ns1__SolutionType *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__SolutionType(struct soap*, const char*, int, const enum ns1__SolutionType *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns4__HaveSolutionResponse_SolutionType(struct soap*, enum ns4__HaveSolutionResponse_SolutionType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__HaveSolutionResponse_SolutionType(struct soap*, const char*, int, const enum ns4__HaveSolutionResponse_SolutionType *, const char*); -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__SolutionType2s(struct soap*, enum ns1__SolutionType); -SOAP_FMAC3 enum ns1__SolutionType * SOAP_FMAC4 soap_in_ns1__SolutionType(struct soap*, const char*, enum ns1__SolutionType *, const char*); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns4__HaveSolutionResponse_SolutionType2s(struct soap*, enum ns4__HaveSolutionResponse_SolutionType); +SOAP_FMAC3 enum ns4__HaveSolutionResponse_SolutionType * SOAP_FMAC4 soap_in_ns4__HaveSolutionResponse_SolutionType(struct soap*, const char*, enum ns4__HaveSolutionResponse_SolutionType *, const char*); -SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns1__SolutionType(struct soap*, const char*, enum ns1__SolutionType *); +SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns4__HaveSolutionResponse_SolutionType(struct soap*, const char*, enum ns4__HaveSolutionResponse_SolutionType *); -#ifndef soap_write_ns1__SolutionType -#define soap_write_ns1__SolutionType(soap, data) ( soap_begin_send(soap) || soap_put_ns1__SolutionType(soap, data, "ns1:SolutionType", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns4__HaveSolutionResponse_SolutionType(struct soap*, const enum ns4__HaveSolutionResponse_SolutionType *, const char*, const char*); +#ifndef soap_write_ns4__HaveSolutionResponse_SolutionType +#define soap_write_ns4__HaveSolutionResponse_SolutionType(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_ns4__HaveSolutionResponse_SolutionType(soap, data),0) || soap_put_ns4__HaveSolutionResponse_SolutionType(soap, data, "ns4:HaveSolutionResponse.SolutionType", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns1__SolutionType(struct soap*, const enum ns1__SolutionType *, const char*, const char*); +SOAP_FMAC3 enum ns4__HaveSolutionResponse_SolutionType * SOAP_FMAC4 soap_get_ns4__HaveSolutionResponse_SolutionType(struct soap*, enum ns4__HaveSolutionResponse_SolutionType *, const char*, const char*); -#ifndef soap_read_ns1__SolutionType -#define soap_read_ns1__SolutionType(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__SolutionType(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns4__HaveSolutionResponse_SolutionType +#define soap_read_ns4__HaveSolutionResponse_SolutionType(soap, data) ( soap_begin_recv(soap) || !soap_get_ns4__HaveSolutionResponse_SolutionType(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 enum ns1__SolutionType * SOAP_FMAC4 soap_get_ns1__SolutionType(struct soap*, enum ns1__SolutionType *, const char*, const char*); -#ifndef SOAP_TYPE_ns1__ResponseType -#define SOAP_TYPE_ns1__ResponseType (25) +#ifndef SOAP_TYPE_ns4__ClientLib_ClientType +#define SOAP_TYPE_ns4__ClientLib_ClientType (88) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__ResponseType(struct soap*, enum ns1__ResponseType *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ResponseType(struct soap*, const char*, int, const enum ns1__ResponseType *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns4__ClientLib_ClientType(struct soap*, enum ns4__ClientLib_ClientType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_ClientType(struct soap*, const char*, int, const enum ns4__ClientLib_ClientType *, const char*); -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__ResponseType2s(struct soap*, enum ns1__ResponseType); -SOAP_FMAC3 enum ns1__ResponseType * SOAP_FMAC4 soap_in_ns1__ResponseType(struct soap*, const char*, enum ns1__ResponseType *, const char*); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns4__ClientLib_ClientType2s(struct soap*, enum ns4__ClientLib_ClientType); +SOAP_FMAC3 enum ns4__ClientLib_ClientType * SOAP_FMAC4 soap_in_ns4__ClientLib_ClientType(struct soap*, const char*, enum ns4__ClientLib_ClientType *, const char*); -SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns1__ResponseType(struct soap*, const char*, enum ns1__ResponseType *); +SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns4__ClientLib_ClientType(struct soap*, const char*, enum ns4__ClientLib_ClientType *); -#ifndef soap_write_ns1__ResponseType -#define soap_write_ns1__ResponseType(soap, data) ( soap_begin_send(soap) || soap_put_ns1__ResponseType(soap, data, "ns1:ResponseType", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns4__ClientLib_ClientType(struct soap*, const enum ns4__ClientLib_ClientType *, const char*, const char*); +#ifndef soap_write_ns4__ClientLib_ClientType +#define soap_write_ns4__ClientLib_ClientType(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_ns4__ClientLib_ClientType(soap, data),0) || soap_put_ns4__ClientLib_ClientType(soap, data, "ns4:ClientLib.ClientType", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns1__ResponseType(struct soap*, const enum ns1__ResponseType *, const char*, const char*); +SOAP_FMAC3 enum ns4__ClientLib_ClientType * SOAP_FMAC4 soap_get_ns4__ClientLib_ClientType(struct soap*, enum ns4__ClientLib_ClientType *, const char*, const char*); -#ifndef soap_read_ns1__ResponseType -#define soap_read_ns1__ResponseType(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__ResponseType(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns4__ClientLib_ClientType +#define soap_read_ns4__ClientLib_ClientType(soap, data) ( soap_begin_recv(soap) || !soap_get_ns4__ClientLib_ClientType(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 enum ns1__ResponseType * SOAP_FMAC4 soap_get_ns1__ResponseType(struct soap*, enum ns1__ResponseType *, const char*, const char*); -#ifndef SOAP_TYPE_ns1__Architecture -#define SOAP_TYPE_ns1__Architecture (24) +#ifndef SOAP_TYPE_ns4__ClientLib_Architecture +#define SOAP_TYPE_ns4__ClientLib_Architecture (86) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns1__Architecture(struct soap*, enum ns1__Architecture *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Architecture(struct soap*, const char*, int, const enum ns1__Architecture *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_default_ns4__ClientLib_Architecture(struct soap*, enum ns4__ClientLib_Architecture *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_Architecture(struct soap*, const char*, int, const enum ns4__ClientLib_Architecture *, const char*); -SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns1__Architecture2s(struct soap*, enum ns1__Architecture); -SOAP_FMAC3 enum ns1__Architecture * SOAP_FMAC4 soap_in_ns1__Architecture(struct soap*, const char*, enum ns1__Architecture *, const char*); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_ns4__ClientLib_Architecture2s(struct soap*, enum ns4__ClientLib_Architecture); +SOAP_FMAC3 enum ns4__ClientLib_Architecture * SOAP_FMAC4 soap_in_ns4__ClientLib_Architecture(struct soap*, const char*, enum ns4__ClientLib_Architecture *, const char*); -SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns1__Architecture(struct soap*, const char*, enum ns1__Architecture *); +SOAP_FMAC3S int SOAP_FMAC4S soap_s2ns4__ClientLib_Architecture(struct soap*, const char*, enum ns4__ClientLib_Architecture *); -#ifndef soap_write_ns1__Architecture -#define soap_write_ns1__Architecture(soap, data) ( soap_begin_send(soap) || soap_put_ns1__Architecture(soap, data, "ns1:Architecture", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns4__ClientLib_Architecture(struct soap*, const enum ns4__ClientLib_Architecture *, const char*, const char*); +#ifndef soap_write_ns4__ClientLib_Architecture +#define soap_write_ns4__ClientLib_Architecture(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_ns4__ClientLib_Architecture(soap, data),0) || soap_put_ns4__ClientLib_Architecture(soap, data, "ns4:ClientLib.Architecture", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns1__Architecture(struct soap*, const enum ns1__Architecture *, const char*, const char*); +SOAP_FMAC3 enum ns4__ClientLib_Architecture * SOAP_FMAC4 soap_get_ns4__ClientLib_Architecture(struct soap*, enum ns4__ClientLib_Architecture *, const char*, const char*); -#ifndef soap_read_ns1__Architecture -#define soap_read_ns1__Architecture(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__Architecture(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns4__ClientLib_Architecture +#define soap_read_ns4__ClientLib_Architecture(soap, data) ( soap_begin_recv(soap) || !soap_get_ns4__ClientLib_Architecture(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 enum ns1__Architecture * SOAP_FMAC4 soap_get_ns1__Architecture(struct soap*, enum ns1__Architecture *, const char*, const char*); -#ifndef SOAP_TYPE_ns2__guid -#define SOAP_TYPE_ns2__guid (29) +#ifndef SOAP_TYPE_bool +#define SOAP_TYPE_bool (28) #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*); -#define soap_default_ns2__guid(soap, a) soap_default_std__wstring(soap, a) +SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap*, const char*, bool *); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap*, const bool *, const char*, const char*); -#define soap_serialize_ns2__guid(soap, a) soap_serialize_std__wstring(soap, a) +#ifndef soap_write_bool +#define soap_write_bool(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_bool(soap, data),0) || soap_put_bool(soap, data, "boolean", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns2__guid(struct soap*, const char*, int, const std::wstring*, const char*); -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_ns2__guid(struct soap*, const char*, std::wstring*, const char*); +SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap*, bool *, const char*, const char*); -#ifndef soap_write_ns2__guid -#define soap_write_ns2__guid(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns2:guid", NULL) || soap_end_send(soap) ) +#ifndef soap_read_bool +#define soap_read_bool(soap, data) ( soap_begin_recv(soap) || !soap_get_bool(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns2__guid(struct soap*, const std::wstring *, const char*, const char*); +#ifndef SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_ +#define SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_ (91) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__HaveSolutionResponse_SolutionType_(struct soap*, const char*, int, const ns4__HaveSolutionResponse_SolutionType_ *, const char*); +SOAP_FMAC3 ns4__HaveSolutionResponse_SolutionType_ * SOAP_FMAC4 soap_in_ns4__HaveSolutionResponse_SolutionType_(struct soap*, const char*, ns4__HaveSolutionResponse_SolutionType_ *, const char*); -#ifndef soap_read_ns2__guid -#define soap_read_ns2__guid(soap, data) ( soap_begin_recv(soap) || !soap_get_ns2__guid(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_write_ns4__HaveSolutionResponse_SolutionType_ +#define soap_write_ns4__HaveSolutionResponse_SolutionType_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns4:HaveSolutionResponse.SolutionType", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_ns2__guid(struct soap*, std::wstring *, const char*, const char*); +SOAP_FMAC3 ns4__HaveSolutionResponse_SolutionType_ * SOAP_FMAC4 soap_get_ns4__HaveSolutionResponse_SolutionType_(struct soap*, ns4__HaveSolutionResponse_SolutionType_ *, const char*, const char*); -#define soap_new_ns2__guid(soap, n) soap_instantiate_ns2__guid(soap, n, NULL, NULL, NULL) +#ifndef soap_read_ns4__HaveSolutionResponse_SolutionType_ +#define soap_read_ns4__HaveSolutionResponse_SolutionType_(soap, data) ( soap_begin_recv(soap) || !soap_get_ns4__HaveSolutionResponse_SolutionType_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif +SOAP_FMAC1 ns4__HaveSolutionResponse_SolutionType_ * SOAP_FMAC2 soap_instantiate_ns4__HaveSolutionResponse_SolutionType_(struct soap*, int, const char*, const char*, size_t*); -#define soap_delete_ns2__guid(soap, p) soap_delete(soap, p) +inline ns4__HaveSolutionResponse_SolutionType_ * soap_new_ns4__HaveSolutionResponse_SolutionType_(struct soap *soap, int n = -1) { return soap_instantiate_ns4__HaveSolutionResponse_SolutionType_(soap, n, NULL, NULL, NULL); } +inline ns4__HaveSolutionResponse_SolutionType_ * soap_new_req_ns4__HaveSolutionResponse_SolutionType_(struct soap *soap, enum ns4__HaveSolutionResponse_SolutionType __item) { ns4__HaveSolutionResponse_SolutionType_ *_p = soap_instantiate_ns4__HaveSolutionResponse_SolutionType_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns4__HaveSolutionResponse_SolutionType_::__item = __item; } return _p; } -#define soap_instantiate_ns2__guid soap_instantiate_std__wstring +inline ns4__HaveSolutionResponse_SolutionType_ * soap_new_set_ns4__HaveSolutionResponse_SolutionType_(struct soap *soap, enum ns4__HaveSolutionResponse_SolutionType __item, char *__item1) { ns4__HaveSolutionResponse_SolutionType_ *_p = soap_instantiate_ns4__HaveSolutionResponse_SolutionType_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns4__HaveSolutionResponse_SolutionType_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } +inline void soap_delete_ns4__HaveSolutionResponse_SolutionType_(struct soap *soap, ns4__HaveSolutionResponse_SolutionType_ *p) { soap_delete(soap, p); } -#define soap_copy_ns2__guid soap_copy_std__wstring +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns4__HaveSolutionResponse_SolutionType_(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef SOAP_TYPE_std__wstring -#define SOAP_TYPE_std__wstring (28) +#ifndef SOAP_TYPE_ns4__ClientLib_ClientType_ +#define SOAP_TYPE_ns4__ClientLib_ClientType_ (89) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__wstring(struct soap*, std::wstring *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__wstring(struct soap*, const std::wstring *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__wstring(struct soap*, const char*, int, const std::wstring*, const char*); -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_std__wstring(struct soap*, const char*, std::wstring*, const char*); -#ifndef soap_write_std__wstring -#define soap_write_std__wstring(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "string", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_ClientType_(struct soap*, const char*, int, const ns4__ClientLib_ClientType_ *, const char*); +SOAP_FMAC3 ns4__ClientLib_ClientType_ * SOAP_FMAC4 soap_in_ns4__ClientLib_ClientType_(struct soap*, const char*, ns4__ClientLib_ClientType_ *, const char*); +#ifndef soap_write_ns4__ClientLib_ClientType_ +#define soap_write_ns4__ClientLib_ClientType_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns4:ClientLib.ClientType", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_std__wstring(struct soap*, const std::wstring *, const char*, const char*); +SOAP_FMAC3 ns4__ClientLib_ClientType_ * SOAP_FMAC4 soap_get_ns4__ClientLib_ClientType_(struct soap*, ns4__ClientLib_ClientType_ *, const char*, const char*); -#ifndef soap_read_std__wstring -#define soap_read_std__wstring(soap, data) ( soap_begin_recv(soap) || !soap_get_std__wstring(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns4__ClientLib_ClientType_ +#define soap_read_ns4__ClientLib_ClientType_(soap, data) ( soap_begin_recv(soap) || !soap_get_ns4__ClientLib_ClientType_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_std__wstring(struct soap*, std::wstring *, const char*, const char*); +SOAP_FMAC1 ns4__ClientLib_ClientType_ * SOAP_FMAC2 soap_instantiate_ns4__ClientLib_ClientType_(struct soap*, int, const char*, const char*, size_t*); -#define soap_new_std__wstring(soap, n) soap_instantiate_std__wstring(soap, n, NULL, NULL, NULL) +inline ns4__ClientLib_ClientType_ * soap_new_ns4__ClientLib_ClientType_(struct soap *soap, int n = -1) { return soap_instantiate_ns4__ClientLib_ClientType_(soap, n, NULL, NULL, NULL); } +inline ns4__ClientLib_ClientType_ * soap_new_req_ns4__ClientLib_ClientType_(struct soap *soap, enum ns4__ClientLib_ClientType __item) { ns4__ClientLib_ClientType_ *_p = soap_instantiate_ns4__ClientLib_ClientType_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns4__ClientLib_ClientType_::__item = __item; } return _p; } -#define soap_delete_std__wstring(soap, p) soap_delete(soap, p) +inline ns4__ClientLib_ClientType_ * soap_new_set_ns4__ClientLib_ClientType_(struct soap *soap, enum ns4__ClientLib_ClientType __item, char *__item1) { ns4__ClientLib_ClientType_ *_p = soap_instantiate_ns4__ClientLib_ClientType_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns4__ClientLib_ClientType_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } -SOAP_FMAC1 std::wstring * SOAP_FMAC2 soap_instantiate_std__wstring(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__wstring(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete_ns4__ClientLib_ClientType_(struct soap *soap, ns4__ClientLib_ClientType_ *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE__ns1__UploadSymbolResponse -#define SOAP_TYPE__ns1__UploadSymbolResponse (23) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns4__ClientLib_ClientType_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns4__ClientLib_Architecture_ +#define SOAP_TYPE_ns4__ClientLib_Architecture_ (87) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbolResponse(struct soap*, const char*, int, const _ns1__UploadSymbolResponse *, const char*); -SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_in__ns1__UploadSymbolResponse(struct soap*, const char*, _ns1__UploadSymbolResponse *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns4__ClientLib_Architecture_(struct soap*, const char*, int, const ns4__ClientLib_Architecture_ *, const char*); +SOAP_FMAC3 ns4__ClientLib_Architecture_ * SOAP_FMAC4 soap_in_ns4__ClientLib_Architecture_(struct soap*, const char*, ns4__ClientLib_Architecture_ *, const char*); -#ifndef soap_write__ns1__UploadSymbolResponse -#define soap_write__ns1__UploadSymbolResponse(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:UploadSymbolResponse", NULL) || soap_end_send(soap) ) +#ifndef soap_write_ns4__ClientLib_Architecture_ +#define soap_write_ns4__ClientLib_Architecture_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns4:ClientLib.Architecture", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 ns4__ClientLib_Architecture_ * SOAP_FMAC4 soap_get_ns4__ClientLib_Architecture_(struct soap*, ns4__ClientLib_Architecture_ *, const char*, const char*); -#ifndef soap_read__ns1__UploadSymbolResponse -#define soap_read__ns1__UploadSymbolResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadSymbolResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns4__ClientLib_Architecture_ +#define soap_read_ns4__ClientLib_Architecture_(soap, data) ( soap_begin_recv(soap) || !soap_get_ns4__ClientLib_Architecture_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_get__ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse *, const char*, const char*); +SOAP_FMAC1 ns4__ClientLib_Architecture_ * SOAP_FMAC2 soap_instantiate_ns4__ClientLib_Architecture_(struct soap*, int, const char*, const char*, size_t*); -#define soap_new__ns1__UploadSymbolResponse(soap, n) soap_instantiate__ns1__UploadSymbolResponse(soap, n, NULL, NULL, NULL) +inline ns4__ClientLib_Architecture_ * soap_new_ns4__ClientLib_Architecture_(struct soap *soap, int n = -1) { return soap_instantiate_ns4__ClientLib_Architecture_(soap, n, NULL, NULL, NULL); } +inline ns4__ClientLib_Architecture_ * soap_new_req_ns4__ClientLib_Architecture_(struct soap *soap, enum ns4__ClientLib_Architecture __item) { ns4__ClientLib_Architecture_ *_p = soap_instantiate_ns4__ClientLib_Architecture_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns4__ClientLib_Architecture_::__item = __item; } return _p; } -#define soap_delete__ns1__UploadSymbolResponse(soap, p) soap_delete(soap, p) +inline ns4__ClientLib_Architecture_ * soap_new_set_ns4__ClientLib_Architecture_(struct soap *soap, enum ns4__ClientLib_Architecture __item, char *__item1) { ns4__ClientLib_Architecture_ *_p = soap_instantiate_ns4__ClientLib_Architecture_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns4__ClientLib_Architecture_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } -SOAP_FMAC1 _ns1__UploadSymbolResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbolResponse(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbolResponse(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete_ns4__ClientLib_Architecture_(struct soap *soap, ns4__ClientLib_Architecture_ *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE__ns1__UploadSymbol -#define SOAP_TYPE__ns1__UploadSymbol (22) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns4__ClientLib_Architecture_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns3__guid__ +#define SOAP_TYPE_ns3__guid__ (85) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbol(struct soap*, const char*, int, const _ns1__UploadSymbol *, const char*); -SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_in__ns1__UploadSymbol(struct soap*, const char*, _ns1__UploadSymbol *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__guid__(struct soap*, const char*, int, const ns3__guid__ *, const char*); +SOAP_FMAC3 ns3__guid__ * SOAP_FMAC4 soap_in_ns3__guid__(struct soap*, const char*, ns3__guid__ *, const char*); -#ifndef soap_write__ns1__UploadSymbol -#define soap_write__ns1__UploadSymbol(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:UploadSymbol", NULL) || soap_end_send(soap) ) +#ifndef soap_write_ns3__guid__ +#define soap_write_ns3__guid__(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns3:guid", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 ns3__guid__ * SOAP_FMAC4 soap_get_ns3__guid__(struct soap*, ns3__guid__ *, const char*, const char*); -#ifndef soap_read__ns1__UploadSymbol -#define soap_read__ns1__UploadSymbol(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadSymbol(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns3__guid__ +#define soap_read_ns3__guid__(soap, data) ( soap_begin_recv(soap) || !soap_get_ns3__guid__(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_get__ns1__UploadSymbol(struct soap*, _ns1__UploadSymbol *, const char*, const char*); +SOAP_FMAC1 ns3__guid__ * SOAP_FMAC2 soap_instantiate_ns3__guid__(struct soap*, int, const char*, const char*, size_t*); -#define soap_new__ns1__UploadSymbol(soap, n) soap_instantiate__ns1__UploadSymbol(soap, n, NULL, NULL, NULL) +inline ns3__guid__ * soap_new_ns3__guid__(struct soap *soap, int n = -1) { return soap_instantiate_ns3__guid__(soap, n, NULL, NULL, NULL); } +inline ns3__guid__ * soap_new_req_ns3__guid__(struct soap *soap, std::wstring& __item) { ns3__guid__ *_p = soap_instantiate_ns3__guid__(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns3__guid__::__item = __item; } return _p; } -#define soap_delete__ns1__UploadSymbol(soap, p) soap_delete(soap, p) +inline ns3__guid__ * soap_new_set_ns3__guid__(struct soap *soap, std::wstring& __item, char *__item1) { ns3__guid__ *_p = soap_instantiate_ns3__guid__(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns3__guid__::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } -SOAP_FMAC1 _ns1__UploadSymbol * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbol(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbol(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete_ns3__guid__(struct soap *soap, ns3__guid__ *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE__ns1__UploadAdditionalInfoResponse -#define SOAP_TYPE__ns1__UploadAdditionalInfoResponse (21) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns3__guid__(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns3__guid +#define SOAP_TYPE_ns3__guid (84) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfoResponse(struct soap*, const char*, int, const _ns1__UploadAdditionalInfoResponse *, const char*); -SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfoResponse(struct soap*, const char*, _ns1__UploadAdditionalInfoResponse *, const char*); +#define soap_default_ns3__guid(soap, a) soap_default_std__wstring(soap, a) -#ifndef soap_write__ns1__UploadAdditionalInfoResponse -#define soap_write__ns1__UploadAdditionalInfoResponse(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:UploadAdditionalInfoResponse", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_ns3__guid(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__guid(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_ns3__guid(struct soap*, const char*, std::wstring*, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns3__guid(struct soap*, const std::wstring *, const char*, const char*); -#ifndef soap_read__ns1__UploadAdditionalInfoResponse -#define soap_read__ns1__UploadAdditionalInfoResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadAdditionalInfoResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_write_ns3__guid +#define soap_write_ns3__guid(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_ns3__guid(soap, data),0) || soap_put_ns3__guid(soap, data, "ns3:guid", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse *, const char*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_ns3__guid(struct soap*, std::wstring *, const char*, const char*); -#define soap_new__ns1__UploadAdditionalInfoResponse(soap, n) soap_instantiate__ns1__UploadAdditionalInfoResponse(soap, n, NULL, NULL, NULL) +#ifndef soap_read_ns3__guid +#define soap_read_ns3__guid(soap, data) ( soap_begin_recv(soap) || !soap_get_ns3__guid(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif -#define soap_delete__ns1__UploadAdditionalInfoResponse(soap, p) soap_delete(soap, p) +#define soap_instantiate_ns3__guid soap_instantiate_std__wstring -SOAP_FMAC1 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfoResponse(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfoResponse(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef SOAP_TYPE__ns1__UploadAdditionalInfo -#define SOAP_TYPE__ns1__UploadAdditionalInfo (20) +#define soap_copy_ns3__guid soap_copy_std__wstring + +#ifndef SOAP_TYPE_ns3__duration__ +#define SOAP_TYPE_ns3__duration__ (83) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfo(struct soap*, const char*, int, const _ns1__UploadAdditionalInfo *, const char*); -SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfo(struct soap*, const char*, _ns1__UploadAdditionalInfo *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__duration__(struct soap*, const char*, int, const ns3__duration__ *, const char*); +SOAP_FMAC3 ns3__duration__ * SOAP_FMAC4 soap_in_ns3__duration__(struct soap*, const char*, ns3__duration__ *, const char*); -#ifndef soap_write__ns1__UploadAdditionalInfo -#define soap_write__ns1__UploadAdditionalInfo(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:UploadAdditionalInfo", NULL) || soap_end_send(soap) ) +#ifndef soap_write_ns3__duration__ +#define soap_write_ns3__duration__(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns3:duration", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 ns3__duration__ * SOAP_FMAC4 soap_get_ns3__duration__(struct soap*, ns3__duration__ *, const char*, const char*); -#ifndef soap_read__ns1__UploadAdditionalInfo -#define soap_read__ns1__UploadAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns3__duration__ +#define soap_read_ns3__duration__(soap, data) ( soap_begin_recv(soap) || !soap_get_ns3__duration__(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfo(struct soap*, _ns1__UploadAdditionalInfo *, const char*, const char*); +SOAP_FMAC1 ns3__duration__ * SOAP_FMAC2 soap_instantiate_ns3__duration__(struct soap*, int, const char*, const char*, size_t*); -#define soap_new__ns1__UploadAdditionalInfo(soap, n) soap_instantiate__ns1__UploadAdditionalInfo(soap, n, NULL, NULL, NULL) +inline ns3__duration__ * soap_new_ns3__duration__(struct soap *soap, int n = -1) { return soap_instantiate_ns3__duration__(soap, n, NULL, NULL, NULL); } +inline ns3__duration__ * soap_new_req_ns3__duration__(struct soap *soap, std::wstring& __item) { ns3__duration__ *_p = soap_instantiate_ns3__duration__(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns3__duration__::__item = __item; } return _p; } -#define soap_delete__ns1__UploadAdditionalInfo(soap, p) soap_delete(soap, p) +inline ns3__duration__ * soap_new_set_ns3__duration__(struct soap *soap, std::wstring& __item, char *__item1) { ns3__duration__ *_p = soap_instantiate_ns3__duration__(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns3__duration__::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } -SOAP_FMAC1 _ns1__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete_ns3__duration__(struct soap *soap, ns3__duration__ *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE__ns1__UploadMiniDumpResponse -#define SOAP_TYPE__ns1__UploadMiniDumpResponse (19) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns3__duration__(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns3__duration +#define SOAP_TYPE_ns3__duration (82) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDumpResponse(struct soap*, const char*, int, const _ns1__UploadMiniDumpResponse *, const char*); -SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_in__ns1__UploadMiniDumpResponse(struct soap*, const char*, _ns1__UploadMiniDumpResponse *, const char*); +#define soap_default_ns3__duration(soap, a) soap_default_std__wstring(soap, a) -#ifndef soap_write__ns1__UploadMiniDumpResponse -#define soap_write__ns1__UploadMiniDumpResponse(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:UploadMiniDumpResponse", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_ns3__duration(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__duration(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_ns3__duration(struct soap*, const char*, std::wstring*, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_ns3__duration(struct soap*, const std::wstring *, const char*, const char*); -#ifndef soap_read__ns1__UploadMiniDumpResponse -#define soap_read__ns1__UploadMiniDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadMiniDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_write_ns3__duration +#define soap_write_ns3__duration(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_ns3__duration(soap, data),0) || soap_put_ns3__duration(soap, data, "ns3:duration", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_get__ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse *, const char*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_ns3__duration(struct soap*, std::wstring *, const char*, const char*); -#define soap_new__ns1__UploadMiniDumpResponse(soap, n) soap_instantiate__ns1__UploadMiniDumpResponse(soap, n, NULL, NULL, NULL) +#ifndef soap_read_ns3__duration +#define soap_read_ns3__duration(soap, data) ( soap_begin_recv(soap) || !soap_get_ns3__duration(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif -#define soap_delete__ns1__UploadMiniDumpResponse(soap, p) soap_delete(soap, p) +#define soap_instantiate_ns3__duration soap_instantiate_std__wstring -SOAP_FMAC1 _ns1__UploadMiniDumpResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDumpResponse(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDumpResponse(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef SOAP_TYPE__ns1__UploadMiniDump -#define SOAP_TYPE__ns1__UploadMiniDump (18) +#define soap_copy_ns3__duration soap_copy_std__wstring + +#ifndef SOAP_TYPE_ns3__char__ +#define SOAP_TYPE_ns3__char__ (81) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDump(struct soap*, const char*, int, const _ns1__UploadMiniDump *, const char*); -SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_in__ns1__UploadMiniDump(struct soap*, const char*, _ns1__UploadMiniDump *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns3__char__(struct soap*, const char*, int, const ns3__char__ *, const char*); +SOAP_FMAC3 ns3__char__ * SOAP_FMAC4 soap_in_ns3__char__(struct soap*, const char*, ns3__char__ *, const char*); -#ifndef soap_write__ns1__UploadMiniDump -#define soap_write__ns1__UploadMiniDump(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:UploadMiniDump", NULL) || soap_end_send(soap) ) +#ifndef soap_write_ns3__char__ +#define soap_write_ns3__char__(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns3:char", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 ns3__char__ * SOAP_FMAC4 soap_get_ns3__char__(struct soap*, ns3__char__ *, const char*, const char*); -#ifndef soap_read__ns1__UploadMiniDump -#define soap_read__ns1__UploadMiniDump(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadMiniDump(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns3__char__ +#define soap_read_ns3__char__(soap, data) ( soap_begin_recv(soap) || !soap_get_ns3__char__(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_get__ns1__UploadMiniDump(struct soap*, _ns1__UploadMiniDump *, const char*, const char*); +SOAP_FMAC1 ns3__char__ * SOAP_FMAC2 soap_instantiate_ns3__char__(struct soap*, int, const char*, const char*, size_t*); -#define soap_new__ns1__UploadMiniDump(soap, n) soap_instantiate__ns1__UploadMiniDump(soap, n, NULL, NULL, NULL) +inline ns3__char__ * soap_new_ns3__char__(struct soap *soap, int n = -1) { return soap_instantiate_ns3__char__(soap, n, NULL, NULL, NULL); } +inline ns3__char__ * soap_new_req_ns3__char__(struct soap *soap, int __item) { ns3__char__ *_p = soap_instantiate_ns3__char__(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns3__char__::__item = __item; } return _p; } -#define soap_delete__ns1__UploadMiniDump(soap, p) soap_delete(soap, p) +inline ns3__char__ * soap_new_set_ns3__char__(struct soap *soap, int __item, char *__item1) { ns3__char__ *_p = soap_instantiate_ns3__char__(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns3__char__::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } -SOAP_FMAC1 _ns1__UploadMiniDump * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDump(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDump(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete_ns3__char__(struct soap *soap, ns3__char__ *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE__ns1__HelloResponse -#define SOAP_TYPE__ns1__HelloResponse (17) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns3__char__(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns5__ArrayOfstring +#define SOAP_TYPE_ns5__ArrayOfstring (79) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__HelloResponse(struct soap*, const char*, int, const _ns1__HelloResponse *, const char*); -SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_in__ns1__HelloResponse(struct soap*, const char*, _ns1__HelloResponse *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns5__ArrayOfstring(struct soap*, const char*, int, const ns5__ArrayOfstring *, const char*); +SOAP_FMAC3 ns5__ArrayOfstring * SOAP_FMAC4 soap_in_ns5__ArrayOfstring(struct soap*, const char*, ns5__ArrayOfstring *, const char*); -#ifndef soap_write__ns1__HelloResponse -#define soap_write__ns1__HelloResponse(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:HelloResponse", NULL) || soap_end_send(soap) ) +#ifndef soap_write_ns5__ArrayOfstring +#define soap_write_ns5__ArrayOfstring(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns5:ArrayOfstring", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 ns5__ArrayOfstring * SOAP_FMAC4 soap_get_ns5__ArrayOfstring(struct soap*, ns5__ArrayOfstring *, const char*, const char*); -#ifndef soap_read__ns1__HelloResponse -#define soap_read__ns1__HelloResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__HelloResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_ns5__ArrayOfstring +#define soap_read_ns5__ArrayOfstring(soap, data) ( soap_begin_recv(soap) || !soap_get_ns5__ArrayOfstring(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_get__ns1__HelloResponse(struct soap*, _ns1__HelloResponse *, const char*, const char*); +SOAP_FMAC1 ns5__ArrayOfstring * SOAP_FMAC2 soap_instantiate_ns5__ArrayOfstring(struct soap*, int, const char*, const char*, size_t*); -#define soap_new__ns1__HelloResponse(soap, n) soap_instantiate__ns1__HelloResponse(soap, n, NULL, NULL, NULL) +inline ns5__ArrayOfstring * soap_new_ns5__ArrayOfstring(struct soap *soap, int n = -1) { return soap_instantiate_ns5__ArrayOfstring(soap, n, NULL, NULL, NULL); } +inline ns5__ArrayOfstring * soap_new_req_ns5__ArrayOfstring(struct soap *soap) { ns5__ArrayOfstring *_p = soap_instantiate_ns5__ArrayOfstring(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } -#define soap_delete__ns1__HelloResponse(soap, p) soap_delete(soap, p) +inline ns5__ArrayOfstring * soap_new_set_ns5__ArrayOfstring(struct soap *soap, std::vector& string, char *__item1) { ns5__ArrayOfstring *_p = soap_instantiate_ns5__ArrayOfstring(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns5__ArrayOfstring::string = string; _p->xsd__anyType::__item = __item1; } return _p; } -SOAP_FMAC1 _ns1__HelloResponse * SOAP_FMAC2 soap_instantiate__ns1__HelloResponse(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__HelloResponse(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete_ns5__ArrayOfstring(struct soap *soap, ns5__ArrayOfstring *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE__ns1__Hello -#define SOAP_TYPE__ns1__Hello (16) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns5__ArrayOfstring(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__UploadSymbolResponse +#define SOAP_TYPE__ns1__UploadSymbolResponse (78) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__Hello(struct soap*, const char*, int, const _ns1__Hello *, const char*); -SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_in__ns1__Hello(struct soap*, const char*, _ns1__Hello *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbolResponse(struct soap*, const char*, int, const _ns1__UploadSymbolResponse *, const char*); +SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_in__ns1__UploadSymbolResponse(struct soap*, const char*, _ns1__UploadSymbolResponse *, const char*); -#ifndef soap_write__ns1__Hello -#define soap_write__ns1__Hello(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:Hello", NULL) || soap_end_send(soap) ) +#ifndef soap_write__ns1__UploadSymbolResponse +#define soap_write__ns1__UploadSymbolResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadSymbolResponse", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 _ns1__UploadSymbolResponse * SOAP_FMAC4 soap_get__ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse *, const char*, const char*); -#ifndef soap_read__ns1__Hello -#define soap_read__ns1__Hello(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__Hello(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read__ns1__UploadSymbolResponse +#define soap_read__ns1__UploadSymbolResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadSymbolResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_get__ns1__Hello(struct soap*, _ns1__Hello *, const char*, const char*); +SOAP_FMAC1 _ns1__UploadSymbolResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbolResponse(struct soap*, int, const char*, const char*, size_t*); -#define soap_new__ns1__Hello(soap, n) soap_instantiate__ns1__Hello(soap, n, NULL, NULL, NULL) +inline _ns1__UploadSymbolResponse * soap_new__ns1__UploadSymbolResponse(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadSymbolResponse(soap, n, NULL, NULL, NULL); } +inline _ns1__UploadSymbolResponse * soap_new_req__ns1__UploadSymbolResponse(struct soap *soap) { _ns1__UploadSymbolResponse *_p = soap_instantiate__ns1__UploadSymbolResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } -#define soap_delete__ns1__Hello(soap, p) soap_delete(soap, p) +inline _ns1__UploadSymbolResponse * soap_new_set__ns1__UploadSymbolResponse(struct soap *soap, std::wstring *UploadSymbolResult) { _ns1__UploadSymbolResponse *_p = soap_instantiate__ns1__UploadSymbolResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadSymbolResponse::UploadSymbolResult = UploadSymbolResult; } return _p; } -SOAP_FMAC1 _ns1__Hello * SOAP_FMAC2 soap_instantiate__ns1__Hello(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__Hello(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete__ns1__UploadSymbolResponse(struct soap *soap, _ns1__UploadSymbolResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbolResponse(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef SOAP_TYPE_ns1__Solution -#define SOAP_TYPE_ns1__Solution (15) +#ifndef SOAP_TYPE__ns1__UploadSymbol +#define SOAP_TYPE__ns1__UploadSymbol (77) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Solution(struct soap*, const char*, int, const ns1__Solution *, const char*); -SOAP_FMAC3 ns1__Solution * SOAP_FMAC4 soap_in_ns1__Solution(struct soap*, const char*, ns1__Solution *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadSymbol(struct soap*, const char*, int, const _ns1__UploadSymbol *, const char*); +SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_in__ns1__UploadSymbol(struct soap*, const char*, _ns1__UploadSymbol *, const char*); -#ifndef soap_write_ns1__Solution -#define soap_write_ns1__Solution(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:Solution", NULL) || soap_end_send(soap) ) +#ifndef soap_write__ns1__UploadSymbol +#define soap_write__ns1__UploadSymbol(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadSymbol", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 _ns1__UploadSymbol * SOAP_FMAC4 soap_get__ns1__UploadSymbol(struct soap*, _ns1__UploadSymbol *, const char*, const char*); -#ifndef soap_read_ns1__Solution -#define soap_read_ns1__Solution(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__Solution(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read__ns1__UploadSymbol +#define soap_read__ns1__UploadSymbol(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadSymbol(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 ns1__Solution * SOAP_FMAC4 soap_get_ns1__Solution(struct soap*, ns1__Solution *, const char*, const char*); +SOAP_FMAC1 _ns1__UploadSymbol * SOAP_FMAC2 soap_instantiate__ns1__UploadSymbol(struct soap*, int, const char*, const char*, size_t*); -#define soap_new_ns1__Solution(soap, n) soap_instantiate_ns1__Solution(soap, n, NULL, NULL, NULL) +inline _ns1__UploadSymbol * soap_new__ns1__UploadSymbol(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadSymbol(soap, n, NULL, NULL, NULL); } +inline _ns1__UploadSymbol * soap_new_req__ns1__UploadSymbol(struct soap *soap) { _ns1__UploadSymbol *_p = soap_instantiate__ns1__UploadSymbol(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } -#define soap_delete_ns1__Solution(soap, p) soap_delete(soap, p) +inline _ns1__UploadSymbol * soap_new_set__ns1__UploadSymbol(struct soap *soap, ns1__ClientLib *client, ns1__Application *app, bool *publish, struct _xop__Include *sym) { _ns1__UploadSymbol *_p = soap_instantiate__ns1__UploadSymbol(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadSymbol::client = client; _p->_ns1__UploadSymbol::app = app; _p->_ns1__UploadSymbol::publish = publish; _p->_ns1__UploadSymbol::sym = sym; } return _p; } -SOAP_FMAC1 ns1__Solution * SOAP_FMAC2 soap_instantiate_ns1__Solution(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Solution(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete__ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE_ns1__Response -#define SOAP_TYPE_ns1__Response (14) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadSymbol(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse +#define SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse (76) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Response(struct soap*, const char*, int, const ns1__Response *, const char*); -SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_in_ns1__Response(struct soap*, const char*, ns1__Response *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__RejectedToSendAdditionalInfoResponse(struct soap*, const char*, int, const _ns1__RejectedToSendAdditionalInfoResponse *, const char*); +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse * SOAP_FMAC4 soap_in__ns1__RejectedToSendAdditionalInfoResponse(struct soap*, const char*, _ns1__RejectedToSendAdditionalInfoResponse *, const char*); -#ifndef soap_write_ns1__Response -#define soap_write_ns1__Response(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:Response", NULL) || soap_end_send(soap) ) +#ifndef soap_write__ns1__RejectedToSendAdditionalInfoResponse +#define soap_write__ns1__RejectedToSendAdditionalInfoResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:RejectedToSendAdditionalInfoResponse", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse * SOAP_FMAC4 soap_get__ns1__RejectedToSendAdditionalInfoResponse(struct soap*, _ns1__RejectedToSendAdditionalInfoResponse *, const char*, const char*); + +#ifndef soap_read__ns1__RejectedToSendAdditionalInfoResponse +#define soap_read__ns1__RejectedToSendAdditionalInfoResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__RejectedToSendAdditionalInfoResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__RejectedToSendAdditionalInfoResponse * SOAP_FMAC2 soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__RejectedToSendAdditionalInfoResponse * soap_new__ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, int n = -1) { return soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(soap, n, NULL, NULL, NULL); } + +inline _ns1__RejectedToSendAdditionalInfoResponse * soap_new_req__ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap) { _ns1__RejectedToSendAdditionalInfoResponse *_p = soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__RejectedToSendAdditionalInfoResponse * soap_new_set__ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, ns1__Response *RejectedToSendAdditionalInfoResult) { _ns1__RejectedToSendAdditionalInfoResponse *_p = soap_instantiate__ns1__RejectedToSendAdditionalInfoResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__RejectedToSendAdditionalInfoResponse::RejectedToSendAdditionalInfoResult = RejectedToSendAdditionalInfoResult; } return _p; } + +inline void soap_delete__ns1__RejectedToSendAdditionalInfoResponse(struct soap *soap, _ns1__RejectedToSendAdditionalInfoResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__RejectedToSendAdditionalInfoResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__RejectedToSendAdditionalInfo +#define SOAP_TYPE__ns1__RejectedToSendAdditionalInfo (75) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__RejectedToSendAdditionalInfo(struct soap*, const char*, int, const _ns1__RejectedToSendAdditionalInfo *, const char*); +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_in__ns1__RejectedToSendAdditionalInfo(struct soap*, const char*, _ns1__RejectedToSendAdditionalInfo *, const char*); + +#ifndef soap_write__ns1__RejectedToSendAdditionalInfo +#define soap_write__ns1__RejectedToSendAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:RejectedToSendAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_get__ns1__RejectedToSendAdditionalInfo(struct soap*, _ns1__RejectedToSendAdditionalInfo *, const char*, const char*); + +#ifndef soap_read__ns1__RejectedToSendAdditionalInfo +#define soap_read__ns1__RejectedToSendAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__RejectedToSendAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__RejectedToSendAdditionalInfo * SOAP_FMAC2 soap_instantiate__ns1__RejectedToSendAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__RejectedToSendAdditionalInfo * soap_new__ns1__RejectedToSendAdditionalInfo(struct soap *soap, int n = -1) { return soap_instantiate__ns1__RejectedToSendAdditionalInfo(soap, n, NULL, NULL, NULL); } + +inline _ns1__RejectedToSendAdditionalInfo * soap_new_req__ns1__RejectedToSendAdditionalInfo(struct soap *soap) { _ns1__RejectedToSendAdditionalInfo *_p = soap_instantiate__ns1__RejectedToSendAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__RejectedToSendAdditionalInfo * soap_new_set__ns1__RejectedToSendAdditionalInfo(struct soap *soap, ns1__ClientLib *client, ns1__Application *app, int *miniDumpID, struct _xop__Include *context) { _ns1__RejectedToSendAdditionalInfo *_p = soap_instantiate__ns1__RejectedToSendAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__RejectedToSendAdditionalInfo::client = client; _p->_ns1__RejectedToSendAdditionalInfo::app = app; _p->_ns1__RejectedToSendAdditionalInfo::miniDumpID = miniDumpID; _p->_ns1__RejectedToSendAdditionalInfo::context = context; } return _p; } + +inline void soap_delete__ns1__RejectedToSendAdditionalInfo(struct soap *soap, _ns1__RejectedToSendAdditionalInfo *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__RejectedToSendAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__UploadAdditionalInfoResponse +#define SOAP_TYPE__ns1__UploadAdditionalInfoResponse (74) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfoResponse(struct soap*, const char*, int, const _ns1__UploadAdditionalInfoResponse *, const char*); +SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfoResponse(struct soap*, const char*, _ns1__UploadAdditionalInfoResponse *, const char*); + +#ifndef soap_write__ns1__UploadAdditionalInfoResponse +#define soap_write__ns1__UploadAdditionalInfoResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadAdditionalInfoResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse *, const char*, const char*); + +#ifndef soap_read__ns1__UploadAdditionalInfoResponse +#define soap_read__ns1__UploadAdditionalInfoResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadAdditionalInfoResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__UploadAdditionalInfoResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfoResponse(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__UploadAdditionalInfoResponse * soap_new__ns1__UploadAdditionalInfoResponse(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadAdditionalInfoResponse(soap, n, NULL, NULL, NULL); } + +inline _ns1__UploadAdditionalInfoResponse * soap_new_req__ns1__UploadAdditionalInfoResponse(struct soap *soap) { _ns1__UploadAdditionalInfoResponse *_p = soap_instantiate__ns1__UploadAdditionalInfoResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__UploadAdditionalInfoResponse * soap_new_set__ns1__UploadAdditionalInfoResponse(struct soap *soap, ns1__Response *UploadAdditionalInfoResult) { _ns1__UploadAdditionalInfoResponse *_p = soap_instantiate__ns1__UploadAdditionalInfoResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadAdditionalInfoResponse::UploadAdditionalInfoResult = UploadAdditionalInfoResult; } return _p; } + +inline void soap_delete__ns1__UploadAdditionalInfoResponse(struct soap *soap, _ns1__UploadAdditionalInfoResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfoResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__UploadAdditionalInfo +#define SOAP_TYPE__ns1__UploadAdditionalInfo (73) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadAdditionalInfo(struct soap*, const char*, int, const _ns1__UploadAdditionalInfo *, const char*); +SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_in__ns1__UploadAdditionalInfo(struct soap*, const char*, _ns1__UploadAdditionalInfo *, const char*); + +#ifndef soap_write__ns1__UploadAdditionalInfo +#define soap_write__ns1__UploadAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_get__ns1__UploadAdditionalInfo(struct soap*, _ns1__UploadAdditionalInfo *, const char*, const char*); + +#ifndef soap_read__ns1__UploadAdditionalInfo +#define soap_read__ns1__UploadAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate__ns1__UploadAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__UploadAdditionalInfo * soap_new__ns1__UploadAdditionalInfo(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadAdditionalInfo(soap, n, NULL, NULL, NULL); } + +inline _ns1__UploadAdditionalInfo * soap_new_req__ns1__UploadAdditionalInfo(struct soap *soap) { _ns1__UploadAdditionalInfo *_p = soap_instantiate__ns1__UploadAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__UploadAdditionalInfo * soap_new_set__ns1__UploadAdditionalInfo(struct soap *soap, ns1__ClientLib *client, ns1__Application *app, int *miniDumpID, struct _xop__Include *info, struct _xop__Include *context) { _ns1__UploadAdditionalInfo *_p = soap_instantiate__ns1__UploadAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadAdditionalInfo::client = client; _p->_ns1__UploadAdditionalInfo::app = app; _p->_ns1__UploadAdditionalInfo::miniDumpID = miniDumpID; _p->_ns1__UploadAdditionalInfo::info = info; _p->_ns1__UploadAdditionalInfo::context = context; } return _p; } + +inline void soap_delete__ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__UploadFullDumpResponse +#define SOAP_TYPE__ns1__UploadFullDumpResponse (72) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadFullDumpResponse(struct soap*, const char*, int, const _ns1__UploadFullDumpResponse *, const char*); +SOAP_FMAC3 _ns1__UploadFullDumpResponse * SOAP_FMAC4 soap_in__ns1__UploadFullDumpResponse(struct soap*, const char*, _ns1__UploadFullDumpResponse *, const char*); + +#ifndef soap_write__ns1__UploadFullDumpResponse +#define soap_write__ns1__UploadFullDumpResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadFullDumpResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadFullDumpResponse * SOAP_FMAC4 soap_get__ns1__UploadFullDumpResponse(struct soap*, _ns1__UploadFullDumpResponse *, const char*, const char*); + +#ifndef soap_read__ns1__UploadFullDumpResponse +#define soap_read__ns1__UploadFullDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadFullDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__UploadFullDumpResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadFullDumpResponse(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__UploadFullDumpResponse * soap_new__ns1__UploadFullDumpResponse(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadFullDumpResponse(soap, n, NULL, NULL, NULL); } + +inline _ns1__UploadFullDumpResponse * soap_new_req__ns1__UploadFullDumpResponse(struct soap *soap) { _ns1__UploadFullDumpResponse *_p = soap_instantiate__ns1__UploadFullDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__UploadFullDumpResponse * soap_new_set__ns1__UploadFullDumpResponse(struct soap *soap, ns1__Response *UploadFullDumpResult) { _ns1__UploadFullDumpResponse *_p = soap_instantiate__ns1__UploadFullDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadFullDumpResponse::UploadFullDumpResult = UploadFullDumpResult; } return _p; } + +inline void soap_delete__ns1__UploadFullDumpResponse(struct soap *soap, _ns1__UploadFullDumpResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadFullDumpResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__UploadFullDump +#define SOAP_TYPE__ns1__UploadFullDump (71) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadFullDump(struct soap*, const char*, int, const _ns1__UploadFullDump *, const char*); +SOAP_FMAC3 _ns1__UploadFullDump * SOAP_FMAC4 soap_in__ns1__UploadFullDump(struct soap*, const char*, _ns1__UploadFullDump *, const char*); + +#ifndef soap_write__ns1__UploadFullDump +#define soap_write__ns1__UploadFullDump(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadFullDump", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadFullDump * SOAP_FMAC4 soap_get__ns1__UploadFullDump(struct soap*, _ns1__UploadFullDump *, const char*, const char*); + +#ifndef soap_read__ns1__UploadFullDump +#define soap_read__ns1__UploadFullDump(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadFullDump(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__UploadFullDump * SOAP_FMAC2 soap_instantiate__ns1__UploadFullDump(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__UploadFullDump * soap_new__ns1__UploadFullDump(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadFullDump(soap, n, NULL, NULL, NULL); } + +inline _ns1__UploadFullDump * soap_new_req__ns1__UploadFullDump(struct soap *soap) { _ns1__UploadFullDump *_p = soap_instantiate__ns1__UploadFullDump(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__UploadFullDump * soap_new_set__ns1__UploadFullDump(struct soap *soap, ns1__ClientLib *client, ns1__Application *app, int *miniDumpID, struct _xop__Include *dumpInZip, struct _xop__Include *context) { _ns1__UploadFullDump *_p = soap_instantiate__ns1__UploadFullDump(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadFullDump::client = client; _p->_ns1__UploadFullDump::app = app; _p->_ns1__UploadFullDump::miniDumpID = miniDumpID; _p->_ns1__UploadFullDump::dumpInZip = dumpInZip; _p->_ns1__UploadFullDump::context = context; } return _p; } + +inline void soap_delete__ns1__UploadFullDump(struct soap *soap, _ns1__UploadFullDump *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadFullDump(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__UploadMiniDumpResponse +#define SOAP_TYPE__ns1__UploadMiniDumpResponse (70) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDumpResponse(struct soap*, const char*, int, const _ns1__UploadMiniDumpResponse *, const char*); +SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_in__ns1__UploadMiniDumpResponse(struct soap*, const char*, _ns1__UploadMiniDumpResponse *, const char*); + +#ifndef soap_write__ns1__UploadMiniDumpResponse +#define soap_write__ns1__UploadMiniDumpResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadMiniDumpResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadMiniDumpResponse * SOAP_FMAC4 soap_get__ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse *, const char*, const char*); + +#ifndef soap_read__ns1__UploadMiniDumpResponse +#define soap_read__ns1__UploadMiniDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadMiniDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__UploadMiniDumpResponse * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDumpResponse(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__UploadMiniDumpResponse * soap_new__ns1__UploadMiniDumpResponse(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadMiniDumpResponse(soap, n, NULL, NULL, NULL); } + +inline _ns1__UploadMiniDumpResponse * soap_new_req__ns1__UploadMiniDumpResponse(struct soap *soap) { _ns1__UploadMiniDumpResponse *_p = soap_instantiate__ns1__UploadMiniDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__UploadMiniDumpResponse * soap_new_set__ns1__UploadMiniDumpResponse(struct soap *soap, ns1__Response *UploadMiniDumpResult) { _ns1__UploadMiniDumpResponse *_p = soap_instantiate__ns1__UploadMiniDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadMiniDumpResponse::UploadMiniDumpResult = UploadMiniDumpResult; } return _p; } + +inline void soap_delete__ns1__UploadMiniDumpResponse(struct soap *soap, _ns1__UploadMiniDumpResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDumpResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__UploadMiniDump +#define SOAP_TYPE__ns1__UploadMiniDump (69) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__UploadMiniDump(struct soap*, const char*, int, const _ns1__UploadMiniDump *, const char*); +SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_in__ns1__UploadMiniDump(struct soap*, const char*, _ns1__UploadMiniDump *, const char*); + +#ifndef soap_write__ns1__UploadMiniDump +#define soap_write__ns1__UploadMiniDump(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:UploadMiniDump", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadMiniDump * SOAP_FMAC4 soap_get__ns1__UploadMiniDump(struct soap*, _ns1__UploadMiniDump *, const char*, const char*); + +#ifndef soap_read__ns1__UploadMiniDump +#define soap_read__ns1__UploadMiniDump(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__UploadMiniDump(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__UploadMiniDump * SOAP_FMAC2 soap_instantiate__ns1__UploadMiniDump(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__UploadMiniDump * soap_new__ns1__UploadMiniDump(struct soap *soap, int n = -1) { return soap_instantiate__ns1__UploadMiniDump(soap, n, NULL, NULL, NULL); } + +inline _ns1__UploadMiniDump * soap_new_req__ns1__UploadMiniDump(struct soap *soap) { _ns1__UploadMiniDump *_p = soap_instantiate__ns1__UploadMiniDump(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__UploadMiniDump * soap_new_set__ns1__UploadMiniDump(struct soap *soap, ns1__ClientLib *client, ns1__Application *app, ns1__DumpAdditionalInfo *addInfo, struct _xop__Include *dump, struct _xop__Include *context) { _ns1__UploadMiniDump *_p = soap_instantiate__ns1__UploadMiniDump(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__UploadMiniDump::client = client; _p->_ns1__UploadMiniDump::app = app; _p->_ns1__UploadMiniDump::addInfo = addInfo; _p->_ns1__UploadMiniDump::dump = dump; _p->_ns1__UploadMiniDump::context = context; } return _p; } + +inline void soap_delete__ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__UploadMiniDump(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__HelloResponse +#define SOAP_TYPE__ns1__HelloResponse (68) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__HelloResponse(struct soap*, const char*, int, const _ns1__HelloResponse *, const char*); +SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_in__ns1__HelloResponse(struct soap*, const char*, _ns1__HelloResponse *, const char*); + +#ifndef soap_write__ns1__HelloResponse +#define soap_write__ns1__HelloResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:HelloResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__HelloResponse * SOAP_FMAC4 soap_get__ns1__HelloResponse(struct soap*, _ns1__HelloResponse *, const char*, const char*); + +#ifndef soap_read__ns1__HelloResponse +#define soap_read__ns1__HelloResponse(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__HelloResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__HelloResponse * SOAP_FMAC2 soap_instantiate__ns1__HelloResponse(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__HelloResponse * soap_new__ns1__HelloResponse(struct soap *soap, int n = -1) { return soap_instantiate__ns1__HelloResponse(soap, n, NULL, NULL, NULL); } + +inline _ns1__HelloResponse * soap_new_req__ns1__HelloResponse(struct soap *soap) { _ns1__HelloResponse *_p = soap_instantiate__ns1__HelloResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__HelloResponse * soap_new_set__ns1__HelloResponse(struct soap *soap, ns1__Response *HelloResult) { _ns1__HelloResponse *_p = soap_instantiate__ns1__HelloResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__HelloResponse::HelloResult = HelloResult; } return _p; } + +inline void soap_delete__ns1__HelloResponse(struct soap *soap, _ns1__HelloResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__HelloResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE__ns1__Hello +#define SOAP_TYPE__ns1__Hello (67) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out__ns1__Hello(struct soap*, const char*, int, const _ns1__Hello *, const char*); +SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_in__ns1__Hello(struct soap*, const char*, _ns1__Hello *, const char*); + +#ifndef soap_write__ns1__Hello +#define soap_write__ns1__Hello(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:Hello", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__Hello * SOAP_FMAC4 soap_get__ns1__Hello(struct soap*, _ns1__Hello *, const char*, const char*); + +#ifndef soap_read__ns1__Hello +#define soap_read__ns1__Hello(soap, data) ( soap_begin_recv(soap) || !soap_get__ns1__Hello(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 _ns1__Hello * SOAP_FMAC2 soap_instantiate__ns1__Hello(struct soap*, int, const char*, const char*, size_t*); + +inline _ns1__Hello * soap_new__ns1__Hello(struct soap *soap, int n = -1) { return soap_instantiate__ns1__Hello(soap, n, NULL, NULL, NULL); } + +inline _ns1__Hello * soap_new_req__ns1__Hello(struct soap *soap) { _ns1__Hello *_p = soap_instantiate__ns1__Hello(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline _ns1__Hello * soap_new_set__ns1__Hello(struct soap *soap, ns1__ClientLib *clientLib, ns1__Application *app, ns1__AppAdditionalInfo *appAddInfo, ns1__DumpAdditionalInfo *addInfo, ns1__ArrayOfModuleSymbolInfo *availableSymbols, struct _xop__Include *stack) { _ns1__Hello *_p = soap_instantiate__ns1__Hello(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->_ns1__Hello::clientLib = clientLib; _p->_ns1__Hello::app = app; _p->_ns1__Hello::appAddInfo = appAddInfo; _p->_ns1__Hello::addInfo = addInfo; _p->_ns1__Hello::availableSymbols = availableSymbols; _p->_ns1__Hello::stack = stack; } return _p; } + +inline void soap_delete__ns1__Hello(struct soap *soap, _ns1__Hello *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy__ns1__Hello(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__NeedMoreInfoResponse +#define SOAP_TYPE_ns1__NeedMoreInfoResponse (66) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedMoreInfoResponse(struct soap*, const char*, int, const ns1__NeedMoreInfoResponse *, const char*); +SOAP_FMAC3 ns1__NeedMoreInfoResponse * SOAP_FMAC4 soap_in_ns1__NeedMoreInfoResponse(struct soap*, const char*, ns1__NeedMoreInfoResponse *, const char*); + +#ifndef soap_write_ns1__NeedMoreInfoResponse +#define soap_write_ns1__NeedMoreInfoResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:NeedMoreInfoResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__NeedMoreInfoResponse * SOAP_FMAC4 soap_get_ns1__NeedMoreInfoResponse(struct soap*, ns1__NeedMoreInfoResponse *, const char*, const char*); + +#ifndef soap_read_ns1__NeedMoreInfoResponse +#define soap_read_ns1__NeedMoreInfoResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__NeedMoreInfoResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__NeedMoreInfoResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedMoreInfoResponse(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__NeedMoreInfoResponse * soap_new_ns1__NeedMoreInfoResponse(struct soap *soap, int n = -1) { return soap_instantiate_ns1__NeedMoreInfoResponse(soap, n, NULL, NULL, NULL); } + +inline ns1__NeedMoreInfoResponse * soap_new_req_ns1__NeedMoreInfoResponse(struct soap *soap) { ns1__NeedMoreInfoResponse *_p = soap_instantiate_ns1__NeedMoreInfoResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline ns1__NeedMoreInfoResponse * soap_new_set_ns1__NeedMoreInfoResponse(struct soap *soap, struct _xop__Include *infoModule, std::wstring *infoModuleCfg, std::wstring *clientID1, struct _xop__Include *context1, int *dumpGroupID1, int *dumpID1, struct _xop__Include *garbage1, int *problemID1, std::wstring *urlToProblem1, char *__item2) { ns1__NeedMoreInfoResponse *_p = soap_instantiate_ns1__NeedMoreInfoResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__NeedMoreInfoResponse::infoModule = infoModule; _p->ns1__NeedMoreInfoResponse::infoModuleCfg = infoModuleCfg; _p->ns1__Response::clientID = clientID1; _p->ns1__Response::context = context1; _p->ns1__Response::dumpGroupID = dumpGroupID1; _p->ns1__Response::dumpID = dumpID1; _p->ns1__Response::garbage = garbage1; _p->ns1__Response::problemID = problemID1; _p->ns1__Response::urlToProblem = urlToProblem1; _p->xsd__anyType::__item = __item2; } return _p; } + +inline void soap_delete_ns1__NeedMoreInfoResponse(struct soap *soap, ns1__NeedMoreInfoResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedMoreInfoResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__NeedFullDumpResponse +#define SOAP_TYPE_ns1__NeedFullDumpResponse (65) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedFullDumpResponse(struct soap*, const char*, int, const ns1__NeedFullDumpResponse *, const char*); +SOAP_FMAC3 ns1__NeedFullDumpResponse * SOAP_FMAC4 soap_in_ns1__NeedFullDumpResponse(struct soap*, const char*, ns1__NeedFullDumpResponse *, const char*); + +#ifndef soap_write_ns1__NeedFullDumpResponse +#define soap_write_ns1__NeedFullDumpResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:NeedFullDumpResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__NeedFullDumpResponse * SOAP_FMAC4 soap_get_ns1__NeedFullDumpResponse(struct soap*, ns1__NeedFullDumpResponse *, const char*, const char*); + +#ifndef soap_read_ns1__NeedFullDumpResponse +#define soap_read_ns1__NeedFullDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__NeedFullDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__NeedFullDumpResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedFullDumpResponse(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__NeedFullDumpResponse * soap_new_ns1__NeedFullDumpResponse(struct soap *soap, int n = -1) { return soap_instantiate_ns1__NeedFullDumpResponse(soap, n, NULL, NULL, NULL); } + +inline ns1__NeedFullDumpResponse * soap_new_req_ns1__NeedFullDumpResponse(struct soap *soap, bool attachUserInfo, unsigned int restrictedDumpType) { ns1__NeedFullDumpResponse *_p = soap_instantiate_ns1__NeedFullDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__NeedFullDumpResponse::attachUserInfo = attachUserInfo; _p->ns1__NeedFullDumpResponse::restrictedDumpType = restrictedDumpType; } return _p; } + +inline ns1__NeedFullDumpResponse * soap_new_set_ns1__NeedFullDumpResponse(struct soap *soap, bool attachUserInfo, unsigned int restrictedDumpType, std::wstring *clientID1, struct _xop__Include *context1, int *dumpGroupID1, int *dumpID1, struct _xop__Include *garbage1, int *problemID1, std::wstring *urlToProblem1, char *__item2) { ns1__NeedFullDumpResponse *_p = soap_instantiate_ns1__NeedFullDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__NeedFullDumpResponse::attachUserInfo = attachUserInfo; _p->ns1__NeedFullDumpResponse::restrictedDumpType = restrictedDumpType; _p->ns1__Response::clientID = clientID1; _p->ns1__Response::context = context1; _p->ns1__Response::dumpGroupID = dumpGroupID1; _p->ns1__Response::dumpID = dumpID1; _p->ns1__Response::garbage = garbage1; _p->ns1__Response::problemID = problemID1; _p->ns1__Response::urlToProblem = urlToProblem1; _p->xsd__anyType::__item = __item2; } return _p; } + +inline void soap_delete_ns1__NeedFullDumpResponse(struct soap *soap, ns1__NeedFullDumpResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedFullDumpResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__NeedMiniDumpResponse +#define SOAP_TYPE_ns1__NeedMiniDumpResponse (64) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedMiniDumpResponse(struct soap*, const char*, int, const ns1__NeedMiniDumpResponse *, const char*); +SOAP_FMAC3 ns1__NeedMiniDumpResponse * SOAP_FMAC4 soap_in_ns1__NeedMiniDumpResponse(struct soap*, const char*, ns1__NeedMiniDumpResponse *, const char*); + +#ifndef soap_write_ns1__NeedMiniDumpResponse +#define soap_write_ns1__NeedMiniDumpResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:NeedMiniDumpResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__NeedMiniDumpResponse * SOAP_FMAC4 soap_get_ns1__NeedMiniDumpResponse(struct soap*, ns1__NeedMiniDumpResponse *, const char*, const char*); + +#ifndef soap_read_ns1__NeedMiniDumpResponse +#define soap_read_ns1__NeedMiniDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__NeedMiniDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__NeedMiniDumpResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedMiniDumpResponse(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__NeedMiniDumpResponse * soap_new_ns1__NeedMiniDumpResponse(struct soap *soap, int n = -1) { return soap_instantiate_ns1__NeedMiniDumpResponse(soap, n, NULL, NULL, NULL); } + +inline ns1__NeedMiniDumpResponse * soap_new_req_ns1__NeedMiniDumpResponse(struct soap *soap) { ns1__NeedMiniDumpResponse *_p = soap_instantiate_ns1__NeedMiniDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline ns1__NeedMiniDumpResponse * soap_new_set_ns1__NeedMiniDumpResponse(struct soap *soap, std::wstring *clientID1, struct _xop__Include *context1, int *dumpGroupID1, int *dumpID1, struct _xop__Include *garbage1, int *problemID1, std::wstring *urlToProblem1, char *__item2) { ns1__NeedMiniDumpResponse *_p = soap_instantiate_ns1__NeedMiniDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__Response::clientID = clientID1; _p->ns1__Response::context = context1; _p->ns1__Response::dumpGroupID = dumpGroupID1; _p->ns1__Response::dumpID = dumpID1; _p->ns1__Response::garbage = garbage1; _p->ns1__Response::problemID = problemID1; _p->ns1__Response::urlToProblem = urlToProblem1; _p->xsd__anyType::__item = __item2; } return _p; } + +inline void soap_delete_ns1__NeedMiniDumpResponse(struct soap *soap, ns1__NeedMiniDumpResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedMiniDumpResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse +#define SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse (63) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__NeedSymbolsThenMiniDumpResponse(struct soap*, const char*, int, const ns1__NeedSymbolsThenMiniDumpResponse *, const char*); +SOAP_FMAC3 ns1__NeedSymbolsThenMiniDumpResponse * SOAP_FMAC4 soap_in_ns1__NeedSymbolsThenMiniDumpResponse(struct soap*, const char*, ns1__NeedSymbolsThenMiniDumpResponse *, const char*); + +#ifndef soap_write_ns1__NeedSymbolsThenMiniDumpResponse +#define soap_write_ns1__NeedSymbolsThenMiniDumpResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:NeedSymbolsThenMiniDumpResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__NeedSymbolsThenMiniDumpResponse * SOAP_FMAC4 soap_get_ns1__NeedSymbolsThenMiniDumpResponse(struct soap*, ns1__NeedSymbolsThenMiniDumpResponse *, const char*, const char*); + +#ifndef soap_read_ns1__NeedSymbolsThenMiniDumpResponse +#define soap_read_ns1__NeedSymbolsThenMiniDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__NeedSymbolsThenMiniDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__NeedSymbolsThenMiniDumpResponse * SOAP_FMAC2 soap_instantiate_ns1__NeedSymbolsThenMiniDumpResponse(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__NeedSymbolsThenMiniDumpResponse * soap_new_ns1__NeedSymbolsThenMiniDumpResponse(struct soap *soap, int n = -1) { return soap_instantiate_ns1__NeedSymbolsThenMiniDumpResponse(soap, n, NULL, NULL, NULL); } + +inline ns1__NeedSymbolsThenMiniDumpResponse * soap_new_req_ns1__NeedSymbolsThenMiniDumpResponse(struct soap *soap, bool askConfirmation) { ns1__NeedSymbolsThenMiniDumpResponse *_p = soap_instantiate_ns1__NeedSymbolsThenMiniDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__NeedSymbolsThenMiniDumpResponse::askConfirmation = askConfirmation; } return _p; } + +inline ns1__NeedSymbolsThenMiniDumpResponse * soap_new_set_ns1__NeedSymbolsThenMiniDumpResponse(struct soap *soap, bool askConfirmation, ns5__ArrayOfstring *msSymbols, ns5__ArrayOfstring *symbols, std::wstring *clientID1, struct _xop__Include *context1, int *dumpGroupID1, int *dumpID1, struct _xop__Include *garbage1, int *problemID1, std::wstring *urlToProblem1, char *__item2) { ns1__NeedSymbolsThenMiniDumpResponse *_p = soap_instantiate_ns1__NeedSymbolsThenMiniDumpResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__NeedSymbolsThenMiniDumpResponse::askConfirmation = askConfirmation; _p->ns1__NeedSymbolsThenMiniDumpResponse::msSymbols = msSymbols; _p->ns1__NeedSymbolsThenMiniDumpResponse::symbols = symbols; _p->ns1__Response::clientID = clientID1; _p->ns1__Response::context = context1; _p->ns1__Response::dumpGroupID = dumpGroupID1; _p->ns1__Response::dumpID = dumpID1; _p->ns1__Response::garbage = garbage1; _p->ns1__Response::problemID = problemID1; _p->ns1__Response::urlToProblem = urlToProblem1; _p->xsd__anyType::__item = __item2; } return _p; } + +inline void soap_delete_ns1__NeedSymbolsThenMiniDumpResponse(struct soap *soap, ns1__NeedSymbolsThenMiniDumpResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__NeedSymbolsThenMiniDumpResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__HaveSolutionResponse +#define SOAP_TYPE_ns1__HaveSolutionResponse (62) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__HaveSolutionResponse(struct soap*, const char*, int, const ns1__HaveSolutionResponse *, const char*); +SOAP_FMAC3 ns1__HaveSolutionResponse * SOAP_FMAC4 soap_in_ns1__HaveSolutionResponse(struct soap*, const char*, ns1__HaveSolutionResponse *, const char*); + +#ifndef soap_write_ns1__HaveSolutionResponse +#define soap_write_ns1__HaveSolutionResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:HaveSolutionResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__HaveSolutionResponse * SOAP_FMAC4 soap_get_ns1__HaveSolutionResponse(struct soap*, ns1__HaveSolutionResponse *, const char*, const char*); + +#ifndef soap_read_ns1__HaveSolutionResponse +#define soap_read_ns1__HaveSolutionResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__HaveSolutionResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__HaveSolutionResponse * SOAP_FMAC2 soap_instantiate_ns1__HaveSolutionResponse(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__HaveSolutionResponse * soap_new_ns1__HaveSolutionResponse(struct soap *soap, int n = -1) { return soap_instantiate_ns1__HaveSolutionResponse(soap, n, NULL, NULL, NULL); } + +inline ns1__HaveSolutionResponse * soap_new_req_ns1__HaveSolutionResponse(struct soap *soap, bool askConfirmation, enum ns4__HaveSolutionResponse_SolutionType type) { ns1__HaveSolutionResponse *_p = soap_instantiate_ns1__HaveSolutionResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__HaveSolutionResponse::askConfirmation = askConfirmation; _p->ns1__HaveSolutionResponse::type = type; } return _p; } + +inline ns1__HaveSolutionResponse * soap_new_set_ns1__HaveSolutionResponse(struct soap *soap, bool askConfirmation, struct _xop__Include *exe, enum ns4__HaveSolutionResponse_SolutionType type, std::wstring *url, std::wstring *clientID1, struct _xop__Include *context1, int *dumpGroupID1, int *dumpID1, struct _xop__Include *garbage1, int *problemID1, std::wstring *urlToProblem1, char *__item2) { ns1__HaveSolutionResponse *_p = soap_instantiate_ns1__HaveSolutionResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__HaveSolutionResponse::askConfirmation = askConfirmation; _p->ns1__HaveSolutionResponse::exe = exe; _p->ns1__HaveSolutionResponse::type = type; _p->ns1__HaveSolutionResponse::url = url; _p->ns1__Response::clientID = clientID1; _p->ns1__Response::context = context1; _p->ns1__Response::dumpGroupID = dumpGroupID1; _p->ns1__Response::dumpID = dumpID1; _p->ns1__Response::garbage = garbage1; _p->ns1__Response::problemID = problemID1; _p->ns1__Response::urlToProblem = urlToProblem1; _p->xsd__anyType::__item = __item2; } return _p; } + +inline void soap_delete_ns1__HaveSolutionResponse(struct soap *soap, ns1__HaveSolutionResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__HaveSolutionResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__ErrorResponse +#define SOAP_TYPE_ns1__ErrorResponse (61) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ErrorResponse(struct soap*, const char*, int, const ns1__ErrorResponse *, const char*); +SOAP_FMAC3 ns1__ErrorResponse * SOAP_FMAC4 soap_in_ns1__ErrorResponse(struct soap*, const char*, ns1__ErrorResponse *, const char*); + +#ifndef soap_write_ns1__ErrorResponse +#define soap_write_ns1__ErrorResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:ErrorResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__ErrorResponse * SOAP_FMAC4 soap_get_ns1__ErrorResponse(struct soap*, ns1__ErrorResponse *, const char*, const char*); + +#ifndef soap_read_ns1__ErrorResponse +#define soap_read_ns1__ErrorResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__ErrorResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__ErrorResponse * SOAP_FMAC2 soap_instantiate_ns1__ErrorResponse(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__ErrorResponse * soap_new_ns1__ErrorResponse(struct soap *soap, int n = -1) { return soap_instantiate_ns1__ErrorResponse(soap, n, NULL, NULL, NULL); } + +inline ns1__ErrorResponse * soap_new_req_ns1__ErrorResponse(struct soap *soap) { ns1__ErrorResponse *_p = soap_instantiate_ns1__ErrorResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline ns1__ErrorResponse * soap_new_set_ns1__ErrorResponse(struct soap *soap, std::wstring *error, std::wstring *clientID1, struct _xop__Include *context1, int *dumpGroupID1, int *dumpID1, struct _xop__Include *garbage1, int *problemID1, std::wstring *urlToProblem1, char *__item2) { ns1__ErrorResponse *_p = soap_instantiate_ns1__ErrorResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__ErrorResponse::error = error; _p->ns1__Response::clientID = clientID1; _p->ns1__Response::context = context1; _p->ns1__Response::dumpGroupID = dumpGroupID1; _p->ns1__Response::dumpID = dumpID1; _p->ns1__Response::garbage = garbage1; _p->ns1__Response::problemID = problemID1; _p->ns1__Response::urlToProblem = urlToProblem1; _p->xsd__anyType::__item = __item2; } return _p; } + +inline void soap_delete_ns1__ErrorResponse(struct soap *soap, ns1__ErrorResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ErrorResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__StopResponse +#define SOAP_TYPE_ns1__StopResponse (60) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__StopResponse(struct soap*, const char*, int, const ns1__StopResponse *, const char*); +SOAP_FMAC3 ns1__StopResponse * SOAP_FMAC4 soap_in_ns1__StopResponse(struct soap*, const char*, ns1__StopResponse *, const char*); + +#ifndef soap_write_ns1__StopResponse +#define soap_write_ns1__StopResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:StopResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__StopResponse * SOAP_FMAC4 soap_get_ns1__StopResponse(struct soap*, ns1__StopResponse *, const char*, const char*); + +#ifndef soap_read_ns1__StopResponse +#define soap_read_ns1__StopResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__StopResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__StopResponse * SOAP_FMAC2 soap_instantiate_ns1__StopResponse(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__StopResponse * soap_new_ns1__StopResponse(struct soap *soap, int n = -1) { return soap_instantiate_ns1__StopResponse(soap, n, NULL, NULL, NULL); } + +inline ns1__StopResponse * soap_new_req_ns1__StopResponse(struct soap *soap) { ns1__StopResponse *_p = soap_instantiate_ns1__StopResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline ns1__StopResponse * soap_new_set_ns1__StopResponse(struct soap *soap, std::wstring *clientID1, struct _xop__Include *context1, int *dumpGroupID1, int *dumpID1, struct _xop__Include *garbage1, int *problemID1, std::wstring *urlToProblem1, char *__item2) { ns1__StopResponse *_p = soap_instantiate_ns1__StopResponse(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__Response::clientID = clientID1; _p->ns1__Response::context = context1; _p->ns1__Response::dumpGroupID = dumpGroupID1; _p->ns1__Response::dumpID = dumpID1; _p->ns1__Response::garbage = garbage1; _p->ns1__Response::problemID = problemID1; _p->ns1__Response::urlToProblem = urlToProblem1; _p->xsd__anyType::__item = __item2; } return _p; } + +inline void soap_delete_ns1__StopResponse(struct soap *soap, ns1__StopResponse *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__StopResponse(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__Response +#define SOAP_TYPE_ns1__Response (59) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Response(struct soap*, const char*, int, const ns1__Response *, const char*); +SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_in_ns1__Response(struct soap*, const char*, ns1__Response *, const char*); + +#ifndef soap_write_ns1__Response +#define soap_write_ns1__Response(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:Response", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_get_ns1__Response(struct soap*, ns1__Response *, const char*, const char*); #ifndef soap_read_ns1__Response -#define soap_read_ns1__Response(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__Response(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_ns1__Response(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__Response(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__Response * SOAP_FMAC2 soap_instantiate_ns1__Response(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__Response * soap_new_ns1__Response(struct soap *soap, int n = -1) { return soap_instantiate_ns1__Response(soap, n, NULL, NULL, NULL); } + +inline ns1__Response * soap_new_req_ns1__Response(struct soap *soap) { ns1__Response *_p = soap_instantiate_ns1__Response(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline ns1__Response * soap_new_set_ns1__Response(struct soap *soap, std::wstring *clientID, struct _xop__Include *context, int *dumpGroupID, int *dumpID, struct _xop__Include *garbage, int *problemID, std::wstring *urlToProblem, char *__item1) { ns1__Response *_p = soap_instantiate_ns1__Response(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__Response::clientID = clientID; _p->ns1__Response::context = context; _p->ns1__Response::dumpGroupID = dumpGroupID; _p->ns1__Response::dumpID = dumpID; _p->ns1__Response::garbage = garbage; _p->ns1__Response::problemID = problemID; _p->ns1__Response::urlToProblem = urlToProblem; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__Response(struct soap *soap, ns1__Response *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Response(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__Pdb70File +#define SOAP_TYPE_ns1__Pdb70File (58) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Pdb70File(struct soap*, const char*, int, const ns1__Pdb70File *, const char*); +SOAP_FMAC3 ns1__Pdb70File * SOAP_FMAC4 soap_in_ns1__Pdb70File(struct soap*, const char*, ns1__Pdb70File *, const char*); + +#ifndef soap_write_ns1__Pdb70File +#define soap_write_ns1__Pdb70File(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:Pdb70File", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__Pdb70File * SOAP_FMAC4 soap_get_ns1__Pdb70File(struct soap*, ns1__Pdb70File *, const char*, const char*); + +#ifndef soap_read_ns1__Pdb70File +#define soap_read_ns1__Pdb70File(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__Pdb70File(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__Pdb70File * SOAP_FMAC2 soap_instantiate_ns1__Pdb70File(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__Pdb70File * soap_new_ns1__Pdb70File(struct soap *soap, int n = -1) { return soap_instantiate_ns1__Pdb70File(soap, n, NULL, NULL, NULL); } + +inline ns1__Pdb70File * soap_new_req_ns1__Pdb70File(struct soap *soap, unsigned int age, std::wstring& signature) { ns1__Pdb70File *_p = soap_instantiate_ns1__Pdb70File(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__Pdb70File::age = age; _p->ns1__Pdb70File::signature = signature; } return _p; } + +inline ns1__Pdb70File * soap_new_set_ns1__Pdb70File(struct soap *soap, unsigned int age, std::wstring *path, std::wstring& signature, char *__item1) { ns1__Pdb70File *_p = soap_instantiate_ns1__Pdb70File(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__Pdb70File::age = age; _p->ns1__Pdb70File::path = path; _p->ns1__Pdb70File::signature = signature; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__Pdb70File(struct soap *soap, ns1__Pdb70File *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Pdb70File(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__ModuleSymbolInfo +#define SOAP_TYPE_ns1__ModuleSymbolInfo (57) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ModuleSymbolInfo(struct soap*, const char*, int, const ns1__ModuleSymbolInfo *, const char*); +SOAP_FMAC3 ns1__ModuleSymbolInfo * SOAP_FMAC4 soap_in_ns1__ModuleSymbolInfo(struct soap*, const char*, ns1__ModuleSymbolInfo *, const char*); + +#ifndef soap_write_ns1__ModuleSymbolInfo +#define soap_write_ns1__ModuleSymbolInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:ModuleSymbolInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__ModuleSymbolInfo * SOAP_FMAC4 soap_get_ns1__ModuleSymbolInfo(struct soap*, ns1__ModuleSymbolInfo *, const char*, const char*); + +#ifndef soap_read_ns1__ModuleSymbolInfo +#define soap_read_ns1__ModuleSymbolInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__ModuleSymbolInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__ModuleSymbolInfo * SOAP_FMAC2 soap_instantiate_ns1__ModuleSymbolInfo(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__ModuleSymbolInfo * soap_new_ns1__ModuleSymbolInfo(struct soap *soap, int n = -1) { return soap_instantiate_ns1__ModuleSymbolInfo(soap, n, NULL, NULL, NULL); } + +inline ns1__ModuleSymbolInfo * soap_new_req_ns1__ModuleSymbolInfo(struct soap *soap, bool isMicrosoftModule, unsigned int sizeOfImage, unsigned int timeDateStamp) { ns1__ModuleSymbolInfo *_p = soap_instantiate_ns1__ModuleSymbolInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__ModuleSymbolInfo::isMicrosoftModule = isMicrosoftModule; _p->ns1__ModuleSymbolInfo::sizeOfImage = sizeOfImage; _p->ns1__ModuleSymbolInfo::timeDateStamp = timeDateStamp; } return _p; } + +inline ns1__ModuleSymbolInfo * soap_new_set_ns1__ModuleSymbolInfo(struct soap *soap, bool isMicrosoftModule, std::wstring *path, ns1__Pdb70File *pdb, unsigned int sizeOfImage, unsigned int timeDateStamp, char *__item1) { ns1__ModuleSymbolInfo *_p = soap_instantiate_ns1__ModuleSymbolInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__ModuleSymbolInfo::isMicrosoftModule = isMicrosoftModule; _p->ns1__ModuleSymbolInfo::path = path; _p->ns1__ModuleSymbolInfo::pdb = pdb; _p->ns1__ModuleSymbolInfo::sizeOfImage = sizeOfImage; _p->ns1__ModuleSymbolInfo::timeDateStamp = timeDateStamp; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__ModuleSymbolInfo(struct soap *soap, ns1__ModuleSymbolInfo *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ModuleSymbolInfo(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo +#define SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo (56) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ArrayOfModuleSymbolInfo(struct soap*, const char*, int, const ns1__ArrayOfModuleSymbolInfo *, const char*); +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo * SOAP_FMAC4 soap_in_ns1__ArrayOfModuleSymbolInfo(struct soap*, const char*, ns1__ArrayOfModuleSymbolInfo *, const char*); + +#ifndef soap_write_ns1__ArrayOfModuleSymbolInfo +#define soap_write_ns1__ArrayOfModuleSymbolInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:ArrayOfModuleSymbolInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo * SOAP_FMAC4 soap_get_ns1__ArrayOfModuleSymbolInfo(struct soap*, ns1__ArrayOfModuleSymbolInfo *, const char*, const char*); + +#ifndef soap_read_ns1__ArrayOfModuleSymbolInfo +#define soap_read_ns1__ArrayOfModuleSymbolInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__ArrayOfModuleSymbolInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__ArrayOfModuleSymbolInfo * SOAP_FMAC2 soap_instantiate_ns1__ArrayOfModuleSymbolInfo(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__ArrayOfModuleSymbolInfo * soap_new_ns1__ArrayOfModuleSymbolInfo(struct soap *soap, int n = -1) { return soap_instantiate_ns1__ArrayOfModuleSymbolInfo(soap, n, NULL, NULL, NULL); } + +inline ns1__ArrayOfModuleSymbolInfo * soap_new_req_ns1__ArrayOfModuleSymbolInfo(struct soap *soap) { ns1__ArrayOfModuleSymbolInfo *_p = soap_instantiate_ns1__ArrayOfModuleSymbolInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline ns1__ArrayOfModuleSymbolInfo * soap_new_set_ns1__ArrayOfModuleSymbolInfo(struct soap *soap, std::vector& ModuleSymbolInfo, char *__item1) { ns1__ArrayOfModuleSymbolInfo *_p = soap_instantiate_ns1__ArrayOfModuleSymbolInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__ArrayOfModuleSymbolInfo::ModuleSymbolInfo = ModuleSymbolInfo; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__ArrayOfModuleSymbolInfo(struct soap *soap, ns1__ArrayOfModuleSymbolInfo *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ArrayOfModuleSymbolInfo(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__DumpAdditionalInfo +#define SOAP_TYPE_ns1__DumpAdditionalInfo (55) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__DumpAdditionalInfo(struct soap*, const char*, int, const ns1__DumpAdditionalInfo *, const char*); +SOAP_FMAC3 ns1__DumpAdditionalInfo * SOAP_FMAC4 soap_in_ns1__DumpAdditionalInfo(struct soap*, const char*, ns1__DumpAdditionalInfo *, const char*); + +#ifndef soap_write_ns1__DumpAdditionalInfo +#define soap_write_ns1__DumpAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:DumpAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__DumpAdditionalInfo * SOAP_FMAC4 soap_get_ns1__DumpAdditionalInfo(struct soap*, ns1__DumpAdditionalInfo *, const char*, const char*); + +#ifndef soap_read_ns1__DumpAdditionalInfo +#define soap_read_ns1__DumpAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__DumpAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__DumpAdditionalInfo * SOAP_FMAC2 soap_instantiate_ns1__DumpAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__DumpAdditionalInfo * soap_new_ns1__DumpAdditionalInfo(struct soap *soap, int n = -1) { return soap_instantiate_ns1__DumpAdditionalInfo(soap, n, NULL, NULL, NULL); } + +inline ns1__DumpAdditionalInfo * soap_new_req_ns1__DumpAdditionalInfo(struct soap *soap, int PCID, time_t crashDate, int submitterID) { ns1__DumpAdditionalInfo *_p = soap_instantiate_ns1__DumpAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__DumpAdditionalInfo::PCID = PCID; _p->ns1__DumpAdditionalInfo::crashDate = crashDate; _p->ns1__DumpAdditionalInfo::submitterID = submitterID; } return _p; } + +inline ns1__DumpAdditionalInfo * soap_new_set_ns1__DumpAdditionalInfo(struct soap *soap, int PCID, time_t crashDate, std::wstring *description, std::wstring *group, int submitterID, char *__item1) { ns1__DumpAdditionalInfo *_p = soap_instantiate_ns1__DumpAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__DumpAdditionalInfo::PCID = PCID; _p->ns1__DumpAdditionalInfo::crashDate = crashDate; _p->ns1__DumpAdditionalInfo::description = description; _p->ns1__DumpAdditionalInfo::group = group; _p->ns1__DumpAdditionalInfo::submitterID = submitterID; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__DumpAdditionalInfo(struct soap *soap, ns1__DumpAdditionalInfo *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__DumpAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__AppAdditionalInfo +#define SOAP_TYPE_ns1__AppAdditionalInfo (54) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__AppAdditionalInfo(struct soap*, const char*, int, const ns1__AppAdditionalInfo *, const char*); +SOAP_FMAC3 ns1__AppAdditionalInfo * SOAP_FMAC4 soap_in_ns1__AppAdditionalInfo(struct soap*, const char*, ns1__AppAdditionalInfo *, const char*); + +#ifndef soap_write_ns1__AppAdditionalInfo +#define soap_write_ns1__AppAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:AppAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__AppAdditionalInfo * SOAP_FMAC4 soap_get_ns1__AppAdditionalInfo(struct soap*, ns1__AppAdditionalInfo *, const char*, const char*); + +#ifndef soap_read_ns1__AppAdditionalInfo +#define soap_read_ns1__AppAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__AppAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__AppAdditionalInfo * SOAP_FMAC2 soap_instantiate_ns1__AppAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__AppAdditionalInfo * soap_new_ns1__AppAdditionalInfo(struct soap *soap, int n = -1) { return soap_instantiate_ns1__AppAdditionalInfo(soap, n, NULL, NULL, NULL); } + +inline ns1__AppAdditionalInfo * soap_new_req_ns1__AppAdditionalInfo(struct soap *soap) { ns1__AppAdditionalInfo *_p = soap_instantiate_ns1__AppAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline ns1__AppAdditionalInfo * soap_new_set_ns1__AppAdditionalInfo(struct soap *soap, std::wstring *appName, std::wstring *companyName, char *__item1) { ns1__AppAdditionalInfo *_p = soap_instantiate_ns1__AppAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__AppAdditionalInfo::appName = appName; _p->ns1__AppAdditionalInfo::companyName = companyName; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__AppAdditionalInfo(struct soap *soap, ns1__AppAdditionalInfo *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__AppAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__Application +#define SOAP_TYPE_ns1__Application (53) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Application(struct soap*, const char*, int, const ns1__Application *, const char*); +SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_in_ns1__Application(struct soap*, const char*, ns1__Application *, const char*); + +#ifndef soap_write_ns1__Application +#define soap_write_ns1__Application(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:Application", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_get_ns1__Application(struct soap*, ns1__Application *, const char*, const char*); + +#ifndef soap_read_ns1__Application +#define soap_read_ns1__Application(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__Application(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__Application * SOAP_FMAC2 soap_instantiate_ns1__Application(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__Application * soap_new_ns1__Application(struct soap *soap, int n = -1) { return soap_instantiate_ns1__Application(soap, n, NULL, NULL, NULL); } + +inline ns1__Application * soap_new_req_ns1__Application(struct soap *soap, std::wstring& applicationGUID, unsigned short hotfix, unsigned short v1, unsigned short v2, unsigned short v3, unsigned short v4) { ns1__Application *_p = soap_instantiate_ns1__Application(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__Application::applicationGUID = applicationGUID; _p->ns1__Application::hotfix = hotfix; _p->ns1__Application::v1 = v1; _p->ns1__Application::v2 = v2; _p->ns1__Application::v3 = v3; _p->ns1__Application::v4 = v4; } return _p; } + +inline ns1__Application * soap_new_set_ns1__Application(struct soap *soap, std::wstring& applicationGUID, unsigned short hotfix, std::wstring *mainModule, unsigned short v1, unsigned short v2, unsigned short v3, unsigned short v4, char *__item1) { ns1__Application *_p = soap_instantiate_ns1__Application(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__Application::applicationGUID = applicationGUID; _p->ns1__Application::hotfix = hotfix; _p->ns1__Application::mainModule = mainModule; _p->ns1__Application::v1 = v1; _p->ns1__Application::v2 = v2; _p->ns1__Application::v3 = v3; _p->ns1__Application::v4 = v4; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__Application(struct soap *soap, ns1__Application *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Application(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_ns1__ClientLib +#define SOAP_TYPE_ns1__ClientLib (52) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ClientLib(struct soap*, const char*, int, const ns1__ClientLib *, const char*); +SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_in_ns1__ClientLib(struct soap*, const char*, ns1__ClientLib *, const char*); + +#ifndef soap_write_ns1__ClientLib +#define soap_write_ns1__ClientLib(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "ns1:ClientLib", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_get_ns1__ClientLib(struct soap*, ns1__ClientLib *, const char*, const char*); + +#ifndef soap_read_ns1__ClientLib +#define soap_read_ns1__ClientLib(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__ClientLib(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 ns1__ClientLib * SOAP_FMAC2 soap_instantiate_ns1__ClientLib(struct soap*, int, const char*, const char*, size_t*); + +inline ns1__ClientLib * soap_new_ns1__ClientLib(struct soap *soap, int n = -1) { return soap_instantiate_ns1__ClientLib(soap, n, NULL, NULL, NULL); } + +inline ns1__ClientLib * soap_new_req_ns1__ClientLib(struct soap *soap, enum ns4__ClientLib_Architecture arch, enum ns4__ClientLib_ClientType type, unsigned short v1, unsigned short v2, unsigned short v3, unsigned short v4) { ns1__ClientLib *_p = soap_instantiate_ns1__ClientLib(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__ClientLib::arch = arch; _p->ns1__ClientLib::type = type; _p->ns1__ClientLib::v1 = v1; _p->ns1__ClientLib::v2 = v2; _p->ns1__ClientLib::v3 = v3; _p->ns1__ClientLib::v4 = v4; } return _p; } + +inline ns1__ClientLib * soap_new_set_ns1__ClientLib(struct soap *soap, enum ns4__ClientLib_Architecture arch, enum ns4__ClientLib_ClientType type, unsigned short v1, unsigned short v2, unsigned short v3, unsigned short v4, char *__item1) { ns1__ClientLib *_p = soap_instantiate_ns1__ClientLib(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->ns1__ClientLib::arch = arch; _p->ns1__ClientLib::type = type; _p->ns1__ClientLib::v1 = v1; _p->ns1__ClientLib::v2 = v2; _p->ns1__ClientLib::v3 = v3; _p->ns1__ClientLib::v4 = v4; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_ns1__ClientLib(struct soap *soap, ns1__ClientLib *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ClientLib(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__unsignedShort +#define SOAP_TYPE_xsd__unsignedShort (50) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedShort(struct soap*, const char*, int, const xsd__unsignedShort *, const char*); +SOAP_FMAC3 xsd__unsignedShort * SOAP_FMAC4 soap_in_xsd__unsignedShort(struct soap*, const char*, xsd__unsignedShort *, const char*); + +#ifndef soap_write_xsd__unsignedShort +#define soap_write_xsd__unsignedShort(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:unsignedShort", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__unsignedShort * SOAP_FMAC4 soap_get_xsd__unsignedShort(struct soap*, xsd__unsignedShort *, const char*, const char*); + +#ifndef soap_read_xsd__unsignedShort +#define soap_read_xsd__unsignedShort(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__unsignedShort(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__unsignedShort * SOAP_FMAC2 soap_instantiate_xsd__unsignedShort(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__unsignedShort * soap_new_xsd__unsignedShort(struct soap *soap, int n = -1) { return soap_instantiate_xsd__unsignedShort(soap, n, NULL, NULL, NULL); } + +inline xsd__unsignedShort * soap_new_req_xsd__unsignedShort(struct soap *soap, unsigned short __item) { xsd__unsignedShort *_p = soap_instantiate_xsd__unsignedShort(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedShort::__item = __item; } return _p; } + +inline xsd__unsignedShort * soap_new_set_xsd__unsignedShort(struct soap *soap, unsigned short __item, char *__item1) { xsd__unsignedShort *_p = soap_instantiate_xsd__unsignedShort(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedShort::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__unsignedShort(struct soap *soap, xsd__unsignedShort *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedShort(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__unsignedLong +#define SOAP_TYPE_xsd__unsignedLong (48) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedLong(struct soap*, const char*, int, const xsd__unsignedLong *, const char*); +SOAP_FMAC3 xsd__unsignedLong * SOAP_FMAC4 soap_in_xsd__unsignedLong(struct soap*, const char*, xsd__unsignedLong *, const char*); + +#ifndef soap_write_xsd__unsignedLong +#define soap_write_xsd__unsignedLong(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:unsignedLong", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__unsignedLong * SOAP_FMAC4 soap_get_xsd__unsignedLong(struct soap*, xsd__unsignedLong *, const char*, const char*); + +#ifndef soap_read_xsd__unsignedLong +#define soap_read_xsd__unsignedLong(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__unsignedLong(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__unsignedLong * SOAP_FMAC2 soap_instantiate_xsd__unsignedLong(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__unsignedLong * soap_new_xsd__unsignedLong(struct soap *soap, int n = -1) { return soap_instantiate_xsd__unsignedLong(soap, n, NULL, NULL, NULL); } + +inline xsd__unsignedLong * soap_new_req_xsd__unsignedLong(struct soap *soap, ULONG64 __item) { xsd__unsignedLong *_p = soap_instantiate_xsd__unsignedLong(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedLong::__item = __item; } return _p; } + +inline xsd__unsignedLong * soap_new_set_xsd__unsignedLong(struct soap *soap, ULONG64 __item, char *__item1) { xsd__unsignedLong *_p = soap_instantiate_xsd__unsignedLong(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedLong::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__unsignedLong(struct soap *soap, xsd__unsignedLong *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedLong(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__unsignedInt +#define SOAP_TYPE_xsd__unsignedInt (47) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedInt(struct soap*, const char*, int, const xsd__unsignedInt *, const char*); +SOAP_FMAC3 xsd__unsignedInt * SOAP_FMAC4 soap_in_xsd__unsignedInt(struct soap*, const char*, xsd__unsignedInt *, const char*); + +#ifndef soap_write_xsd__unsignedInt +#define soap_write_xsd__unsignedInt(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:unsignedInt", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__unsignedInt * SOAP_FMAC4 soap_get_xsd__unsignedInt(struct soap*, xsd__unsignedInt *, const char*, const char*); + +#ifndef soap_read_xsd__unsignedInt +#define soap_read_xsd__unsignedInt(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__unsignedInt(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__unsignedInt * SOAP_FMAC2 soap_instantiate_xsd__unsignedInt(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__unsignedInt * soap_new_xsd__unsignedInt(struct soap *soap, int n = -1) { return soap_instantiate_xsd__unsignedInt(soap, n, NULL, NULL, NULL); } + +inline xsd__unsignedInt * soap_new_req_xsd__unsignedInt(struct soap *soap, unsigned int __item) { xsd__unsignedInt *_p = soap_instantiate_xsd__unsignedInt(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedInt::__item = __item; } return _p; } + +inline xsd__unsignedInt * soap_new_set_xsd__unsignedInt(struct soap *soap, unsigned int __item, char *__item1) { xsd__unsignedInt *_p = soap_instantiate_xsd__unsignedInt(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedInt::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__unsignedInt(struct soap *soap, xsd__unsignedInt *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedInt(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__unsignedByte_ +#define SOAP_TYPE_xsd__unsignedByte_ (46) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__unsignedByte_(struct soap*, const char*, int, const xsd__unsignedByte_ *, const char*); +SOAP_FMAC3 xsd__unsignedByte_ * SOAP_FMAC4 soap_in_xsd__unsignedByte_(struct soap*, const char*, xsd__unsignedByte_ *, const char*); + +#ifndef soap_write_xsd__unsignedByte_ +#define soap_write_xsd__unsignedByte_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:unsignedByte", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__unsignedByte_ * SOAP_FMAC4 soap_get_xsd__unsignedByte_(struct soap*, xsd__unsignedByte_ *, const char*, const char*); + +#ifndef soap_read_xsd__unsignedByte_ +#define soap_read_xsd__unsignedByte_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__unsignedByte_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__unsignedByte_ * SOAP_FMAC2 soap_instantiate_xsd__unsignedByte_(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__unsignedByte_ * soap_new_xsd__unsignedByte_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__unsignedByte_(soap, n, NULL, NULL, NULL); } + +inline xsd__unsignedByte_ * soap_new_req_xsd__unsignedByte_(struct soap *soap, unsigned char __item) { xsd__unsignedByte_ *_p = soap_instantiate_xsd__unsignedByte_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedByte_::__item = __item; } return _p; } + +inline xsd__unsignedByte_ * soap_new_set_xsd__unsignedByte_(struct soap *soap, unsigned char __item, char *__item1) { xsd__unsignedByte_ *_p = soap_instantiate_xsd__unsignedByte_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__unsignedByte_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__unsignedByte_(struct soap *soap, xsd__unsignedByte_ *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__unsignedByte_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__string +#define SOAP_TYPE_xsd__string (45) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap*, const char*, int, const xsd__string *, const char*); +SOAP_FMAC3 xsd__string * SOAP_FMAC4 soap_in_xsd__string(struct soap*, const char*, xsd__string *, const char*); + +#ifndef soap_write_xsd__string +#define soap_write_xsd__string(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:string", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__string * SOAP_FMAC4 soap_get_xsd__string(struct soap*, xsd__string *, const char*, const char*); + +#ifndef soap_read_xsd__string +#define soap_read_xsd__string(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__string(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__string * SOAP_FMAC2 soap_instantiate_xsd__string(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__string * soap_new_xsd__string(struct soap *soap, int n = -1) { return soap_instantiate_xsd__string(soap, n, NULL, NULL, NULL); } + +inline xsd__string * soap_new_req_xsd__string(struct soap *soap, std::wstring& __item) { xsd__string *_p = soap_instantiate_xsd__string(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__string::__item = __item; } return _p; } + +inline xsd__string * soap_new_set_xsd__string(struct soap *soap, std::wstring& __item, char *__item1) { xsd__string *_p = soap_instantiate_xsd__string(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__string::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__string(struct soap *soap, xsd__string *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__string(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__short +#define SOAP_TYPE_xsd__short (43) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__short(struct soap*, const char*, int, const xsd__short *, const char*); +SOAP_FMAC3 xsd__short * SOAP_FMAC4 soap_in_xsd__short(struct soap*, const char*, xsd__short *, const char*); + +#ifndef soap_write_xsd__short +#define soap_write_xsd__short(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:short", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__short * SOAP_FMAC4 soap_get_xsd__short(struct soap*, xsd__short *, const char*, const char*); + +#ifndef soap_read_xsd__short +#define soap_read_xsd__short(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__short(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__short * SOAP_FMAC2 soap_instantiate_xsd__short(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__short * soap_new_xsd__short(struct soap *soap, int n = -1) { return soap_instantiate_xsd__short(soap, n, NULL, NULL, NULL); } + +inline xsd__short * soap_new_req_xsd__short(struct soap *soap, short __item) { xsd__short *_p = soap_instantiate_xsd__short(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__short::__item = __item; } return _p; } + +inline xsd__short * soap_new_set_xsd__short(struct soap *soap, short __item, char *__item1) { xsd__short *_p = soap_instantiate_xsd__short(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__short::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__short(struct soap *soap, xsd__short *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__short(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__long +#define SOAP_TYPE_xsd__long (41) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap*, const char*, int, const xsd__long *, const char*); +SOAP_FMAC3 xsd__long * SOAP_FMAC4 soap_in_xsd__long(struct soap*, const char*, xsd__long *, const char*); + +#ifndef soap_write_xsd__long +#define soap_write_xsd__long(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:long", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__long * SOAP_FMAC4 soap_get_xsd__long(struct soap*, xsd__long *, const char*, const char*); + +#ifndef soap_read_xsd__long +#define soap_read_xsd__long(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__long(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__long * SOAP_FMAC2 soap_instantiate_xsd__long(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__long * soap_new_xsd__long(struct soap *soap, int n = -1) { return soap_instantiate_xsd__long(soap, n, NULL, NULL, NULL); } + +inline xsd__long * soap_new_req_xsd__long(struct soap *soap, LONG64 __item) { xsd__long *_p = soap_instantiate_xsd__long(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__long::__item = __item; } return _p; } + +inline xsd__long * soap_new_set_xsd__long(struct soap *soap, LONG64 __item, char *__item1) { xsd__long *_p = soap_instantiate_xsd__long(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__long::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__long(struct soap *soap, xsd__long *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__long(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__int +#define SOAP_TYPE_xsd__int (40) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap*, const char*, int, const xsd__int *, const char*); +SOAP_FMAC3 xsd__int * SOAP_FMAC4 soap_in_xsd__int(struct soap*, const char*, xsd__int *, const char*); + +#ifndef soap_write_xsd__int +#define soap_write_xsd__int(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:int", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__int * SOAP_FMAC4 soap_get_xsd__int(struct soap*, xsd__int *, const char*, const char*); + +#ifndef soap_read_xsd__int +#define soap_read_xsd__int(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__int(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__int * SOAP_FMAC2 soap_instantiate_xsd__int(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__int * soap_new_xsd__int(struct soap *soap, int n = -1) { return soap_instantiate_xsd__int(soap, n, NULL, NULL, NULL); } + +inline xsd__int * soap_new_req_xsd__int(struct soap *soap, int __item) { xsd__int *_p = soap_instantiate_xsd__int(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__int::__item = __item; } return _p; } + +inline xsd__int * soap_new_set_xsd__int(struct soap *soap, int __item, char *__item1) { xsd__int *_p = soap_instantiate_xsd__int(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__int::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__int(struct soap *soap, xsd__int *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__int(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__float +#define SOAP_TYPE_xsd__float (38) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap*, const char*, int, const xsd__float *, const char*); +SOAP_FMAC3 xsd__float * SOAP_FMAC4 soap_in_xsd__float(struct soap*, const char*, xsd__float *, const char*); + +#ifndef soap_write_xsd__float +#define soap_write_xsd__float(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:float", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__float * SOAP_FMAC4 soap_get_xsd__float(struct soap*, xsd__float *, const char*, const char*); + +#ifndef soap_read_xsd__float +#define soap_read_xsd__float(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__float(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__float * SOAP_FMAC2 soap_instantiate_xsd__float(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__float * soap_new_xsd__float(struct soap *soap, int n = -1) { return soap_instantiate_xsd__float(soap, n, NULL, NULL, NULL); } + +inline xsd__float * soap_new_req_xsd__float(struct soap *soap, float __item) { xsd__float *_p = soap_instantiate_xsd__float(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__float::__item = __item; } return _p; } + +inline xsd__float * soap_new_set_xsd__float(struct soap *soap, float __item, char *__item1) { xsd__float *_p = soap_instantiate_xsd__float(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__float::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__float(struct soap *soap, xsd__float *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__float(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__duration_ +#define SOAP_TYPE_xsd__duration_ (37) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration_(struct soap*, const char*, int, const xsd__duration_ *, const char*); +SOAP_FMAC3 xsd__duration_ * SOAP_FMAC4 soap_in_xsd__duration_(struct soap*, const char*, xsd__duration_ *, const char*); + +#ifndef soap_write_xsd__duration_ +#define soap_write_xsd__duration_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:duration", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__duration_ * SOAP_FMAC4 soap_get_xsd__duration_(struct soap*, xsd__duration_ *, const char*, const char*); + +#ifndef soap_read_xsd__duration_ +#define soap_read_xsd__duration_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__duration_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__duration_ * SOAP_FMAC2 soap_instantiate_xsd__duration_(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__duration_ * soap_new_xsd__duration_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__duration_(soap, n, NULL, NULL, NULL); } + +inline xsd__duration_ * soap_new_req_xsd__duration_(struct soap *soap, std::wstring& __item) { xsd__duration_ *_p = soap_instantiate_xsd__duration_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__duration_::__item = __item; } return _p; } + +inline xsd__duration_ * soap_new_set_xsd__duration_(struct soap *soap, std::wstring& __item, char *__item1) { xsd__duration_ *_p = soap_instantiate_xsd__duration_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__duration_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__duration_(struct soap *soap, xsd__duration_ *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__duration_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__duration +#define SOAP_TYPE_xsd__duration (36) +#endif + +#define soap_default_xsd__duration(soap, a) soap_default_std__wstring(soap, a) + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__duration(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__duration(struct soap*, const char*, std::wstring*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap*, const std::wstring *, const char*, const char*); + +#ifndef soap_write_xsd__duration +#define soap_write_xsd__duration(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__duration(soap, data),0) || soap_put_xsd__duration(soap, data, "xsd:duration", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__duration(struct soap*, std::wstring *, const char*, const char*); + +#ifndef soap_read_xsd__duration +#define soap_read_xsd__duration(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__duration(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#define soap_instantiate_xsd__duration soap_instantiate_std__wstring + + +#define soap_copy_xsd__duration soap_copy_std__wstring + +#ifndef SOAP_TYPE_xsd__double +#define SOAP_TYPE_xsd__double (34) #endif -SOAP_FMAC3 ns1__Response * SOAP_FMAC4 soap_get_ns1__Response(struct soap*, ns1__Response *, const char*, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__double(struct soap*, const char*, int, const xsd__double *, const char*); +SOAP_FMAC3 xsd__double * SOAP_FMAC4 soap_in_xsd__double(struct soap*, const char*, xsd__double *, const char*); + +#ifndef soap_write_xsd__double +#define soap_write_xsd__double(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:double", NULL) || soap_end_send(soap), (soap)->error ) +#endif -#define soap_new_ns1__Response(soap, n) soap_instantiate_ns1__Response(soap, n, NULL, NULL, NULL) +SOAP_FMAC3 xsd__double * SOAP_FMAC4 soap_get_xsd__double(struct soap*, xsd__double *, const char*, const char*); +#ifndef soap_read_xsd__double +#define soap_read_xsd__double(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__double(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif -#define soap_delete_ns1__Response(soap, p) soap_delete(soap, p) +SOAP_FMAC1 xsd__double * SOAP_FMAC2 soap_instantiate_xsd__double(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC1 ns1__Response * SOAP_FMAC2 soap_instantiate_ns1__Response(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Response(struct soap*, int, int, void*, size_t, const void*, size_t); +inline xsd__double * soap_new_xsd__double(struct soap *soap, int n = -1) { return soap_instantiate_xsd__double(soap, n, NULL, NULL, NULL); } -#ifndef SOAP_TYPE_ns1__Application -#define SOAP_TYPE_ns1__Application (13) +inline xsd__double * soap_new_req_xsd__double(struct soap *soap, double __item) { xsd__double *_p = soap_instantiate_xsd__double(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__double::__item = __item; } return _p; } + +inline xsd__double * soap_new_set_xsd__double(struct soap *soap, double __item, char *__item1) { xsd__double *_p = soap_instantiate_xsd__double(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__double::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__double(struct soap *soap, xsd__double *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__double(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__decimal_ +#define SOAP_TYPE_xsd__decimal_ (33) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__Application(struct soap*, const char*, int, const ns1__Application *, const char*); -SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_in_ns1__Application(struct soap*, const char*, ns1__Application *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__decimal_(struct soap*, const char*, int, const xsd__decimal_ *, const char*); +SOAP_FMAC3 xsd__decimal_ * SOAP_FMAC4 soap_in_xsd__decimal_(struct soap*, const char*, xsd__decimal_ *, const char*); -#ifndef soap_write_ns1__Application -#define soap_write_ns1__Application(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:Application", NULL) || soap_end_send(soap) ) +#ifndef soap_write_xsd__decimal_ +#define soap_write_xsd__decimal_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:decimal", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 xsd__decimal_ * SOAP_FMAC4 soap_get_xsd__decimal_(struct soap*, xsd__decimal_ *, const char*, const char*); -#ifndef soap_read_ns1__Application -#define soap_read_ns1__Application(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__Application(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_xsd__decimal_ +#define soap_read_xsd__decimal_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__decimal_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 ns1__Application * SOAP_FMAC4 soap_get_ns1__Application(struct soap*, ns1__Application *, const char*, const char*); +SOAP_FMAC1 xsd__decimal_ * SOAP_FMAC2 soap_instantiate_xsd__decimal_(struct soap*, int, const char*, const char*, size_t*); -#define soap_new_ns1__Application(soap, n) soap_instantiate_ns1__Application(soap, n, NULL, NULL, NULL) +inline xsd__decimal_ * soap_new_xsd__decimal_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__decimal_(soap, n, NULL, NULL, NULL); } +inline xsd__decimal_ * soap_new_req_xsd__decimal_(struct soap *soap, std::wstring& __item) { xsd__decimal_ *_p = soap_instantiate_xsd__decimal_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__decimal_::__item = __item; } return _p; } -#define soap_delete_ns1__Application(soap, p) soap_delete(soap, p) +inline xsd__decimal_ * soap_new_set_xsd__decimal_(struct soap *soap, std::wstring& __item, char *__item1) { xsd__decimal_ *_p = soap_instantiate_xsd__decimal_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__decimal_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } -SOAP_FMAC1 ns1__Application * SOAP_FMAC2 soap_instantiate_ns1__Application(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__Application(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete_xsd__decimal_(struct soap *soap, xsd__decimal_ *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE_ns1__ClientLib -#define SOAP_TYPE_ns1__ClientLib (12) +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__decimal_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__decimal +#define SOAP_TYPE_xsd__decimal (32) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ClientLib(struct soap*, const char*, int, const ns1__ClientLib *, const char*); -SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_in_ns1__ClientLib(struct soap*, const char*, ns1__ClientLib *, const char*); +#define soap_default_xsd__decimal(soap, a) soap_default_std__wstring(soap, a) -#ifndef soap_write_ns1__ClientLib -#define soap_write_ns1__ClientLib(soap, data) ( soap_begin_send(soap) || ((data)->soap_serialize(soap), 0) || (data)->soap_put(soap, "ns1:ClientLib", NULL) || soap_end_send(soap) ) +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__decimal(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__decimal(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__decimal(struct soap*, const char*, std::wstring*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__decimal(struct soap*, const std::wstring *, const char*, const char*); + +#ifndef soap_write_xsd__decimal +#define soap_write_xsd__decimal(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__decimal(soap, data),0) || soap_put_xsd__decimal(soap, data, "xsd:decimal", NULL) || soap_end_send(soap), (soap)->error ) #endif +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__decimal(struct soap*, std::wstring *, const char*, const char*); -#ifndef soap_read_ns1__ClientLib -#define soap_read_ns1__ClientLib(soap, data) ( soap_begin_recv(soap) || !soap_get_ns1__ClientLib(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_xsd__decimal +#define soap_read_xsd__decimal(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__decimal(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 ns1__ClientLib * SOAP_FMAC4 soap_get_ns1__ClientLib(struct soap*, ns1__ClientLib *, const char*, const char*); -#define soap_new_ns1__ClientLib(soap, n) soap_instantiate_ns1__ClientLib(soap, n, NULL, NULL, NULL) +#define soap_instantiate_xsd__decimal soap_instantiate_std__wstring -#define soap_delete_ns1__ClientLib(soap, p) soap_delete(soap, p) +#define soap_copy_xsd__decimal soap_copy_std__wstring -SOAP_FMAC1 ns1__ClientLib * SOAP_FMAC2 soap_instantiate_ns1__ClientLib(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy_ns1__ClientLib(struct soap*, int, int, void*, size_t, const void*, size_t); +#ifndef SOAP_TYPE_xsd__dateTime +#define SOAP_TYPE_xsd__dateTime (30) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap*, const char*, int, const xsd__dateTime *, const char*); +SOAP_FMAC3 xsd__dateTime * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap*, const char*, xsd__dateTime *, const char*); + +#ifndef soap_write_xsd__dateTime +#define soap_write_xsd__dateTime(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:dateTime", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__dateTime * SOAP_FMAC4 soap_get_xsd__dateTime(struct soap*, xsd__dateTime *, const char*, const char*); + +#ifndef soap_read_xsd__dateTime +#define soap_read_xsd__dateTime(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__dateTime(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__dateTime * SOAP_FMAC2 soap_instantiate_xsd__dateTime(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__dateTime * soap_new_xsd__dateTime(struct soap *soap, int n = -1) { return soap_instantiate_xsd__dateTime(soap, n, NULL, NULL, NULL); } + +inline xsd__dateTime * soap_new_req_xsd__dateTime(struct soap *soap, time_t __item) { xsd__dateTime *_p = soap_instantiate_xsd__dateTime(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__dateTime::__item = __item; } return _p; } + +inline xsd__dateTime * soap_new_set_xsd__dateTime(struct soap *soap, time_t __item, char *__item1) { xsd__dateTime *_p = soap_instantiate_xsd__dateTime(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__dateTime::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__dateTime(struct soap *soap, xsd__dateTime *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__dateTime(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__byte_ +#define SOAP_TYPE_xsd__byte_ (29) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__byte_(struct soap*, const char*, int, const xsd__byte_ *, const char*); +SOAP_FMAC3 xsd__byte_ * SOAP_FMAC4 soap_in_xsd__byte_(struct soap*, const char*, xsd__byte_ *, const char*); + +#ifndef soap_write_xsd__byte_ +#define soap_write_xsd__byte_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:byte", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__byte_ * SOAP_FMAC4 soap_get_xsd__byte_(struct soap*, xsd__byte_ *, const char*, const char*); + +#ifndef soap_read_xsd__byte_ +#define soap_read_xsd__byte_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__byte_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__byte_ * SOAP_FMAC2 soap_instantiate_xsd__byte_(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__byte_ * soap_new_xsd__byte_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__byte_(soap, n, NULL, NULL, NULL); } + +inline xsd__byte_ * soap_new_req_xsd__byte_(struct soap *soap, char __item) { xsd__byte_ *_p = soap_instantiate_xsd__byte_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__byte_::__item = __item; } return _p; } + +inline xsd__byte_ * soap_new_set_xsd__byte_(struct soap *soap, char __item, char *__item1) { xsd__byte_ *_p = soap_instantiate_xsd__byte_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__byte_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__byte_(struct soap *soap, xsd__byte_ *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__byte_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__boolean +#define SOAP_TYPE_xsd__boolean (27) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap*, const char*, int, const xsd__boolean *, const char*); +SOAP_FMAC3 xsd__boolean * SOAP_FMAC4 soap_in_xsd__boolean(struct soap*, const char*, xsd__boolean *, const char*); + +#ifndef soap_write_xsd__boolean +#define soap_write_xsd__boolean(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:boolean", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__boolean * SOAP_FMAC4 soap_get_xsd__boolean(struct soap*, xsd__boolean *, const char*, const char*); + +#ifndef soap_read_xsd__boolean +#define soap_read_xsd__boolean(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__boolean(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__boolean * SOAP_FMAC2 soap_instantiate_xsd__boolean(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__boolean * soap_new_xsd__boolean(struct soap *soap, int n = -1) { return soap_instantiate_xsd__boolean(soap, n, NULL, NULL, NULL); } + +inline xsd__boolean * soap_new_req_xsd__boolean(struct soap *soap, bool __item) { xsd__boolean *_p = soap_instantiate_xsd__boolean(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__boolean::__item = __item; } return _p; } + +inline xsd__boolean * soap_new_set_xsd__boolean(struct soap *soap, bool __item, char *__item1) { xsd__boolean *_p = soap_instantiate_xsd__boolean(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__boolean::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__boolean(struct soap *soap, xsd__boolean *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__boolean(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__base64Binary +#define SOAP_TYPE_xsd__base64Binary (26) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__base64Binary(struct soap*, const char*, int, const xsd__base64Binary *, const char*); +SOAP_FMAC3 xsd__base64Binary * SOAP_FMAC4 soap_in_xsd__base64Binary(struct soap*, const char*, xsd__base64Binary *, const char*); + +#ifndef soap_write_xsd__base64Binary +#define soap_write_xsd__base64Binary(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:base64Binary", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__base64Binary * SOAP_FMAC4 soap_get_xsd__base64Binary(struct soap*, xsd__base64Binary *, const char*, const char*); + +#ifndef soap_read_xsd__base64Binary +#define soap_read_xsd__base64Binary(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__base64Binary(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__base64Binary * SOAP_FMAC2 soap_instantiate_xsd__base64Binary(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__base64Binary * soap_new_xsd__base64Binary(struct soap *soap, int n = -1) { return soap_instantiate_xsd__base64Binary(soap, n, NULL, NULL, NULL); } + +inline xsd__base64Binary * soap_new_req_xsd__base64Binary(struct soap *soap, struct _xop__Include& __item) { xsd__base64Binary *_p = soap_instantiate_xsd__base64Binary(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__base64Binary::__item = __item; } return _p; } + +inline xsd__base64Binary * soap_new_set_xsd__base64Binary(struct soap *soap, struct _xop__Include& __item, char *__item1) { xsd__base64Binary *_p = soap_instantiate_xsd__base64Binary(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__base64Binary::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__base64Binary(struct soap *soap, xsd__base64Binary *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__base64Binary(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__anyURI_ +#define SOAP_TYPE_xsd__anyURI_ (25) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__anyURI_(struct soap*, const char*, int, const xsd__anyURI_ *, const char*); +SOAP_FMAC3 xsd__anyURI_ * SOAP_FMAC4 soap_in_xsd__anyURI_(struct soap*, const char*, xsd__anyURI_ *, const char*); + +#ifndef soap_write_xsd__anyURI_ +#define soap_write_xsd__anyURI_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:anyURI", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__anyURI_ * SOAP_FMAC4 soap_get_xsd__anyURI_(struct soap*, xsd__anyURI_ *, const char*, const char*); + +#ifndef soap_read_xsd__anyURI_ +#define soap_read_xsd__anyURI_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__anyURI_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__anyURI_ * SOAP_FMAC2 soap_instantiate_xsd__anyURI_(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__anyURI_ * soap_new_xsd__anyURI_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__anyURI_(soap, n, NULL, NULL, NULL); } + +inline xsd__anyURI_ * soap_new_req_xsd__anyURI_(struct soap *soap, std::wstring& __item) { xsd__anyURI_ *_p = soap_instantiate_xsd__anyURI_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__anyURI_::__item = __item; } return _p; } + +inline xsd__anyURI_ * soap_new_set_xsd__anyURI_(struct soap *soap, std::wstring& __item, char *__item1) { xsd__anyURI_ *_p = soap_instantiate_xsd__anyURI_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__anyURI_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__anyURI_(struct soap *soap, xsd__anyURI_ *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__anyURI_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__anyURI +#define SOAP_TYPE_xsd__anyURI (24) +#endif + +#define soap_default_xsd__anyURI(soap, a) soap_default_std__wstring(soap, a) + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__anyURI(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__anyURI(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__anyURI(struct soap*, const char*, std::wstring*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__anyURI(struct soap*, const std::wstring *, const char*, const char*); + +#ifndef soap_write_xsd__anyURI +#define soap_write_xsd__anyURI(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__anyURI(soap, data),0) || soap_put_xsd__anyURI(soap, data, "xsd:anyURI", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__anyURI(struct soap*, std::wstring *, const char*, const char*); + +#ifndef soap_read_xsd__anyURI +#define soap_read_xsd__anyURI(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__anyURI(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#define soap_instantiate_xsd__anyURI soap_instantiate_std__wstring + + +#define soap_copy_xsd__anyURI soap_copy_std__wstring + +#ifndef SOAP_TYPE_xsd__QName_ +#define SOAP_TYPE_xsd__QName_ (23) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__QName_(struct soap*, const char*, int, const xsd__QName_ *, const char*); +SOAP_FMAC3 xsd__QName_ * SOAP_FMAC4 soap_in_xsd__QName_(struct soap*, const char*, xsd__QName_ *, const char*); + +#ifndef soap_write_xsd__QName_ +#define soap_write_xsd__QName_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:QName", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__QName_ * SOAP_FMAC4 soap_get_xsd__QName_(struct soap*, xsd__QName_ *, const char*, const char*); + +#ifndef soap_read_xsd__QName_ +#define soap_read_xsd__QName_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__QName_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__QName_ * SOAP_FMAC2 soap_instantiate_xsd__QName_(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__QName_ * soap_new_xsd__QName_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__QName_(soap, n, NULL, NULL, NULL); } + +inline xsd__QName_ * soap_new_req_xsd__QName_(struct soap *soap, std::string& __item) { xsd__QName_ *_p = soap_instantiate_xsd__QName_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__QName_::__item = __item; } return _p; } + +inline xsd__QName_ * soap_new_set_xsd__QName_(struct soap *soap, std::string& __item, char *__item1) { xsd__QName_ *_p = soap_instantiate_xsd__QName_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__QName_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__QName_(struct soap *soap, xsd__QName_ *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__QName_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__IDREF_ +#define SOAP_TYPE_xsd__IDREF_ (22) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__IDREF_(struct soap*, const char*, int, const xsd__IDREF_ *, const char*); +SOAP_FMAC3 xsd__IDREF_ * SOAP_FMAC4 soap_in_xsd__IDREF_(struct soap*, const char*, xsd__IDREF_ *, const char*); + +#ifndef soap_write_xsd__IDREF_ +#define soap_write_xsd__IDREF_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:IDREF", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__IDREF_ * SOAP_FMAC4 soap_get_xsd__IDREF_(struct soap*, xsd__IDREF_ *, const char*, const char*); + +#ifndef soap_read_xsd__IDREF_ +#define soap_read_xsd__IDREF_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__IDREF_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__IDREF_ * SOAP_FMAC2 soap_instantiate_xsd__IDREF_(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__IDREF_ * soap_new_xsd__IDREF_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__IDREF_(soap, n, NULL, NULL, NULL); } + +inline xsd__IDREF_ * soap_new_req_xsd__IDREF_(struct soap *soap, std::wstring& __item) { xsd__IDREF_ *_p = soap_instantiate_xsd__IDREF_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__IDREF_::__item = __item; } return _p; } + +inline xsd__IDREF_ * soap_new_set_xsd__IDREF_(struct soap *soap, std::wstring& __item, char *__item1) { xsd__IDREF_ *_p = soap_instantiate_xsd__IDREF_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__IDREF_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__IDREF_(struct soap *soap, xsd__IDREF_ *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__IDREF_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__IDREF +#define SOAP_TYPE_xsd__IDREF (21) +#endif + +#define soap_default_xsd__IDREF(soap, a) soap_default_std__wstring(soap, a) + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__IDREF(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__IDREF(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__IDREF(struct soap*, const char*, std::wstring*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__IDREF(struct soap*, const std::wstring *, const char*, const char*); + +#ifndef soap_write_xsd__IDREF +#define soap_write_xsd__IDREF(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__IDREF(soap, data),0) || soap_put_xsd__IDREF(soap, data, "xsd:IDREF", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__IDREF(struct soap*, std::wstring *, const char*, const char*); + +#ifndef soap_read_xsd__IDREF +#define soap_read_xsd__IDREF(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__IDREF(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#define soap_instantiate_xsd__IDREF soap_instantiate_std__wstring + + +#define soap_copy_xsd__IDREF soap_copy_std__wstring + +#ifndef SOAP_TYPE_xsd__ID_ +#define SOAP_TYPE_xsd__ID_ (20) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__ID_(struct soap*, const char*, int, const xsd__ID_ *, const char*); +SOAP_FMAC3 xsd__ID_ * SOAP_FMAC4 soap_in_xsd__ID_(struct soap*, const char*, xsd__ID_ *, const char*); + +#ifndef soap_write_xsd__ID_ +#define soap_write_xsd__ID_(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:ID", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__ID_ * SOAP_FMAC4 soap_get_xsd__ID_(struct soap*, xsd__ID_ *, const char*, const char*); + +#ifndef soap_read_xsd__ID_ +#define soap_read_xsd__ID_(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__ID_(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__ID_ * SOAP_FMAC2 soap_instantiate_xsd__ID_(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__ID_ * soap_new_xsd__ID_(struct soap *soap, int n = -1) { return soap_instantiate_xsd__ID_(soap, n, NULL, NULL, NULL); } + +inline xsd__ID_ * soap_new_req_xsd__ID_(struct soap *soap, std::wstring& __item) { xsd__ID_ *_p = soap_instantiate_xsd__ID_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__ID_::__item = __item; } return _p; } + +inline xsd__ID_ * soap_new_set_xsd__ID_(struct soap *soap, std::wstring& __item, char *__item1) { xsd__ID_ *_p = soap_instantiate_xsd__ID_(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__ID_::__item = __item; _p->xsd__anyType::__item = __item1; } return _p; } + +inline void soap_delete_xsd__ID_(struct soap *soap, xsd__ID_ *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__ID_(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__ID +#define SOAP_TYPE_xsd__ID (19) +#endif + +#define soap_default_xsd__ID(soap, a) soap_default_std__wstring(soap, a) + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__ID(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__ID(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_xsd__ID(struct soap*, const char*, std::wstring*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__ID(struct soap*, const std::wstring *, const char*, const char*); + +#ifndef soap_write_xsd__ID +#define soap_write_xsd__ID(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__ID(soap, data),0) || soap_put_xsd__ID(soap, data, "xsd:ID", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_xsd__ID(struct soap*, std::wstring *, const char*, const char*); + +#ifndef soap_read_xsd__ID +#define soap_read_xsd__ID(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__ID(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#define soap_instantiate_xsd__ID soap_instantiate_std__wstring + + +#define soap_copy_xsd__ID soap_copy_std__wstring + +#ifndef SOAP_TYPE_std__wstring +#define SOAP_TYPE_std__wstring (18) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__wstring(struct soap*, std::wstring *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__wstring(struct soap*, const std::wstring *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__wstring(struct soap*, const char*, int, const std::wstring*, const char*); +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_in_std__wstring(struct soap*, const char*, std::wstring*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_std__wstring(struct soap*, const std::wstring *, const char*, const char*); + +#ifndef soap_write_std__wstring +#define soap_write_std__wstring(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_std__wstring(soap, data),0) || soap_put_std__wstring(soap, data, "string", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 std::wstring * SOAP_FMAC4 soap_get_std__wstring(struct soap*, std::wstring *, const char*, const char*); + +#ifndef soap_read_std__wstring +#define soap_read_std__wstring(soap, data) ( soap_begin_recv(soap) || !soap_get_std__wstring(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 std::wstring * SOAP_FMAC2 soap_instantiate_std__wstring(struct soap*, int, const char*, const char*, size_t*); + +inline std::wstring * soap_new_std__wstring(struct soap *soap, int n = -1) { return soap_instantiate_std__wstring(soap, n, NULL, NULL, NULL); } + +inline std::wstring * soap_new_req_std__wstring(struct soap *soap) { std::wstring *_p = soap_instantiate_std__wstring(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_std__wstring(soap, _p); } return _p; } + +inline std::wstring * soap_new_set_std__wstring(struct soap *soap) { std::wstring *_p = soap_instantiate_std__wstring(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_std__wstring(soap, _p); } return _p; } + +inline void soap_delete_std__wstring(struct soap *soap, std::wstring *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__wstring(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__QName +#define SOAP_TYPE_xsd__QName (11) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__QName(struct soap*, std::string *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__QName(struct soap*, const std::string *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__QName(struct soap*, const char*, int, const std::string*, const char*); +SOAP_FMAC3 std::string * SOAP_FMAC4 soap_in_xsd__QName(struct soap*, const char*, std::string*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__QName(struct soap*, const std::string *, const char*, const char*); + +#ifndef soap_write_xsd__QName +#define soap_write_xsd__QName(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_xsd__QName(soap, data),0) || soap_put_xsd__QName(soap, data, "xsd:QName", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 std::string * SOAP_FMAC4 soap_get_xsd__QName(struct soap*, std::string *, const char*, const char*); + +#ifndef soap_read_xsd__QName +#define soap_read_xsd__QName(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__QName(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 std::string * SOAP_FMAC2 soap_instantiate_xsd__QName(struct soap*, int, const char*, const char*, size_t*); + +inline std::string * soap_new_xsd__QName(struct soap *soap, int n = -1) { return soap_instantiate_xsd__QName(soap, n, NULL, NULL, NULL); } + +inline std::string * soap_new_req_xsd__QName(struct soap *soap) { std::string *_p = soap_instantiate_xsd__QName(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_xsd__QName(soap, _p); } return _p; } + +inline std::string * soap_new_set_xsd__QName(struct soap *soap) { std::string *_p = soap_instantiate_xsd__QName(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_xsd__QName(soap, _p); } return _p; } + +inline void soap_delete_xsd__QName(struct soap *soap, std::string *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__QName(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_std__string +#define SOAP_TYPE_std__string (10) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__string(struct soap*, std::string *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__string(struct soap*, const std::string *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__string(struct soap*, const char*, int, const std::string*, const char*); +SOAP_FMAC3 std::string * SOAP_FMAC4 soap_in_std__string(struct soap*, const char*, std::string*, const char*); + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_std__string(struct soap*, const std::string *, const char*, const char*); + +#ifndef soap_write_std__string +#define soap_write_std__string(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_std__string(soap, data),0) || soap_put_std__string(soap, data, "string", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 std::string * SOAP_FMAC4 soap_get_std__string(struct soap*, std::string *, const char*, const char*); + +#ifndef soap_read_std__string +#define soap_read_std__string(soap, data) ( soap_begin_recv(soap) || !soap_get_std__string(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 std::string * SOAP_FMAC2 soap_instantiate_std__string(struct soap*, int, const char*, const char*, size_t*); + +inline std::string * soap_new_std__string(struct soap *soap, int n = -1) { return soap_instantiate_std__string(soap, n, NULL, NULL, NULL); } + +inline std::string * soap_new_req_std__string(struct soap *soap) { std::string *_p = soap_instantiate_std__string(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_std__string(soap, _p); } return _p; } + +inline std::string * soap_new_set_std__string(struct soap *soap) { std::string *_p = soap_instantiate_std__string(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_std__string(soap, _p); } return _p; } + +inline void soap_delete_std__string(struct soap *soap, std::string *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__string(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_xsd__anyType +#define SOAP_TYPE_xsd__anyType (8) +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__anyType(struct soap*, const char*, int, const xsd__anyType *, const char*); +SOAP_FMAC3 xsd__anyType * SOAP_FMAC4 soap_in_xsd__anyType(struct soap*, const char*, xsd__anyType *, const char*); + +#ifndef soap_write_xsd__anyType +#define soap_write_xsd__anyType(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || ((data)->soap_serialize(soap),0) || (data)->soap_put(soap, "xsd:anyType", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 xsd__anyType * SOAP_FMAC4 soap_get_xsd__anyType(struct soap*, xsd__anyType *, const char*, const char*); + +#ifndef soap_read_xsd__anyType +#define soap_read_xsd__anyType(soap, data) ( soap_begin_recv(soap) || !soap_get_xsd__anyType(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + +SOAP_FMAC1 xsd__anyType * SOAP_FMAC2 soap_instantiate_xsd__anyType(struct soap*, int, const char*, const char*, size_t*); + +inline xsd__anyType * soap_new_xsd__anyType(struct soap *soap, int n = -1) { return soap_instantiate_xsd__anyType(soap, n, NULL, NULL, NULL); } + +inline xsd__anyType * soap_new_req_xsd__anyType(struct soap *soap) { xsd__anyType *_p = soap_instantiate_xsd__anyType(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); } return _p; } + +inline xsd__anyType * soap_new_set_xsd__anyType(struct soap *soap, char *__item) { xsd__anyType *_p = soap_instantiate_xsd__anyType(soap, -1, NULL, NULL, NULL); if (_p) { _p->soap_default(soap); _p->xsd__anyType::__item = __item; } return _p; } + +inline void soap_delete_xsd__anyType(struct soap *soap, xsd__anyType *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__anyType(struct soap*, int, int, void*, size_t, const void*, size_t); #ifndef WITH_NOGLOBAL #ifndef SOAP_TYPE_SOAP_ENV__Fault -#define SOAP_TYPE_SOAP_ENV__Fault (71) +#define SOAP_TYPE_SOAP_ENV__Fault (138) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*); + #ifndef soap_write_SOAP_ENV__Fault -#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, "SOAP-ENV:Fault", NULL) || soap_end_send(soap) ) +#define soap_write_SOAP_ENV__Fault(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Fault(soap, data),0) || soap_put_SOAP_ENV__Fault(soap, data, "SOAP-ENV:Fault", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*); #ifndef soap_read_SOAP_ENV__Fault -#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) ) +#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)->error ) #endif -SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*); +SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*); + +inline struct SOAP_ENV__Fault * soap_new_SOAP_ENV__Fault(struct soap *soap, int n = -1) { return soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL); } -#define soap_new_SOAP_ENV__Fault(soap, n) soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL) +inline struct SOAP_ENV__Fault * soap_new_req_SOAP_ENV__Fault(struct soap *soap) { struct SOAP_ENV__Fault *_p = soap_instantiate_SOAP_ENV__Fault(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Fault(soap, _p); } return _p; } +inline struct SOAP_ENV__Fault * soap_new_set_SOAP_ENV__Fault(struct soap *soap, char *faultcode, char *faultstring, char *faultactor, struct SOAP_ENV__Detail *detail, struct SOAP_ENV__Code *SOAP_ENV__Code, struct SOAP_ENV__Reason *SOAP_ENV__Reason, char *SOAP_ENV__Node, char *SOAP_ENV__Role, struct SOAP_ENV__Detail *SOAP_ENV__Detail) { struct SOAP_ENV__Fault *_p = soap_instantiate_SOAP_ENV__Fault(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Fault(soap, _p); _p->faultcode = faultcode; _p->faultstring = faultstring; _p->faultactor = faultactor; _p->detail = detail; _p->SOAP_ENV__Code = SOAP_ENV__Code; _p->SOAP_ENV__Reason = SOAP_ENV__Reason; _p->SOAP_ENV__Node = SOAP_ENV__Node; _p->SOAP_ENV__Role = SOAP_ENV__Role; _p->SOAP_ENV__Detail = SOAP_ENV__Detail; } return _p; } -#define soap_delete_SOAP_ENV__Fault(soap, p) soap_delete(soap, p) +inline void soap_delete_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *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 @@ -686,32 +2354,35 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap*, int, int, voi #ifndef WITH_NOGLOBAL #ifndef SOAP_TYPE_SOAP_ENV__Reason -#define SOAP_TYPE_SOAP_ENV__Reason (70) +#define SOAP_TYPE_SOAP_ENV__Reason (137) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*); + #ifndef soap_write_SOAP_ENV__Reason -#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, "SOAP-ENV:Reason", NULL) || soap_end_send(soap) ) +#define soap_write_SOAP_ENV__Reason(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Reason(soap, data),0) || soap_put_SOAP_ENV__Reason(soap, data, "SOAP-ENV:Reason", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*); #ifndef soap_read_SOAP_ENV__Reason -#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) ) +#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)->error ) #endif -SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*); +SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*); -#define soap_new_SOAP_ENV__Reason(soap, n) soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL) +inline struct SOAP_ENV__Reason * soap_new_SOAP_ENV__Reason(struct soap *soap, int n = -1) { return soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL); } +inline struct SOAP_ENV__Reason * soap_new_req_SOAP_ENV__Reason(struct soap *soap) { struct SOAP_ENV__Reason *_p = soap_instantiate_SOAP_ENV__Reason(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Reason(soap, _p); } return _p; } -#define soap_delete_SOAP_ENV__Reason(soap, p) soap_delete(soap, p) +inline struct SOAP_ENV__Reason * soap_new_set_SOAP_ENV__Reason(struct soap *soap, char *SOAP_ENV__Text) { struct SOAP_ENV__Reason *_p = soap_instantiate_SOAP_ENV__Reason(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Reason(soap, _p); _p->SOAP_ENV__Text = SOAP_ENV__Text; } return _p; } + +inline void soap_delete_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *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 @@ -719,32 +2390,35 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap*, int, int, vo #ifndef WITH_NOGLOBAL #ifndef SOAP_TYPE_SOAP_ENV__Detail -#define SOAP_TYPE_SOAP_ENV__Detail (67) +#define SOAP_TYPE_SOAP_ENV__Detail (134) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*); + #ifndef soap_write_SOAP_ENV__Detail -#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, "SOAP-ENV:Detail", NULL) || soap_end_send(soap) ) +#define soap_write_SOAP_ENV__Detail(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Detail(soap, data),0) || soap_put_SOAP_ENV__Detail(soap, data, "SOAP-ENV:Detail", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*); #ifndef soap_read_SOAP_ENV__Detail -#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) ) +#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)->error ) #endif -SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*); +SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*); -#define soap_new_SOAP_ENV__Detail(soap, n) soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL) +inline struct SOAP_ENV__Detail * soap_new_SOAP_ENV__Detail(struct soap *soap, int n = -1) { return soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL); } +inline struct SOAP_ENV__Detail * soap_new_req_SOAP_ENV__Detail(struct soap *soap, int __type, void *fault) { struct SOAP_ENV__Detail *_p = soap_instantiate_SOAP_ENV__Detail(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Detail(soap, _p); _p->__type = __type; _p->fault = fault; } return _p; } -#define soap_delete_SOAP_ENV__Detail(soap, p) soap_delete(soap, p) +inline struct SOAP_ENV__Detail * soap_new_set_SOAP_ENV__Detail(struct soap *soap, char *__any, int __type, void *fault) { struct SOAP_ENV__Detail *_p = soap_instantiate_SOAP_ENV__Detail(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Detail(soap, _p); _p->__any = __any; _p->__type = __type; _p->fault = fault; } return _p; } + +inline void soap_delete_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *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 @@ -752,32 +2426,35 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap*, int, int, vo #ifndef WITH_NOGLOBAL #ifndef SOAP_TYPE_SOAP_ENV__Code -#define SOAP_TYPE_SOAP_ENV__Code (65) +#define SOAP_TYPE_SOAP_ENV__Code (132) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*); + #ifndef soap_write_SOAP_ENV__Code -#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, "SOAP-ENV:Code", NULL) || soap_end_send(soap) ) +#define soap_write_SOAP_ENV__Code(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Code(soap, data),0) || soap_put_SOAP_ENV__Code(soap, data, "SOAP-ENV:Code", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*); #ifndef soap_read_SOAP_ENV__Code -#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) ) +#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)->error ) #endif -SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*); +SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*); -#define soap_new_SOAP_ENV__Code(soap, n) soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL) +inline struct SOAP_ENV__Code * soap_new_SOAP_ENV__Code(struct soap *soap, int n = -1) { return soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL); } +inline struct SOAP_ENV__Code * soap_new_req_SOAP_ENV__Code(struct soap *soap) { struct SOAP_ENV__Code *_p = soap_instantiate_SOAP_ENV__Code(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Code(soap, _p); } return _p; } -#define soap_delete_SOAP_ENV__Code(soap, p) soap_delete(soap, p) +inline struct SOAP_ENV__Code * soap_new_set_SOAP_ENV__Code(struct soap *soap, char *SOAP_ENV__Value, struct SOAP_ENV__Code *SOAP_ENV__Subcode) { struct SOAP_ENV__Code *_p = soap_instantiate_SOAP_ENV__Code(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Code(soap, _p); _p->SOAP_ENV__Value = SOAP_ENV__Value; _p->SOAP_ENV__Subcode = SOAP_ENV__Subcode; } return _p; } + +inline void soap_delete_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *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 @@ -785,650 +2462,825 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap*, int, int, void #ifndef WITH_NOGLOBAL #ifndef SOAP_TYPE_SOAP_ENV__Header -#define SOAP_TYPE_SOAP_ENV__Header (64) +#define SOAP_TYPE_SOAP_ENV__Header (131) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*); + #ifndef soap_write_SOAP_ENV__Header -#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, "SOAP-ENV:Header", NULL) || soap_end_send(soap) ) +#define soap_write_SOAP_ENV__Header(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Header(soap, data),0) || soap_put_SOAP_ENV__Header(soap, data, "SOAP-ENV:Header", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*); #ifndef soap_read_SOAP_ENV__Header -#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) ) +#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)->error ) #endif -SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*); +SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*); -#define soap_new_SOAP_ENV__Header(soap, n) soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL) +inline struct SOAP_ENV__Header * soap_new_SOAP_ENV__Header(struct soap *soap, int n = -1) { return soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL); } +inline struct SOAP_ENV__Header * soap_new_req_SOAP_ENV__Header(struct soap *soap) { struct SOAP_ENV__Header *_p = soap_instantiate_SOAP_ENV__Header(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Header(soap, _p); } return _p; } -#define soap_delete_SOAP_ENV__Header(soap, p) soap_delete(soap, p) +inline struct SOAP_ENV__Header * soap_new_set_SOAP_ENV__Header(struct soap *soap) { struct SOAP_ENV__Header *_p = soap_instantiate_SOAP_ENV__Header(soap, -1, NULL, NULL, NULL); if (_p) { soap_default_SOAP_ENV__Header(soap, _p); } return _p; } + +inline void soap_delete_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *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___ns4__UploadSymbol -#define SOAP_TYPE___ns4__UploadSymbol (63) +#ifndef SOAP_TYPE___ns1__UploadSymbol +#define SOAP_TYPE___ns1__UploadSymbol (130) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__UploadSymbol(struct soap*, struct __ns4__UploadSymbol *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__UploadSymbol(struct soap*, const struct __ns4__UploadSymbol *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__UploadSymbol(struct soap*, const char*, int, const struct __ns4__UploadSymbol *, const char*); -SOAP_FMAC3 struct __ns4__UploadSymbol * SOAP_FMAC4 soap_in___ns4__UploadSymbol(struct soap*, const char*, struct __ns4__UploadSymbol *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__UploadSymbol(struct soap*, struct __ns1__UploadSymbol *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadSymbol(struct soap*, const struct __ns1__UploadSymbol *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadSymbol(struct soap*, const char*, int, const struct __ns1__UploadSymbol *, const char*); +SOAP_FMAC3 struct __ns1__UploadSymbol * SOAP_FMAC4 soap_in___ns1__UploadSymbol(struct soap*, const char*, struct __ns1__UploadSymbol *, const char*); -#ifndef soap_write___ns4__UploadSymbol -#define soap_write___ns4__UploadSymbol(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns4__UploadSymbol(soap, data), 0) || soap_put___ns4__UploadSymbol(soap, data, "-ns4:UploadSymbol", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadSymbol(struct soap*, const struct __ns1__UploadSymbol *, const char*, const char*); +#ifndef soap_write___ns1__UploadSymbol +#define soap_write___ns1__UploadSymbol(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize___ns1__UploadSymbol(soap, data),0) || soap_put___ns1__UploadSymbol(soap, data, "-ns1:UploadSymbol", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__UploadSymbol(struct soap*, const struct __ns4__UploadSymbol *, const char*, const char*); +SOAP_FMAC3 struct __ns1__UploadSymbol * SOAP_FMAC4 soap_get___ns1__UploadSymbol(struct soap*, struct __ns1__UploadSymbol *, const char*, const char*); -#ifndef soap_read___ns4__UploadSymbol -#define soap_read___ns4__UploadSymbol(soap, data) ( soap_begin_recv(soap) || !soap_get___ns4__UploadSymbol(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read___ns1__UploadSymbol +#define soap_read___ns1__UploadSymbol(soap, data) ( soap_begin_recv(soap) || !soap_get___ns1__UploadSymbol(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 struct __ns4__UploadSymbol * SOAP_FMAC4 soap_get___ns4__UploadSymbol(struct soap*, struct __ns4__UploadSymbol *, const char*, const char*); +SOAP_FMAC1 struct __ns1__UploadSymbol * SOAP_FMAC2 soap_instantiate___ns1__UploadSymbol(struct soap*, int, const char*, const char*, size_t*); -#define soap_new___ns4__UploadSymbol(soap, n) soap_instantiate___ns4__UploadSymbol(soap, n, NULL, NULL, NULL) +inline struct __ns1__UploadSymbol * soap_new___ns1__UploadSymbol(struct soap *soap, int n = -1) { return soap_instantiate___ns1__UploadSymbol(soap, n, NULL, NULL, NULL); } +inline struct __ns1__UploadSymbol * soap_new_req___ns1__UploadSymbol(struct soap *soap) { struct __ns1__UploadSymbol *_p = soap_instantiate___ns1__UploadSymbol(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadSymbol(soap, _p); } return _p; } -#define soap_delete___ns4__UploadSymbol(soap, p) soap_delete(soap, p) +inline struct __ns1__UploadSymbol * soap_new_set___ns1__UploadSymbol(struct soap *soap, _ns1__UploadSymbol *ns1__UploadSymbol) { struct __ns1__UploadSymbol *_p = soap_instantiate___ns1__UploadSymbol(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadSymbol(soap, _p); _p->ns1__UploadSymbol = ns1__UploadSymbol; } return _p; } -SOAP_FMAC1 struct __ns4__UploadSymbol * SOAP_FMAC2 soap_instantiate___ns4__UploadSymbol(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__UploadSymbol(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete___ns1__UploadSymbol(struct soap *soap, struct __ns1__UploadSymbol *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE___ns4__UploadAdditionalInfo -#define SOAP_TYPE___ns4__UploadAdditionalInfo (61) -#endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__UploadAdditionalInfo(struct soap*, struct __ns4__UploadAdditionalInfo *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__UploadAdditionalInfo(struct soap*, const struct __ns4__UploadAdditionalInfo *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__UploadAdditionalInfo(struct soap*, const char*, int, const struct __ns4__UploadAdditionalInfo *, const char*); -SOAP_FMAC3 struct __ns4__UploadAdditionalInfo * SOAP_FMAC4 soap_in___ns4__UploadAdditionalInfo(struct soap*, const char*, struct __ns4__UploadAdditionalInfo *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadSymbol(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef soap_write___ns4__UploadAdditionalInfo -#define soap_write___ns4__UploadAdditionalInfo(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns4__UploadAdditionalInfo(soap, data), 0) || soap_put___ns4__UploadAdditionalInfo(soap, data, "-ns4:UploadAdditionalInfo", NULL) || soap_end_send(soap) ) +#ifndef SOAP_TYPE___ns1__RejectedToSendAdditionalInfo +#define SOAP_TYPE___ns1__RejectedToSendAdditionalInfo (126) #endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__RejectedToSendAdditionalInfo(struct soap*, struct __ns1__RejectedToSendAdditionalInfo *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__RejectedToSendAdditionalInfo(struct soap*, const struct __ns1__RejectedToSendAdditionalInfo *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__RejectedToSendAdditionalInfo(struct soap*, const char*, int, const struct __ns1__RejectedToSendAdditionalInfo *, const char*); +SOAP_FMAC3 struct __ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_in___ns1__RejectedToSendAdditionalInfo(struct soap*, const char*, struct __ns1__RejectedToSendAdditionalInfo *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__RejectedToSendAdditionalInfo(struct soap*, const struct __ns1__RejectedToSendAdditionalInfo *, const char*, const char*); -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__UploadAdditionalInfo(struct soap*, const struct __ns4__UploadAdditionalInfo *, const char*, const char*); - -#ifndef soap_read___ns4__UploadAdditionalInfo -#define soap_read___ns4__UploadAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get___ns4__UploadAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_write___ns1__RejectedToSendAdditionalInfo +#define soap_write___ns1__RejectedToSendAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize___ns1__RejectedToSendAdditionalInfo(soap, data),0) || soap_put___ns1__RejectedToSendAdditionalInfo(soap, data, "-ns1:RejectedToSendAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 struct __ns4__UploadAdditionalInfo * SOAP_FMAC4 soap_get___ns4__UploadAdditionalInfo(struct soap*, struct __ns4__UploadAdditionalInfo *, const char*, const char*); - -#define soap_new___ns4__UploadAdditionalInfo(soap, n) soap_instantiate___ns4__UploadAdditionalInfo(soap, n, NULL, NULL, NULL) - - -#define soap_delete___ns4__UploadAdditionalInfo(soap, p) soap_delete(soap, p) - -SOAP_FMAC1 struct __ns4__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns4__UploadAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__UploadAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); - -#ifndef SOAP_TYPE___ns4__UploadMiniDump -#define SOAP_TYPE___ns4__UploadMiniDump (59) -#endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__UploadMiniDump(struct soap*, struct __ns4__UploadMiniDump *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__UploadMiniDump(struct soap*, const struct __ns4__UploadMiniDump *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__UploadMiniDump(struct soap*, const char*, int, const struct __ns4__UploadMiniDump *, const char*); -SOAP_FMAC3 struct __ns4__UploadMiniDump * SOAP_FMAC4 soap_in___ns4__UploadMiniDump(struct soap*, const char*, struct __ns4__UploadMiniDump *, const char*); +SOAP_FMAC3 struct __ns1__RejectedToSendAdditionalInfo * SOAP_FMAC4 soap_get___ns1__RejectedToSendAdditionalInfo(struct soap*, struct __ns1__RejectedToSendAdditionalInfo *, const char*, const char*); -#ifndef soap_write___ns4__UploadMiniDump -#define soap_write___ns4__UploadMiniDump(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns4__UploadMiniDump(soap, data), 0) || soap_put___ns4__UploadMiniDump(soap, data, "-ns4:UploadMiniDump", NULL) || soap_end_send(soap) ) +#ifndef soap_read___ns1__RejectedToSendAdditionalInfo +#define soap_read___ns1__RejectedToSendAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get___ns1__RejectedToSendAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif +SOAP_FMAC1 struct __ns1__RejectedToSendAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns1__RejectedToSendAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__UploadMiniDump(struct soap*, const struct __ns4__UploadMiniDump *, const char*, const char*); - -#ifndef soap_read___ns4__UploadMiniDump -#define soap_read___ns4__UploadMiniDump(soap, data) ( soap_begin_recv(soap) || !soap_get___ns4__UploadMiniDump(soap, data, NULL, NULL) || soap_end_recv(soap) ) -#endif - -SOAP_FMAC3 struct __ns4__UploadMiniDump * SOAP_FMAC4 soap_get___ns4__UploadMiniDump(struct soap*, struct __ns4__UploadMiniDump *, const char*, const char*); +inline struct __ns1__RejectedToSendAdditionalInfo * soap_new___ns1__RejectedToSendAdditionalInfo(struct soap *soap, int n = -1) { return soap_instantiate___ns1__RejectedToSendAdditionalInfo(soap, n, NULL, NULL, NULL); } -#define soap_new___ns4__UploadMiniDump(soap, n) soap_instantiate___ns4__UploadMiniDump(soap, n, NULL, NULL, NULL) +inline struct __ns1__RejectedToSendAdditionalInfo * soap_new_req___ns1__RejectedToSendAdditionalInfo(struct soap *soap) { struct __ns1__RejectedToSendAdditionalInfo *_p = soap_instantiate___ns1__RejectedToSendAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__RejectedToSendAdditionalInfo(soap, _p); } return _p; } +inline struct __ns1__RejectedToSendAdditionalInfo * soap_new_set___ns1__RejectedToSendAdditionalInfo(struct soap *soap, _ns1__RejectedToSendAdditionalInfo *ns1__RejectedToSendAdditionalInfo) { struct __ns1__RejectedToSendAdditionalInfo *_p = soap_instantiate___ns1__RejectedToSendAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__RejectedToSendAdditionalInfo(soap, _p); _p->ns1__RejectedToSendAdditionalInfo = ns1__RejectedToSendAdditionalInfo; } return _p; } -#define soap_delete___ns4__UploadMiniDump(soap, p) soap_delete(soap, p) +inline void soap_delete___ns1__RejectedToSendAdditionalInfo(struct soap *soap, struct __ns1__RejectedToSendAdditionalInfo *p) { soap_delete(soap, p); } -SOAP_FMAC1 struct __ns4__UploadMiniDump * SOAP_FMAC2 soap_instantiate___ns4__UploadMiniDump(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__UploadMiniDump(struct soap*, int, int, void*, size_t, const void*, size_t); +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__RejectedToSendAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef SOAP_TYPE___ns4__Hello -#define SOAP_TYPE___ns4__Hello (57) +#ifndef SOAP_TYPE___ns1__UploadAdditionalInfo +#define SOAP_TYPE___ns1__UploadAdditionalInfo (122) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns4__Hello(struct soap*, struct __ns4__Hello *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns4__Hello(struct soap*, const struct __ns4__Hello *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns4__Hello(struct soap*, const char*, int, const struct __ns4__Hello *, const char*); -SOAP_FMAC3 struct __ns4__Hello * SOAP_FMAC4 soap_in___ns4__Hello(struct soap*, const char*, struct __ns4__Hello *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__UploadAdditionalInfo(struct soap*, struct __ns1__UploadAdditionalInfo *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadAdditionalInfo(struct soap*, const struct __ns1__UploadAdditionalInfo *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadAdditionalInfo(struct soap*, const char*, int, const struct __ns1__UploadAdditionalInfo *, const char*); +SOAP_FMAC3 struct __ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_in___ns1__UploadAdditionalInfo(struct soap*, const char*, struct __ns1__UploadAdditionalInfo *, const char*); -#ifndef soap_write___ns4__Hello -#define soap_write___ns4__Hello(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns4__Hello(soap, data), 0) || soap_put___ns4__Hello(soap, data, "-ns4:Hello", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadAdditionalInfo(struct soap*, const struct __ns1__UploadAdditionalInfo *, const char*, const char*); +#ifndef soap_write___ns1__UploadAdditionalInfo +#define soap_write___ns1__UploadAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize___ns1__UploadAdditionalInfo(soap, data),0) || soap_put___ns1__UploadAdditionalInfo(soap, data, "-ns1:UploadAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns4__Hello(struct soap*, const struct __ns4__Hello *, const char*, const char*); +SOAP_FMAC3 struct __ns1__UploadAdditionalInfo * SOAP_FMAC4 soap_get___ns1__UploadAdditionalInfo(struct soap*, struct __ns1__UploadAdditionalInfo *, const char*, const char*); -#ifndef soap_read___ns4__Hello -#define soap_read___ns4__Hello(soap, data) ( soap_begin_recv(soap) || !soap_get___ns4__Hello(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read___ns1__UploadAdditionalInfo +#define soap_read___ns1__UploadAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get___ns1__UploadAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 struct __ns4__Hello * SOAP_FMAC4 soap_get___ns4__Hello(struct soap*, struct __ns4__Hello *, const char*, const char*); +SOAP_FMAC1 struct __ns1__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns1__UploadAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); -#define soap_new___ns4__Hello(soap, n) soap_instantiate___ns4__Hello(soap, n, NULL, NULL, NULL) +inline struct __ns1__UploadAdditionalInfo * soap_new___ns1__UploadAdditionalInfo(struct soap *soap, int n = -1) { return soap_instantiate___ns1__UploadAdditionalInfo(soap, n, NULL, NULL, NULL); } +inline struct __ns1__UploadAdditionalInfo * soap_new_req___ns1__UploadAdditionalInfo(struct soap *soap) { struct __ns1__UploadAdditionalInfo *_p = soap_instantiate___ns1__UploadAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadAdditionalInfo(soap, _p); } return _p; } -#define soap_delete___ns4__Hello(soap, p) soap_delete(soap, p) +inline struct __ns1__UploadAdditionalInfo * soap_new_set___ns1__UploadAdditionalInfo(struct soap *soap, _ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo) { struct __ns1__UploadAdditionalInfo *_p = soap_instantiate___ns1__UploadAdditionalInfo(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadAdditionalInfo(soap, _p); _p->ns1__UploadAdditionalInfo = ns1__UploadAdditionalInfo; } return _p; } -SOAP_FMAC1 struct __ns4__Hello * SOAP_FMAC2 soap_instantiate___ns4__Hello(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns4__Hello(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete___ns1__UploadAdditionalInfo(struct soap *soap, struct __ns1__UploadAdditionalInfo *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE___ns3__UploadSymbol -#define SOAP_TYPE___ns3__UploadSymbol (55) -#endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__UploadSymbol(struct soap*, struct __ns3__UploadSymbol *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__UploadSymbol(struct soap*, const struct __ns3__UploadSymbol *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__UploadSymbol(struct soap*, const char*, int, const struct __ns3__UploadSymbol *, const char*); -SOAP_FMAC3 struct __ns3__UploadSymbol * SOAP_FMAC4 soap_in___ns3__UploadSymbol(struct soap*, const char*, struct __ns3__UploadSymbol *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef soap_write___ns3__UploadSymbol -#define soap_write___ns3__UploadSymbol(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns3__UploadSymbol(soap, data), 0) || soap_put___ns3__UploadSymbol(soap, data, "-ns3:UploadSymbol", NULL) || soap_end_send(soap) ) +#ifndef SOAP_TYPE___ns1__UploadFullDump +#define SOAP_TYPE___ns1__UploadFullDump (118) #endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__UploadFullDump(struct soap*, struct __ns1__UploadFullDump *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadFullDump(struct soap*, const struct __ns1__UploadFullDump *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadFullDump(struct soap*, const char*, int, const struct __ns1__UploadFullDump *, const char*); +SOAP_FMAC3 struct __ns1__UploadFullDump * SOAP_FMAC4 soap_in___ns1__UploadFullDump(struct soap*, const char*, struct __ns1__UploadFullDump *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadFullDump(struct soap*, const struct __ns1__UploadFullDump *, const char*, const char*); -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__UploadSymbol(struct soap*, const struct __ns3__UploadSymbol *, const char*, const char*); - -#ifndef soap_read___ns3__UploadSymbol -#define soap_read___ns3__UploadSymbol(soap, data) ( soap_begin_recv(soap) || !soap_get___ns3__UploadSymbol(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_write___ns1__UploadFullDump +#define soap_write___ns1__UploadFullDump(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize___ns1__UploadFullDump(soap, data),0) || soap_put___ns1__UploadFullDump(soap, data, "-ns1:UploadFullDump", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 struct __ns3__UploadSymbol * SOAP_FMAC4 soap_get___ns3__UploadSymbol(struct soap*, struct __ns3__UploadSymbol *, const char*, const char*); +SOAP_FMAC3 struct __ns1__UploadFullDump * SOAP_FMAC4 soap_get___ns1__UploadFullDump(struct soap*, struct __ns1__UploadFullDump *, const char*, const char*); -#define soap_new___ns3__UploadSymbol(soap, n) soap_instantiate___ns3__UploadSymbol(soap, n, NULL, NULL, NULL) - - -#define soap_delete___ns3__UploadSymbol(soap, p) soap_delete(soap, p) - -SOAP_FMAC1 struct __ns3__UploadSymbol * SOAP_FMAC2 soap_instantiate___ns3__UploadSymbol(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__UploadSymbol(struct soap*, int, int, void*, size_t, const void*, size_t); - -#ifndef SOAP_TYPE___ns3__UploadAdditionalInfo -#define SOAP_TYPE___ns3__UploadAdditionalInfo (51) +#ifndef soap_read___ns1__UploadFullDump +#define soap_read___ns1__UploadFullDump(soap, data) ( soap_begin_recv(soap) || !soap_get___ns1__UploadFullDump(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__UploadAdditionalInfo(struct soap*, struct __ns3__UploadAdditionalInfo *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__UploadAdditionalInfo(struct soap*, const struct __ns3__UploadAdditionalInfo *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__UploadAdditionalInfo(struct soap*, const char*, int, const struct __ns3__UploadAdditionalInfo *, const char*); -SOAP_FMAC3 struct __ns3__UploadAdditionalInfo * SOAP_FMAC4 soap_in___ns3__UploadAdditionalInfo(struct soap*, const char*, struct __ns3__UploadAdditionalInfo *, const char*); - -#ifndef soap_write___ns3__UploadAdditionalInfo -#define soap_write___ns3__UploadAdditionalInfo(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns3__UploadAdditionalInfo(soap, data), 0) || soap_put___ns3__UploadAdditionalInfo(soap, data, "-ns3:UploadAdditionalInfo", NULL) || soap_end_send(soap) ) -#endif - - -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__UploadAdditionalInfo(struct soap*, const struct __ns3__UploadAdditionalInfo *, const char*, const char*); -#ifndef soap_read___ns3__UploadAdditionalInfo -#define soap_read___ns3__UploadAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get___ns3__UploadAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap) ) -#endif +SOAP_FMAC1 struct __ns1__UploadFullDump * SOAP_FMAC2 soap_instantiate___ns1__UploadFullDump(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 struct __ns3__UploadAdditionalInfo * SOAP_FMAC4 soap_get___ns3__UploadAdditionalInfo(struct soap*, struct __ns3__UploadAdditionalInfo *, const char*, const char*); +inline struct __ns1__UploadFullDump * soap_new___ns1__UploadFullDump(struct soap *soap, int n = -1) { return soap_instantiate___ns1__UploadFullDump(soap, n, NULL, NULL, NULL); } -#define soap_new___ns3__UploadAdditionalInfo(soap, n) soap_instantiate___ns3__UploadAdditionalInfo(soap, n, NULL, NULL, NULL) +inline struct __ns1__UploadFullDump * soap_new_req___ns1__UploadFullDump(struct soap *soap) { struct __ns1__UploadFullDump *_p = soap_instantiate___ns1__UploadFullDump(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadFullDump(soap, _p); } return _p; } +inline struct __ns1__UploadFullDump * soap_new_set___ns1__UploadFullDump(struct soap *soap, _ns1__UploadFullDump *ns1__UploadFullDump) { struct __ns1__UploadFullDump *_p = soap_instantiate___ns1__UploadFullDump(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadFullDump(soap, _p); _p->ns1__UploadFullDump = ns1__UploadFullDump; } return _p; } -#define soap_delete___ns3__UploadAdditionalInfo(soap, p) soap_delete(soap, p) +inline void soap_delete___ns1__UploadFullDump(struct soap *soap, struct __ns1__UploadFullDump *p) { soap_delete(soap, p); } -SOAP_FMAC1 struct __ns3__UploadAdditionalInfo * SOAP_FMAC2 soap_instantiate___ns3__UploadAdditionalInfo(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__UploadAdditionalInfo(struct soap*, int, int, void*, size_t, const void*, size_t); +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadFullDump(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef SOAP_TYPE___ns3__UploadMiniDump -#define SOAP_TYPE___ns3__UploadMiniDump (47) +#ifndef SOAP_TYPE___ns1__UploadMiniDump +#define SOAP_TYPE___ns1__UploadMiniDump (114) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__UploadMiniDump(struct soap*, struct __ns3__UploadMiniDump *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__UploadMiniDump(struct soap*, const struct __ns3__UploadMiniDump *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__UploadMiniDump(struct soap*, const char*, int, const struct __ns3__UploadMiniDump *, const char*); -SOAP_FMAC3 struct __ns3__UploadMiniDump * SOAP_FMAC4 soap_in___ns3__UploadMiniDump(struct soap*, const char*, struct __ns3__UploadMiniDump *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__UploadMiniDump(struct soap*, struct __ns1__UploadMiniDump *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__UploadMiniDump(struct soap*, const struct __ns1__UploadMiniDump *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__UploadMiniDump(struct soap*, const char*, int, const struct __ns1__UploadMiniDump *, const char*); +SOAP_FMAC3 struct __ns1__UploadMiniDump * SOAP_FMAC4 soap_in___ns1__UploadMiniDump(struct soap*, const char*, struct __ns1__UploadMiniDump *, const char*); -#ifndef soap_write___ns3__UploadMiniDump -#define soap_write___ns3__UploadMiniDump(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns3__UploadMiniDump(soap, data), 0) || soap_put___ns3__UploadMiniDump(soap, data, "-ns3:UploadMiniDump", NULL) || soap_end_send(soap) ) -#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__UploadMiniDump(struct soap*, const struct __ns1__UploadMiniDump *, const char*, const char*); +#ifndef soap_write___ns1__UploadMiniDump +#define soap_write___ns1__UploadMiniDump(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize___ns1__UploadMiniDump(soap, data),0) || soap_put___ns1__UploadMiniDump(soap, data, "-ns1:UploadMiniDump", NULL) || soap_end_send(soap), (soap)->error ) +#endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__UploadMiniDump(struct soap*, const struct __ns3__UploadMiniDump *, const char*, const char*); +SOAP_FMAC3 struct __ns1__UploadMiniDump * SOAP_FMAC4 soap_get___ns1__UploadMiniDump(struct soap*, struct __ns1__UploadMiniDump *, const char*, const char*); -#ifndef soap_read___ns3__UploadMiniDump -#define soap_read___ns3__UploadMiniDump(soap, data) ( soap_begin_recv(soap) || !soap_get___ns3__UploadMiniDump(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read___ns1__UploadMiniDump +#define soap_read___ns1__UploadMiniDump(soap, data) ( soap_begin_recv(soap) || !soap_get___ns1__UploadMiniDump(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 struct __ns3__UploadMiniDump * SOAP_FMAC4 soap_get___ns3__UploadMiniDump(struct soap*, struct __ns3__UploadMiniDump *, const char*, const char*); +SOAP_FMAC1 struct __ns1__UploadMiniDump * SOAP_FMAC2 soap_instantiate___ns1__UploadMiniDump(struct soap*, int, const char*, const char*, size_t*); -#define soap_new___ns3__UploadMiniDump(soap, n) soap_instantiate___ns3__UploadMiniDump(soap, n, NULL, NULL, NULL) +inline struct __ns1__UploadMiniDump * soap_new___ns1__UploadMiniDump(struct soap *soap, int n = -1) { return soap_instantiate___ns1__UploadMiniDump(soap, n, NULL, NULL, NULL); } +inline struct __ns1__UploadMiniDump * soap_new_req___ns1__UploadMiniDump(struct soap *soap) { struct __ns1__UploadMiniDump *_p = soap_instantiate___ns1__UploadMiniDump(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadMiniDump(soap, _p); } return _p; } -#define soap_delete___ns3__UploadMiniDump(soap, p) soap_delete(soap, p) +inline struct __ns1__UploadMiniDump * soap_new_set___ns1__UploadMiniDump(struct soap *soap, _ns1__UploadMiniDump *ns1__UploadMiniDump) { struct __ns1__UploadMiniDump *_p = soap_instantiate___ns1__UploadMiniDump(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__UploadMiniDump(soap, _p); _p->ns1__UploadMiniDump = ns1__UploadMiniDump; } return _p; } -SOAP_FMAC1 struct __ns3__UploadMiniDump * SOAP_FMAC2 soap_instantiate___ns3__UploadMiniDump(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__UploadMiniDump(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete___ns1__UploadMiniDump(struct soap *soap, struct __ns1__UploadMiniDump *p) { soap_delete(soap, p); } -#ifndef SOAP_TYPE___ns3__Hello -#define SOAP_TYPE___ns3__Hello (43) -#endif -SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns3__Hello(struct soap*, struct __ns3__Hello *); -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns3__Hello(struct soap*, const struct __ns3__Hello *); -SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns3__Hello(struct soap*, const char*, int, const struct __ns3__Hello *, const char*); -SOAP_FMAC3 struct __ns3__Hello * SOAP_FMAC4 soap_in___ns3__Hello(struct soap*, const char*, struct __ns3__Hello *, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__UploadMiniDump(struct soap*, int, int, void*, size_t, const void*, size_t); -#ifndef soap_write___ns3__Hello -#define soap_write___ns3__Hello(soap, data) ( soap_begin_send(soap) || (soap_serialize___ns3__Hello(soap, data), 0) || soap_put___ns3__Hello(soap, data, "-ns3:Hello", NULL) || soap_end_send(soap) ) +#ifndef SOAP_TYPE___ns1__Hello +#define SOAP_TYPE___ns1__Hello (110) #endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default___ns1__Hello(struct soap*, struct __ns1__Hello *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___ns1__Hello(struct soap*, const struct __ns1__Hello *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___ns1__Hello(struct soap*, const char*, int, const struct __ns1__Hello *, const char*); +SOAP_FMAC3 struct __ns1__Hello * SOAP_FMAC4 soap_in___ns1__Hello(struct soap*, const char*, struct __ns1__Hello *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns1__Hello(struct soap*, const struct __ns1__Hello *, const char*, const char*); -SOAP_FMAC3 int SOAP_FMAC4 soap_put___ns3__Hello(struct soap*, const struct __ns3__Hello *, const char*, const char*); +#ifndef soap_write___ns1__Hello +#define soap_write___ns1__Hello(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize___ns1__Hello(soap, data),0) || soap_put___ns1__Hello(soap, data, "-ns1:Hello", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 struct __ns1__Hello * SOAP_FMAC4 soap_get___ns1__Hello(struct soap*, struct __ns1__Hello *, const char*, const char*); -#ifndef soap_read___ns3__Hello -#define soap_read___ns3__Hello(soap, data) ( soap_begin_recv(soap) || !soap_get___ns3__Hello(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read___ns1__Hello +#define soap_read___ns1__Hello(soap, data) ( soap_begin_recv(soap) || !soap_get___ns1__Hello(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 struct __ns3__Hello * SOAP_FMAC4 soap_get___ns3__Hello(struct soap*, struct __ns3__Hello *, const char*, const char*); +SOAP_FMAC1 struct __ns1__Hello * SOAP_FMAC2 soap_instantiate___ns1__Hello(struct soap*, int, const char*, const char*, size_t*); -#define soap_new___ns3__Hello(soap, n) soap_instantiate___ns3__Hello(soap, n, NULL, NULL, NULL) +inline struct __ns1__Hello * soap_new___ns1__Hello(struct soap *soap, int n = -1) { return soap_instantiate___ns1__Hello(soap, n, NULL, NULL, NULL); } +inline struct __ns1__Hello * soap_new_req___ns1__Hello(struct soap *soap) { struct __ns1__Hello *_p = soap_instantiate___ns1__Hello(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__Hello(soap, _p); } return _p; } -#define soap_delete___ns3__Hello(soap, p) soap_delete(soap, p) +inline struct __ns1__Hello * soap_new_set___ns1__Hello(struct soap *soap, _ns1__Hello *ns1__Hello) { struct __ns1__Hello *_p = soap_instantiate___ns1__Hello(soap, -1, NULL, NULL, NULL); if (_p) { soap_default___ns1__Hello(soap, _p); _p->ns1__Hello = ns1__Hello; } return _p; } -SOAP_FMAC1 struct __ns3__Hello * SOAP_FMAC2 soap_instantiate___ns3__Hello(struct soap*, int, const char*, const char*, size_t*); -SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns3__Hello(struct soap*, int, int, void*, size_t, const void*, size_t); +inline void soap_delete___ns1__Hello(struct soap *soap, struct __ns1__Hello *p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy___ns1__Hello(struct soap*, int, int, void*, size_t, const void*, size_t); #ifndef SOAP_TYPE__xop__Include -#define SOAP_TYPE__xop__Include (8) +#define SOAP_TYPE__xop__Include (12) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_default__xop__Include(struct soap*, struct _xop__Include *); SOAP_FMAC3 void SOAP_FMAC4 soap_serialize__xop__Include(struct soap*, struct _xop__Include const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out__xop__Include(struct soap*, const char*, int, const struct _xop__Include *, const char*); SOAP_FMAC3 struct _xop__Include * SOAP_FMAC4 soap_in__xop__Include(struct soap*, const char*, struct _xop__Include *, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put__xop__Include(struct soap*, const struct _xop__Include *, const char*, const char*); + #ifndef soap_write__xop__Include -#define soap_write__xop__Include(soap, data) ( soap_begin_send(soap) || (soap_serialize__xop__Include(soap, data), 0) || soap_put__xop__Include(soap, data, "xop:Include", NULL) || soap_end_send(soap) ) +#define soap_write__xop__Include(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize__xop__Include(soap, data),0) || soap_put__xop__Include(soap, data, "xop:Include", NULL) || soap_end_send(soap), (soap)->error ) #endif - -SOAP_FMAC3 int SOAP_FMAC4 soap_put__xop__Include(struct soap*, const struct _xop__Include *, const char*, const char*); +SOAP_FMAC3 struct _xop__Include * SOAP_FMAC4 soap_get__xop__Include(struct soap*, struct _xop__Include *, const char*, const char*); #ifndef soap_read__xop__Include -#define soap_read__xop__Include(soap, data) ( soap_begin_recv(soap) || !soap_get__xop__Include(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read__xop__Include(soap, data) ( soap_begin_recv(soap) || !soap_get__xop__Include(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 struct _xop__Include * SOAP_FMAC4 soap_get__xop__Include(struct soap*, struct _xop__Include *, const char*, const char*); +SOAP_FMAC1 struct _xop__Include * SOAP_FMAC2 soap_instantiate__xop__Include(struct soap*, int, const char*, const char*, size_t*); -#define soap_new__xop__Include(soap, n) soap_instantiate__xop__Include(soap, n, NULL, NULL, NULL) +inline struct _xop__Include * soap_new__xop__Include(struct soap *soap, int n = -1) { return soap_instantiate__xop__Include(soap, n, NULL, NULL, NULL); } +inline struct _xop__Include * soap_new_req__xop__Include(struct soap *soap) { struct _xop__Include *_p = soap_instantiate__xop__Include(soap, -1, NULL, NULL, NULL); if (_p) { soap_default__xop__Include(soap, _p); } return _p; } -#define soap_delete__xop__Include(soap, p) soap_delete(soap, p) +inline struct _xop__Include * soap_new_set__xop__Include(struct soap *soap, unsigned char *__ptr, int __size, char *id, char *type, char *options) { struct _xop__Include *_p = soap_instantiate__xop__Include(soap, -1, NULL, NULL, NULL); if (_p) { soap_default__xop__Include(soap, _p); _p->__ptr = __ptr; _p->__size = __size; _p->id = id; _p->type = type; _p->options = options; } return _p; } + +inline void soap_delete__xop__Include(struct soap *soap, struct _xop__Include *p) { soap_delete(soap, p); } -SOAP_FMAC1 struct _xop__Include * SOAP_FMAC2 soap_instantiate__xop__Include(struct soap*, int, const char*, const char*, size_t*); SOAP_FMAC3 void SOAP_FMAC4 soap_copy__xop__Include(struct soap*, int, int, void*, size_t, const void*, size_t); #ifndef WITH_NOGLOBAL #ifndef SOAP_TYPE_PointerToSOAP_ENV__Reason -#define SOAP_TYPE_PointerToSOAP_ENV__Reason (73) +#define SOAP_TYPE_PointerToSOAP_ENV__Reason (140) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*); #ifndef soap_write_PointerToSOAP_ENV__Reason -#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, "SOAP-ENV:Reason", NULL) || soap_end_send(soap) ) +#define soap_write_PointerToSOAP_ENV__Reason(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerToSOAP_ENV__Reason(soap, data),0) || soap_put_PointerToSOAP_ENV__Reason(soap, data, "SOAP-ENV:Reason", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*); #ifndef soap_read_PointerToSOAP_ENV__Reason -#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) ) +#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)->error ) #endif -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 (72) +#define SOAP_TYPE_PointerToSOAP_ENV__Detail (139) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*); #ifndef soap_write_PointerToSOAP_ENV__Detail -#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, "SOAP-ENV:Detail", NULL) || soap_end_send(soap) ) +#define soap_write_PointerToSOAP_ENV__Detail(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerToSOAP_ENV__Detail(soap, data),0) || soap_put_PointerToSOAP_ENV__Detail(soap, data, "SOAP-ENV:Detail", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*); #ifndef soap_read_PointerToSOAP_ENV__Detail -#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) ) +#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)->error ) #endif -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 (66) +#define SOAP_TYPE_PointerToSOAP_ENV__Code (133) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*); #ifndef soap_write_PointerToSOAP_ENV__Code -#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, "SOAP-ENV:Code", NULL) || soap_end_send(soap) ) +#define soap_write_PointerToSOAP_ENV__Code(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerToSOAP_ENV__Code(soap, data),0) || soap_put_PointerToSOAP_ENV__Code(soap, data, "SOAP-ENV:Code", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*); +SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*); #ifndef soap_read_PointerToSOAP_ENV__Code -#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) ) +#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)->error ) #endif -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_PointerTo_ns1__UploadSymbolResponse -#define SOAP_TYPE_PointerTo_ns1__UploadSymbolResponse (53) +#define SOAP_TYPE_PointerTo_ns1__UploadSymbolResponse (128) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadSymbolResponse(struct soap*, const char *, int, _ns1__UploadSymbolResponse *const*, const char *); SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadSymbolResponse(struct soap*, const char*, _ns1__UploadSymbolResponse **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__UploadSymbolResponse -#define soap_write_PointerTo_ns1__UploadSymbolResponse(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadSymbolResponse(soap, data), 0) || soap_put_PointerTo_ns1__UploadSymbolResponse(soap, data, "ns1:UploadSymbolResponse", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__UploadSymbolResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadSymbolResponse(soap, data),0) || soap_put_PointerTo_ns1__UploadSymbolResponse(soap, data, "ns1:UploadSymbolResponse", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse *const*, const char*, const char*); +SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__UploadSymbolResponse -#define soap_read_PointerTo_ns1__UploadSymbolResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadSymbolResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__UploadSymbolResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadSymbolResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadSymbolResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbolResponse(struct soap*, _ns1__UploadSymbolResponse **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_ns1__UploadSymbol -#define SOAP_TYPE_PointerTo_ns1__UploadSymbol (52) +#define SOAP_TYPE_PointerTo_ns1__UploadSymbol (127) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadSymbol(struct soap*, _ns1__UploadSymbol *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadSymbol(struct soap*, const char *, int, _ns1__UploadSymbol *const*, const char *); SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadSymbol(struct soap*, const char*, _ns1__UploadSymbol **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbol(struct soap*, _ns1__UploadSymbol *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__UploadSymbol -#define soap_write_PointerTo_ns1__UploadSymbol(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadSymbol(soap, data), 0) || soap_put_PointerTo_ns1__UploadSymbol(soap, data, "ns1:UploadSymbol", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__UploadSymbol(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadSymbol(soap, data),0) || soap_put_PointerTo_ns1__UploadSymbol(soap, data, "ns1:UploadSymbol", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadSymbol(struct soap*, _ns1__UploadSymbol *const*, const char*, const char*); +SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbol(struct soap*, _ns1__UploadSymbol **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__UploadSymbol -#define soap_read_PointerTo_ns1__UploadSymbol(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadSymbol(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__UploadSymbol(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadSymbol(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfoResponse +#define SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfoResponse (124) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap*, _ns1__RejectedToSendAdditionalInfoResponse *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap*, const char *, int, _ns1__RejectedToSendAdditionalInfoResponse *const*, const char *); +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap*, const char*, _ns1__RejectedToSendAdditionalInfoResponse **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap*, _ns1__RejectedToSendAdditionalInfoResponse *const*, const char*, const char*); + +#ifndef soap_write_PointerTo_ns1__RejectedToSendAdditionalInfoResponse +#define soap_write_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, data),0) || soap_put_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, data, "ns1:RejectedToSendAdditionalInfoResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfoResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(struct soap*, _ns1__RejectedToSendAdditionalInfoResponse **, const char*, const char*); + +#ifndef soap_read_PointerTo_ns1__RejectedToSendAdditionalInfoResponse +#define soap_read_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__RejectedToSendAdditionalInfoResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfo +#define SOAP_TYPE_PointerTo_ns1__RejectedToSendAdditionalInfo (123) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap*, _ns1__RejectedToSendAdditionalInfo *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap*, const char *, int, _ns1__RejectedToSendAdditionalInfo *const*, const char *); +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap*, const char*, _ns1__RejectedToSendAdditionalInfo **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap*, _ns1__RejectedToSendAdditionalInfo *const*, const char*, const char*); + +#ifndef soap_write_PointerTo_ns1__RejectedToSendAdditionalInfo +#define soap_write_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, data),0) || soap_put_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, data, "ns1:RejectedToSendAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__RejectedToSendAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTo_ns1__RejectedToSendAdditionalInfo(struct soap*, _ns1__RejectedToSendAdditionalInfo **, const char*, const char*); + +#ifndef soap_read_PointerTo_ns1__RejectedToSendAdditionalInfo +#define soap_read_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__RejectedToSendAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadSymbol ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadSymbol(struct soap*, _ns1__UploadSymbol **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse -#define SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse (49) +#define SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfoResponse (120) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap*, const char *, int, _ns1__UploadAdditionalInfoResponse *const*, const char *); SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap*, const char*, _ns1__UploadAdditionalInfoResponse **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__UploadAdditionalInfoResponse -#define soap_write_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data), 0) || soap_put_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data, "ns1:UploadAdditionalInfoResponse", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data),0) || soap_put_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data, "ns1:UploadAdditionalInfoResponse", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse *const*, const char*, const char*); +SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__UploadAdditionalInfoResponse -#define soap_read_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadAdditionalInfoResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadAdditionalInfoResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfoResponse(struct soap*, _ns1__UploadAdditionalInfoResponse **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo -#define SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo (48) +#define SOAP_TYPE_PointerTo_ns1__UploadAdditionalInfo (119) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadAdditionalInfo(struct soap*, _ns1__UploadAdditionalInfo *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadAdditionalInfo(struct soap*, const char *, int, _ns1__UploadAdditionalInfo *const*, const char *); SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadAdditionalInfo(struct soap*, const char*, _ns1__UploadAdditionalInfo **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfo(struct soap*, _ns1__UploadAdditionalInfo *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__UploadAdditionalInfo -#define soap_write_PointerTo_ns1__UploadAdditionalInfo(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadAdditionalInfo(soap, data), 0) || soap_put_PointerTo_ns1__UploadAdditionalInfo(soap, data, "ns1:UploadAdditionalInfo", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__UploadAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadAdditionalInfo(soap, data),0) || soap_put_PointerTo_ns1__UploadAdditionalInfo(soap, data, "ns1:UploadAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadAdditionalInfo(struct soap*, _ns1__UploadAdditionalInfo *const*, const char*, const char*); +SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfo(struct soap*, _ns1__UploadAdditionalInfo **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__UploadAdditionalInfo -#define soap_read_PointerTo_ns1__UploadAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__UploadAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTo_ns1__UploadFullDumpResponse +#define SOAP_TYPE_PointerTo_ns1__UploadFullDumpResponse (116) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadFullDumpResponse(struct soap*, _ns1__UploadFullDumpResponse *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadFullDumpResponse(struct soap*, const char *, int, _ns1__UploadFullDumpResponse *const*, const char *); +SOAP_FMAC3 _ns1__UploadFullDumpResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadFullDumpResponse(struct soap*, const char*, _ns1__UploadFullDumpResponse **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadFullDumpResponse(struct soap*, _ns1__UploadFullDumpResponse *const*, const char*, const char*); + +#ifndef soap_write_PointerTo_ns1__UploadFullDumpResponse +#define soap_write_PointerTo_ns1__UploadFullDumpResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadFullDumpResponse(soap, data),0) || soap_put_PointerTo_ns1__UploadFullDumpResponse(soap, data, "ns1:UploadFullDumpResponse", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadFullDumpResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadFullDumpResponse(struct soap*, _ns1__UploadFullDumpResponse **, const char*, const char*); + +#ifndef soap_read_PointerTo_ns1__UploadFullDumpResponse +#define soap_read_PointerTo_ns1__UploadFullDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadFullDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTo_ns1__UploadFullDump +#define SOAP_TYPE_PointerTo_ns1__UploadFullDump (115) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadFullDump(struct soap*, _ns1__UploadFullDump *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadFullDump(struct soap*, const char *, int, _ns1__UploadFullDump *const*, const char *); +SOAP_FMAC3 _ns1__UploadFullDump ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadFullDump(struct soap*, const char*, _ns1__UploadFullDump **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadFullDump(struct soap*, _ns1__UploadFullDump *const*, const char*, const char*); + +#ifndef soap_write_PointerTo_ns1__UploadFullDump +#define soap_write_PointerTo_ns1__UploadFullDump(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadFullDump(soap, data),0) || soap_put_PointerTo_ns1__UploadFullDump(soap, data, "ns1:UploadFullDump", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 _ns1__UploadFullDump ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadFullDump(struct soap*, _ns1__UploadFullDump **, const char*, const char*); + +#ifndef soap_read_PointerTo_ns1__UploadFullDump +#define soap_read_PointerTo_ns1__UploadFullDump(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadFullDump(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadAdditionalInfo(struct soap*, _ns1__UploadAdditionalInfo **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse -#define SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse (45) +#define SOAP_TYPE_PointerTo_ns1__UploadMiniDumpResponse (112) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadMiniDumpResponse(struct soap*, const char *, int, _ns1__UploadMiniDumpResponse *const*, const char *); SOAP_FMAC3 _ns1__UploadMiniDumpResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadMiniDumpResponse(struct soap*, const char*, _ns1__UploadMiniDumpResponse **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__UploadMiniDumpResponse -#define soap_write_PointerTo_ns1__UploadMiniDumpResponse(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadMiniDumpResponse(soap, data), 0) || soap_put_PointerTo_ns1__UploadMiniDumpResponse(soap, data, "ns1:UploadMiniDumpResponse", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__UploadMiniDumpResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadMiniDumpResponse(soap, data),0) || soap_put_PointerTo_ns1__UploadMiniDumpResponse(soap, data, "ns1:UploadMiniDumpResponse", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse *const*, const char*, const char*); +SOAP_FMAC3 _ns1__UploadMiniDumpResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__UploadMiniDumpResponse -#define soap_read_PointerTo_ns1__UploadMiniDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadMiniDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__UploadMiniDumpResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadMiniDumpResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadMiniDumpResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDumpResponse(struct soap*, _ns1__UploadMiniDumpResponse **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_ns1__UploadMiniDump -#define SOAP_TYPE_PointerTo_ns1__UploadMiniDump (44) +#define SOAP_TYPE_PointerTo_ns1__UploadMiniDump (111) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__UploadMiniDump(struct soap*, _ns1__UploadMiniDump *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__UploadMiniDump(struct soap*, const char *, int, _ns1__UploadMiniDump *const*, const char *); SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_in_PointerTo_ns1__UploadMiniDump(struct soap*, const char*, _ns1__UploadMiniDump **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDump(struct soap*, _ns1__UploadMiniDump *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__UploadMiniDump -#define soap_write_PointerTo_ns1__UploadMiniDump(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadMiniDump(soap, data), 0) || soap_put_PointerTo_ns1__UploadMiniDump(soap, data, "ns1:UploadMiniDump", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__UploadMiniDump(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__UploadMiniDump(soap, data),0) || soap_put_PointerTo_ns1__UploadMiniDump(soap, data, "ns1:UploadMiniDump", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__UploadMiniDump(struct soap*, _ns1__UploadMiniDump *const*, const char*, const char*); +SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDump(struct soap*, _ns1__UploadMiniDump **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__UploadMiniDump -#define soap_read_PointerTo_ns1__UploadMiniDump(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadMiniDump(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__UploadMiniDump(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__UploadMiniDump(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__UploadMiniDump ** SOAP_FMAC4 soap_get_PointerTo_ns1__UploadMiniDump(struct soap*, _ns1__UploadMiniDump **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_ns1__HelloResponse -#define SOAP_TYPE_PointerTo_ns1__HelloResponse (41) +#define SOAP_TYPE_PointerTo_ns1__HelloResponse (108) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__HelloResponse(struct soap*, _ns1__HelloResponse *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__HelloResponse(struct soap*, const char *, int, _ns1__HelloResponse *const*, const char *); SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_in_PointerTo_ns1__HelloResponse(struct soap*, const char*, _ns1__HelloResponse **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__HelloResponse(struct soap*, _ns1__HelloResponse *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__HelloResponse -#define soap_write_PointerTo_ns1__HelloResponse(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__HelloResponse(soap, data), 0) || soap_put_PointerTo_ns1__HelloResponse(soap, data, "ns1:HelloResponse", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__HelloResponse(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__HelloResponse(soap, data),0) || soap_put_PointerTo_ns1__HelloResponse(soap, data, "ns1:HelloResponse", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__HelloResponse(struct soap*, _ns1__HelloResponse *const*, const char*, const char*); +SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__HelloResponse(struct soap*, _ns1__HelloResponse **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__HelloResponse -#define soap_read_PointerTo_ns1__HelloResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__HelloResponse(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__HelloResponse(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__HelloResponse(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__HelloResponse ** SOAP_FMAC4 soap_get_PointerTo_ns1__HelloResponse(struct soap*, _ns1__HelloResponse **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_ns1__Hello -#define SOAP_TYPE_PointerTo_ns1__Hello (40) +#define SOAP_TYPE_PointerTo_ns1__Hello (107) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_ns1__Hello(struct soap*, _ns1__Hello *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_ns1__Hello(struct soap*, const char *, int, _ns1__Hello *const*, const char *); SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_in_PointerTo_ns1__Hello(struct soap*, const char*, _ns1__Hello **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__Hello(struct soap*, _ns1__Hello *const*, const char*, const char*); #ifndef soap_write_PointerTo_ns1__Hello -#define soap_write_PointerTo_ns1__Hello(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__Hello(soap, data), 0) || soap_put_PointerTo_ns1__Hello(soap, data, "ns1:Hello", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_ns1__Hello(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_ns1__Hello(soap, data),0) || soap_put_PointerTo_ns1__Hello(soap, data, "ns1:Hello", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_ns1__Hello(struct soap*, _ns1__Hello *const*, const char*, const char*); +SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_get_PointerTo_ns1__Hello(struct soap*, _ns1__Hello **, const char*, const char*); #ifndef soap_read_PointerTo_ns1__Hello -#define soap_read_PointerTo_ns1__Hello(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__Hello(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_ns1__Hello(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_ns1__Hello(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTons5__ArrayOfstring +#define SOAP_TYPE_PointerTons5__ArrayOfstring (106) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons5__ArrayOfstring(struct soap*, ns5__ArrayOfstring *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons5__ArrayOfstring(struct soap*, const char *, int, ns5__ArrayOfstring *const*, const char *); +SOAP_FMAC3 ns5__ArrayOfstring ** SOAP_FMAC4 soap_in_PointerTons5__ArrayOfstring(struct soap*, const char*, ns5__ArrayOfstring **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons5__ArrayOfstring(struct soap*, ns5__ArrayOfstring *const*, const char*, const char*); + +#ifndef soap_write_PointerTons5__ArrayOfstring +#define soap_write_PointerTons5__ArrayOfstring(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons5__ArrayOfstring(soap, data),0) || soap_put_PointerTons5__ArrayOfstring(soap, data, "ns5:ArrayOfstring", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns5__ArrayOfstring ** SOAP_FMAC4 soap_get_PointerTons5__ArrayOfstring(struct soap*, ns5__ArrayOfstring **, const char*, const char*); + +#ifndef soap_read_PointerTons5__ArrayOfstring +#define soap_read_PointerTons5__ArrayOfstring(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons5__ArrayOfstring(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTobool +#define SOAP_TYPE_PointerTobool (104) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTobool(struct soap*, bool *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTobool(struct soap*, const char *, int, bool *const*, const char *); +SOAP_FMAC3 bool ** SOAP_FMAC4 soap_in_PointerTobool(struct soap*, const char*, bool **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTobool(struct soap*, bool *const*, const char*, const char*); + +#ifndef soap_write_PointerTobool +#define soap_write_PointerTobool(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTobool(soap, data),0) || soap_put_PointerTobool(soap, data, "boolean", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 bool ** SOAP_FMAC4 soap_get_PointerTobool(struct soap*, bool **, const char*, const char*); + +#ifndef soap_read_PointerTobool +#define soap_read_PointerTobool(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTobool(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 _ns1__Hello ** SOAP_FMAC4 soap_get_PointerTo_ns1__Hello(struct soap*, _ns1__Hello **, const char*, const char*); #ifndef SOAP_TYPE_PointerTons1__Response -#define SOAP_TYPE_PointerTons1__Response (39) +#define SOAP_TYPE_PointerTons1__Response (103) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Response(struct soap*, ns1__Response *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Response(struct soap*, const char *, int, ns1__Response *const*, const char *); SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_in_PointerTons1__Response(struct soap*, const char*, ns1__Response **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Response(struct soap*, ns1__Response *const*, const char*, const char*); #ifndef soap_write_PointerTons1__Response -#define soap_write_PointerTons1__Response(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTons1__Response(soap, data), 0) || soap_put_PointerTons1__Response(soap, data, "ns1:Response", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTons1__Response(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__Response(soap, data),0) || soap_put_PointerTons1__Response(soap, data, "ns1:Response", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Response(struct soap*, ns1__Response *const*, const char*, const char*); +SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_get_PointerTons1__Response(struct soap*, ns1__Response **, const char*, const char*); #ifndef soap_read_PointerTons1__Response -#define soap_read_PointerTons1__Response(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__Response(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTons1__Response(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__Response(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTons1__ArrayOfModuleSymbolInfo +#define SOAP_TYPE_PointerTons1__ArrayOfModuleSymbolInfo (102) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__ArrayOfModuleSymbolInfo(struct soap*, ns1__ArrayOfModuleSymbolInfo *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__ArrayOfModuleSymbolInfo(struct soap*, const char *, int, ns1__ArrayOfModuleSymbolInfo *const*, const char *); +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo ** SOAP_FMAC4 soap_in_PointerTons1__ArrayOfModuleSymbolInfo(struct soap*, const char*, ns1__ArrayOfModuleSymbolInfo **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__ArrayOfModuleSymbolInfo(struct soap*, ns1__ArrayOfModuleSymbolInfo *const*, const char*, const char*); + +#ifndef soap_write_PointerTons1__ArrayOfModuleSymbolInfo +#define soap_write_PointerTons1__ArrayOfModuleSymbolInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__ArrayOfModuleSymbolInfo(soap, data),0) || soap_put_PointerTons1__ArrayOfModuleSymbolInfo(soap, data, "ns1:ArrayOfModuleSymbolInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__ArrayOfModuleSymbolInfo ** SOAP_FMAC4 soap_get_PointerTons1__ArrayOfModuleSymbolInfo(struct soap*, ns1__ArrayOfModuleSymbolInfo **, const char*, const char*); + +#ifndef soap_read_PointerTons1__ArrayOfModuleSymbolInfo +#define soap_read_PointerTons1__ArrayOfModuleSymbolInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__ArrayOfModuleSymbolInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTons1__DumpAdditionalInfo +#define SOAP_TYPE_PointerTons1__DumpAdditionalInfo (101) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__DumpAdditionalInfo(struct soap*, ns1__DumpAdditionalInfo *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__DumpAdditionalInfo(struct soap*, const char *, int, ns1__DumpAdditionalInfo *const*, const char *); +SOAP_FMAC3 ns1__DumpAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTons1__DumpAdditionalInfo(struct soap*, const char*, ns1__DumpAdditionalInfo **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__DumpAdditionalInfo(struct soap*, ns1__DumpAdditionalInfo *const*, const char*, const char*); + +#ifndef soap_write_PointerTons1__DumpAdditionalInfo +#define soap_write_PointerTons1__DumpAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__DumpAdditionalInfo(soap, data),0) || soap_put_PointerTons1__DumpAdditionalInfo(soap, data, "ns1:DumpAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__DumpAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTons1__DumpAdditionalInfo(struct soap*, ns1__DumpAdditionalInfo **, const char*, const char*); + +#ifndef soap_read_PointerTons1__DumpAdditionalInfo +#define soap_read_PointerTons1__DumpAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__DumpAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTons1__AppAdditionalInfo +#define SOAP_TYPE_PointerTons1__AppAdditionalInfo (100) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__AppAdditionalInfo(struct soap*, ns1__AppAdditionalInfo *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__AppAdditionalInfo(struct soap*, const char *, int, ns1__AppAdditionalInfo *const*, const char *); +SOAP_FMAC3 ns1__AppAdditionalInfo ** SOAP_FMAC4 soap_in_PointerTons1__AppAdditionalInfo(struct soap*, const char*, ns1__AppAdditionalInfo **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__AppAdditionalInfo(struct soap*, ns1__AppAdditionalInfo *const*, const char*, const char*); + +#ifndef soap_write_PointerTons1__AppAdditionalInfo +#define soap_write_PointerTons1__AppAdditionalInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__AppAdditionalInfo(soap, data),0) || soap_put_PointerTons1__AppAdditionalInfo(soap, data, "ns1:AppAdditionalInfo", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__AppAdditionalInfo ** SOAP_FMAC4 soap_get_PointerTons1__AppAdditionalInfo(struct soap*, ns1__AppAdditionalInfo **, const char*, const char*); + +#ifndef soap_read_PointerTons1__AppAdditionalInfo +#define soap_read_PointerTons1__AppAdditionalInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__AppAdditionalInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 ns1__Response ** SOAP_FMAC4 soap_get_PointerTons1__Response(struct soap*, ns1__Response **, const char*, const char*); #ifndef SOAP_TYPE_PointerTons1__Application -#define SOAP_TYPE_PointerTons1__Application (38) +#define SOAP_TYPE_PointerTons1__Application (99) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Application(struct soap*, ns1__Application *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Application(struct soap*, const char *, int, ns1__Application *const*, const char *); SOAP_FMAC3 ns1__Application ** SOAP_FMAC4 soap_in_PointerTons1__Application(struct soap*, const char*, ns1__Application **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Application(struct soap*, ns1__Application *const*, const char*, const char*); #ifndef soap_write_PointerTons1__Application -#define soap_write_PointerTons1__Application(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTons1__Application(soap, data), 0) || soap_put_PointerTons1__Application(soap, data, "ns1:Application", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTons1__Application(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__Application(soap, data),0) || soap_put_PointerTons1__Application(soap, data, "ns1:Application", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Application(struct soap*, ns1__Application *const*, const char*, const char*); +SOAP_FMAC3 ns1__Application ** SOAP_FMAC4 soap_get_PointerTons1__Application(struct soap*, ns1__Application **, const char*, const char*); #ifndef soap_read_PointerTons1__Application -#define soap_read_PointerTons1__Application(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__Application(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTons1__Application(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__Application(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 ns1__Application ** SOAP_FMAC4 soap_get_PointerTons1__Application(struct soap*, ns1__Application **, const char*, const char*); #ifndef SOAP_TYPE_PointerTons1__ClientLib -#define SOAP_TYPE_PointerTons1__ClientLib (37) +#define SOAP_TYPE_PointerTons1__ClientLib (98) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__ClientLib(struct soap*, ns1__ClientLib *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__ClientLib(struct soap*, const char *, int, ns1__ClientLib *const*, const char *); SOAP_FMAC3 ns1__ClientLib ** SOAP_FMAC4 soap_in_PointerTons1__ClientLib(struct soap*, const char*, ns1__ClientLib **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__ClientLib(struct soap*, ns1__ClientLib *const*, const char*, const char*); #ifndef soap_write_PointerTons1__ClientLib -#define soap_write_PointerTons1__ClientLib(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTons1__ClientLib(soap, data), 0) || soap_put_PointerTons1__ClientLib(soap, data, "ns1:ClientLib", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTons1__ClientLib(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__ClientLib(soap, data),0) || soap_put_PointerTons1__ClientLib(soap, data, "ns1:ClientLib", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__ClientLib(struct soap*, ns1__ClientLib *const*, const char*, const char*); +SOAP_FMAC3 ns1__ClientLib ** SOAP_FMAC4 soap_get_PointerTons1__ClientLib(struct soap*, ns1__ClientLib **, const char*, const char*); #ifndef soap_read_PointerTons1__ClientLib -#define soap_read_PointerTons1__ClientLib(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__ClientLib(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTons1__ClientLib(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__ClientLib(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerToint +#define SOAP_TYPE_PointerToint (97) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToint(struct soap*, int *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToint(struct soap*, const char *, int, int *const*, const char *); +SOAP_FMAC3 int ** SOAP_FMAC4 soap_in_PointerToint(struct soap*, const char*, int **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToint(struct soap*, int *const*, const char*, const char*); + +#ifndef soap_write_PointerToint +#define soap_write_PointerToint(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerToint(soap, data),0) || soap_put_PointerToint(soap, data, "int", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 int ** SOAP_FMAC4 soap_get_PointerToint(struct soap*, int **, const char*, const char*); + +#ifndef soap_read_PointerToint +#define soap_read_PointerToint(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerToint(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 ns1__ClientLib ** SOAP_FMAC4 soap_get_PointerTons1__ClientLib(struct soap*, ns1__ClientLib **, const char*, const char*); #ifndef SOAP_TYPE_PointerTo_xop__Include -#define SOAP_TYPE_PointerTo_xop__Include (35) +#define SOAP_TYPE_PointerTo_xop__Include (96) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_xop__Include(struct soap*, struct _xop__Include *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_xop__Include(struct soap*, const char *, int, struct _xop__Include *const*, const char *); SOAP_FMAC3 struct _xop__Include ** SOAP_FMAC4 soap_in_PointerTo_xop__Include(struct soap*, const char*, struct _xop__Include **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_xop__Include(struct soap*, struct _xop__Include *const*, const char*, const char*); #ifndef soap_write_PointerTo_xop__Include -#define soap_write_PointerTo_xop__Include(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTo_xop__Include(soap, data), 0) || soap_put_PointerTo_xop__Include(soap, data, "xop:Include", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTo_xop__Include(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTo_xop__Include(soap, data),0) || soap_put_PointerTo_xop__Include(soap, data, "xop:Include", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_xop__Include(struct soap*, struct _xop__Include *const*, const char*, const char*); +SOAP_FMAC3 struct _xop__Include ** SOAP_FMAC4 soap_get_PointerTo_xop__Include(struct soap*, struct _xop__Include **, const char*, const char*); #ifndef soap_read_PointerTo_xop__Include -#define soap_read_PointerTo_xop__Include(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_xop__Include(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTo_xop__Include(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTo_xop__Include(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 struct _xop__Include ** SOAP_FMAC4 soap_get_PointerTo_xop__Include(struct soap*, struct _xop__Include **, const char*, const char*); -#ifndef SOAP_TYPE_PointerTons1__Solution -#define SOAP_TYPE_PointerTons1__Solution (34) +#ifndef SOAP_TYPE_PointerTons1__Pdb70File +#define SOAP_TYPE_PointerTons1__Pdb70File (95) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Pdb70File(struct soap*, ns1__Pdb70File *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Pdb70File(struct soap*, const char *, int, ns1__Pdb70File *const*, const char *); +SOAP_FMAC3 ns1__Pdb70File ** SOAP_FMAC4 soap_in_PointerTons1__Pdb70File(struct soap*, const char*, ns1__Pdb70File **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Pdb70File(struct soap*, ns1__Pdb70File *const*, const char*, const char*); + +#ifndef soap_write_PointerTons1__Pdb70File +#define soap_write_PointerTons1__Pdb70File(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__Pdb70File(soap, data),0) || soap_put_PointerTons1__Pdb70File(soap, data, "ns1:Pdb70File", NULL) || soap_end_send(soap), (soap)->error ) +#endif + +SOAP_FMAC3 ns1__Pdb70File ** SOAP_FMAC4 soap_get_PointerTons1__Pdb70File(struct soap*, ns1__Pdb70File **, const char*, const char*); + +#ifndef soap_read_PointerTons1__Pdb70File +#define soap_read_PointerTons1__Pdb70File(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__Pdb70File(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) +#endif + + +#ifndef SOAP_TYPE_PointerTons1__ModuleSymbolInfo +#define SOAP_TYPE_PointerTons1__ModuleSymbolInfo (93) #endif -SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__Solution(struct soap*, ns1__Solution *const*); -SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__Solution(struct soap*, const char *, int, ns1__Solution *const*, const char *); -SOAP_FMAC3 ns1__Solution ** SOAP_FMAC4 soap_in_PointerTons1__Solution(struct soap*, const char*, ns1__Solution **, const char*); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTons1__ModuleSymbolInfo(struct soap*, ns1__ModuleSymbolInfo *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons1__ModuleSymbolInfo(struct soap*, const char *, int, ns1__ModuleSymbolInfo *const*, const char *); +SOAP_FMAC3 ns1__ModuleSymbolInfo ** SOAP_FMAC4 soap_in_PointerTons1__ModuleSymbolInfo(struct soap*, const char*, ns1__ModuleSymbolInfo **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__ModuleSymbolInfo(struct soap*, ns1__ModuleSymbolInfo *const*, const char*, const char*); -#ifndef soap_write_PointerTons1__Solution -#define soap_write_PointerTons1__Solution(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTons1__Solution(soap, data), 0) || soap_put_PointerTons1__Solution(soap, data, "ns1:Solution", NULL) || soap_end_send(soap) ) +#ifndef soap_write_PointerTons1__ModuleSymbolInfo +#define soap_write_PointerTons1__ModuleSymbolInfo(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTons1__ModuleSymbolInfo(soap, data),0) || soap_put_PointerTons1__ModuleSymbolInfo(soap, data, "ns1:ModuleSymbolInfo", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTons1__Solution(struct soap*, ns1__Solution *const*, const char*, const char*); +SOAP_FMAC3 ns1__ModuleSymbolInfo ** SOAP_FMAC4 soap_get_PointerTons1__ModuleSymbolInfo(struct soap*, ns1__ModuleSymbolInfo **, const char*, const char*); -#ifndef soap_read_PointerTons1__Solution -#define soap_read_PointerTons1__Solution(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__Solution(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#ifndef soap_read_PointerTons1__ModuleSymbolInfo +#define soap_read_PointerTons1__ModuleSymbolInfo(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTons1__ModuleSymbolInfo(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 ns1__Solution ** SOAP_FMAC4 soap_get_PointerTons1__Solution(struct soap*, ns1__Solution **, const char*, const char*); #ifndef SOAP_TYPE_PointerTostd__wstring -#define SOAP_TYPE_PointerTostd__wstring (33) +#define SOAP_TYPE_PointerTostd__wstring (92) #endif SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTostd__wstring(struct soap*, std::wstring *const*); SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTostd__wstring(struct soap*, const char *, int, std::wstring *const*, const char *); SOAP_FMAC3 std::wstring ** SOAP_FMAC4 soap_in_PointerTostd__wstring(struct soap*, const char*, std::wstring **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTostd__wstring(struct soap*, std::wstring *const*, const char*, const char*); #ifndef soap_write_PointerTostd__wstring -#define soap_write_PointerTostd__wstring(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTostd__wstring(soap, data), 0) || soap_put_PointerTostd__wstring(soap, data, "string", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTostd__wstring(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTostd__wstring(soap, data),0) || soap_put_PointerTostd__wstring(soap, data, "string", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTostd__wstring(struct soap*, std::wstring *const*, const char*, const char*); +SOAP_FMAC3 std::wstring ** SOAP_FMAC4 soap_get_PointerTostd__wstring(struct soap*, std::wstring **, const char*, const char*); #ifndef soap_read_PointerTostd__wstring -#define soap_read_PointerTostd__wstring(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTostd__wstring(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTostd__wstring(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTostd__wstring(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 std::wstring ** SOAP_FMAC4 soap_get_PointerTostd__wstring(struct soap*, std::wstring **, const char*, const char*); #ifndef SOAP_TYPE_PointerTounsignedByte -#define SOAP_TYPE_PointerTounsignedByte (11) +#define SOAP_TYPE_PointerTounsignedByte (15) #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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap*, unsigned char *const*, const char*, const char*); #ifndef soap_write_PointerTounsignedByte -#define soap_write_PointerTounsignedByte(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerTounsignedByte(soap, data), 0) || soap_put_PointerTounsignedByte(soap, data, "unsignedByte", NULL) || soap_end_send(soap) ) +#define soap_write_PointerTounsignedByte(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_PointerTounsignedByte(soap, data),0) || soap_put_PointerTounsignedByte(soap, data, "unsignedByte", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap*, unsigned char *const*, const char*, const char*); +SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap*, unsigned char **, const char*, const char*); #ifndef soap_read_PointerTounsignedByte -#define soap_read_PointerTounsignedByte(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_PointerTounsignedByte(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap*, unsigned char **, const char*, const char*); #ifndef SOAP_TYPE__QName #define SOAP_TYPE__QName (5) @@ -1436,23 +3288,21 @@ SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soa #define soap_default__QName(soap, a) soap_default_string(soap, a) - -#define soap_serialize__QName(soap, a) soap_serialize_string(soap, a) - +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize__QName(struct soap*, char *const*); 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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*); #ifndef soap_write__QName -#define soap_write__QName(soap, data) ( soap_begin_send(soap) || (soap_serialize__QName(soap, data), 0) || soap_put__QName(soap, data, "byte", NULL) || soap_end_send(soap) ) +#define soap_write__QName(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize__QName(soap, data),0) || soap_put__QName(soap, data, "byte", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*); +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*); #ifndef soap_read__QName -#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*); #ifndef SOAP_TYPE_string #define SOAP_TYPE_string (4) @@ -1461,18 +3311,48 @@ 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*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*); #ifndef soap_write_string -#define soap_write_string(soap, data) ( soap_begin_send(soap) || (soap_serialize_string(soap, data), 0) || soap_put_string(soap, data, "byte", NULL) || soap_end_send(soap) ) +#define soap_write_string(soap, data) ( soap_free_temp(soap), soap_begin_send(soap) || (soap_serialize_string(soap, data),0) || soap_put_string(soap, data, "byte", NULL) || soap_end_send(soap), (soap)->error ) #endif -SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*); +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*); #ifndef soap_read_string -#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap) ) +#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap), (soap)->error ) #endif -SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*); + +#ifndef SOAP_TYPE_std__vectorTemplateOfstd__wstring +#define SOAP_TYPE_std__vectorTemplateOfstd__wstring (105) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__vectorTemplateOfstd__wstring(struct soap*, std::vector*); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__vectorTemplateOfstd__wstring(struct soap*, const std::vector*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__vectorTemplateOfstd__wstring(struct soap*, const char*, int, const std::vector*, const char*); +SOAP_FMAC3 std::vector* SOAP_FMAC4 soap_in_std__vectorTemplateOfstd__wstring(struct soap*, const char*, std::vector*, const char*); +SOAP_FMAC1 std::vector * SOAP_FMAC2 soap_instantiate_std__vectorTemplateOfstd__wstring(struct soap*, int, const char*, const char*, size_t*); + +inline std::vector * soap_new_std__vectorTemplateOfstd__wstring(struct soap *soap, int n = -1) { return soap_instantiate_std__vectorTemplateOfstd__wstring(soap, n, NULL, NULL, NULL); } + +inline void soap_delete_std__vectorTemplateOfstd__wstring(struct soap *soap, std::vector*p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__vectorTemplateOfstd__wstring(struct soap*, int, int, void*, size_t, const void*, size_t); + +#ifndef SOAP_TYPE_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo +#define SOAP_TYPE_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo (94) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_default_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap*, std::vector*); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap*, const std::vector*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap*, const char*, int, const std::vector*, const char*); +SOAP_FMAC3 std::vector* SOAP_FMAC4 soap_in_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap*, const char*, std::vector*, const char*); +SOAP_FMAC1 std::vector * SOAP_FMAC2 soap_instantiate_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap*, int, const char*, const char*, size_t*); + +inline std::vector * soap_new_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap *soap, int n = -1) { return soap_instantiate_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(soap, n, NULL, NULL, NULL); } + +inline void soap_delete_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap *soap, std::vector*p) { soap_delete(soap, p); } + +SOAP_FMAC3 void SOAP_FMAC4 soap_copy_std__vectorTemplateOfPointerTons1__ModuleSymbolInfo(struct soap*, int, int, void*, size_t, const void*, size_t); #endif diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapStub.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapStub.h index 992a8a71a..8c313334d 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapStub.h +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapStub.h @@ -1,16 +1,26 @@ /* soapStub.h - Generated by gSOAP 2.8.0 from DumpUploader.h - Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. - The generated code is released under one of the following licenses: - GPL, the gSOAP public license, or Genivia's license for commercial use. + Generated by gSOAP 2.8.17r from DumpUploader.h + +Copyright(C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. +The generated code is released under one of the following licenses: +GPL or Genivia's license for commercial use. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. */ #ifndef soapStub_H #define soapStub_H #include -#define SOAP_NAMESPACE_OF_ns1 "https://www.crash-server.com/" -#define SOAP_NAMESPACE_OF_ns2 "http://microsoft.com/wsdl/types/" +#define SOAP_NAMESPACE_OF_ns2 "https://www.drdump.com/services/Imports" +#define SOAP_NAMESPACE_OF_ns1 "https://www.drdump.com/services" +#define SOAP_NAMESPACE_OF_ns3 "http://schemas.microsoft.com/2003/10/Serialization/" +#define SOAP_NAMESPACE_OF_ns4 "http://schemas.datacontract.org/2004/07/DumpUploadService3" +#define SOAP_NAMESPACE_OF_ns5 "http://schemas.microsoft.com/2003/10/Serialization/Arrays" #include "stdsoap2.h" +#if GSOAP_VERSION != 20817 +# error "GSOAP VERSION MISMATCH IN GENERATED CODE: PLEASE REINSTALL PACKAGE" +#endif + /******************************************************************************\ * * @@ -19,28 +29,22 @@ \******************************************************************************/ -#ifndef SOAP_TYPE_ns1__Architecture -#define SOAP_TYPE_ns1__Architecture (24) -/* ns1:Architecture */ -enum ns1__Architecture {ns1__Architecture__x32 = 0, ns1__Architecture__x64 = 1}; +#ifndef SOAP_TYPE_ns4__ClientLib_Architecture +#define SOAP_TYPE_ns4__ClientLib_Architecture (86) +/* ns4:ClientLib.Architecture */ +enum ns4__ClientLib_Architecture { ns4__ClientLib_Architecture__x86 = 0, ns4__ClientLib_Architecture__x64 = 1, ns4__ClientLib_Architecture__DotNet = 2 }; #endif -#ifndef SOAP_TYPE_ns1__ResponseType -#define SOAP_TYPE_ns1__ResponseType (25) -/* ns1:ResponseType */ -enum ns1__ResponseType {ns1__ResponseType__HaveSolution = 0, ns1__ResponseType__NeedMiniDump = 1, ns1__ResponseType__NeedMoreInfo = 2, ns1__ResponseType__Stop = 3, ns1__ResponseType__Error = 4}; +#ifndef SOAP_TYPE_ns4__ClientLib_ClientType +#define SOAP_TYPE_ns4__ClientLib_ClientType (88) +/* ns4:ClientLib.ClientType */ +enum ns4__ClientLib_ClientType { ns4__ClientLib_ClientType__CrashHandler_1_0 = 0, ns4__ClientLib_ClientType__WebCrashRptGate = 1, ns4__ClientLib_ClientType__DumpUploader = 2, ns4__ClientLib_ClientType__CrashHandler_2_0_CrashRptBased = 3, ns4__ClientLib_ClientType__SymbolUploader = 4 }; #endif -#ifndef SOAP_TYPE_ns1__SolutionType -#define SOAP_TYPE_ns1__SolutionType (26) -/* ns1:SolutionType */ -enum ns1__SolutionType {ns1__SolutionType__Url = 0, ns1__SolutionType__Exe = 1}; -#endif - -#ifndef SOAP_TYPE_ns1__AdditionalInfoType -#define SOAP_TYPE_ns1__AdditionalInfoType (27) -/* ns1:AdditionalInfoType */ -enum ns1__AdditionalInfoType {ns1__AdditionalInfoType__None = 0, ns1__AdditionalInfoType__FullDump = 1, ns1__AdditionalInfoType__Info = 2}; +#ifndef SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType +#define SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType (90) +/* ns4:HaveSolutionResponse.SolutionType */ +enum ns4__HaveSolutionResponse_SolutionType { ns4__HaveSolutionResponse_SolutionType__Url = 0, ns4__HaveSolutionResponse_SolutionType__Exe = 1 }; #endif /******************************************************************************\ @@ -49,6 +53,11 @@ enum ns1__AdditionalInfoType {ns1__AdditionalInfoType__None = 0, ns1__Additional * * \******************************************************************************/ +#ifndef SOAP_TYPE_xsd__QName +#define SOAP_TYPE_xsd__QName (11) +typedef std::string xsd__QName; +#endif + /******************************************************************************\ * * @@ -61,8 +70,33 @@ enum ns1__AdditionalInfoType {ns1__AdditionalInfoType__None = 0, ns1__Additional #endif +#ifndef SOAP_TYPE_xsd__anyType +#define SOAP_TYPE_xsd__anyType (8) +/* Primitive xsd:anyType schema type: */ +class SOAP_CMAC xsd__anyType +{ +public: + char *__item; + struct soap *soap; /* transient */ +public: + virtual int soap_type() const { return 8; } /* = unique type id SOAP_TYPE_xsd__anyType */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__anyType() { xsd__anyType::soap_default(NULL); } + virtual ~xsd__anyType() { } +}; +#endif + +#if 0 /* volatile type: do not declare here, declared elsewhere */ + +#endif + #ifndef SOAP_TYPE__xop__Include -#define SOAP_TYPE__xop__Include (8) +#define SOAP_TYPE__xop__Include (12) /* Base64 schema type: */ struct _xop__Include { @@ -72,6 +106,8 @@ public: char *id; /* optional element of type xsd:string */ char *type; /* optional element of type xsd:string */ char *options; /* optional element of type xsd:string */ +public: + int soap_type() const { return 12; } /* = unique type id SOAP_TYPE__xop__Include */ }; typedef struct _xop__Include _xop__Include; #endif @@ -80,137 +116,742 @@ typedef struct _xop__Include _xop__Include; #endif -#ifndef SOAP_TYPE_ns1__ClientLib -#define SOAP_TYPE_ns1__ClientLib (12) -/* ns1:ClientLib */ -class SOAP_CMAC ns1__ClientLib +#ifndef SOAP_TYPE_xsd__ID_ +#define SOAP_TYPE_xsd__ID_ (20) +/* Primitive xsd:ID schema type: */ +class SOAP_CMAC xsd__ID_ : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 20; } /* = unique type id SOAP_TYPE_xsd__ID_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__ID_() { xsd__ID_::soap_default(NULL); } + virtual ~xsd__ID_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__IDREF_ +#define SOAP_TYPE_xsd__IDREF_ (22) +/* Primitive xsd:IDREF schema type: */ +class SOAP_CMAC xsd__IDREF_ : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 22; } /* = unique type id SOAP_TYPE_xsd__IDREF_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__IDREF_() { xsd__IDREF_::soap_default(NULL); } + virtual ~xsd__IDREF_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__QName_ +#define SOAP_TYPE_xsd__QName_ (23) +/* Primitive xsd:QName schema type: */ +class SOAP_CMAC xsd__QName_ : public xsd__anyType +{ +public: + std::string __item; +public: + virtual int soap_type() const { return 23; } /* = unique type id SOAP_TYPE_xsd__QName_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__QName_() { xsd__QName_::soap_default(NULL); } + virtual ~xsd__QName_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__anyURI_ +#define SOAP_TYPE_xsd__anyURI_ (25) +/* Primitive xsd:anyURI schema type: */ +class SOAP_CMAC xsd__anyURI_ : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 25; } /* = unique type id SOAP_TYPE_xsd__anyURI_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__anyURI_() { xsd__anyURI_::soap_default(NULL); } + virtual ~xsd__anyURI_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__base64Binary +#define SOAP_TYPE_xsd__base64Binary (26) +/* Primitive xsd:base64Binary schema type: */ +class SOAP_CMAC xsd__base64Binary : public xsd__anyType +{ +public: + struct _xop__Include __item; +public: + virtual int soap_type() const { return 26; } /* = unique type id SOAP_TYPE_xsd__base64Binary */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__base64Binary() { xsd__base64Binary::soap_default(NULL); } + virtual ~xsd__base64Binary() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__boolean +#define SOAP_TYPE_xsd__boolean (27) +/* Primitive xsd:boolean schema type: */ +class SOAP_CMAC xsd__boolean : public xsd__anyType +{ +public: + bool __item; +public: + virtual int soap_type() const { return 27; } /* = unique type id SOAP_TYPE_xsd__boolean */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__boolean() { xsd__boolean::soap_default(NULL); } + virtual ~xsd__boolean() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__byte_ +#define SOAP_TYPE_xsd__byte_ (29) +/* Primitive xsd:byte schema type: */ +class SOAP_CMAC xsd__byte_ : public xsd__anyType +{ +public: + char __item; +public: + virtual int soap_type() const { return 29; } /* = unique type id SOAP_TYPE_xsd__byte_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__byte_() { xsd__byte_::soap_default(NULL); } + virtual ~xsd__byte_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__dateTime +#define SOAP_TYPE_xsd__dateTime (30) +/* Primitive xsd:dateTime schema type: */ +class SOAP_CMAC xsd__dateTime : public xsd__anyType +{ +public: + time_t __item; +public: + virtual int soap_type() const { return 30; } /* = unique type id SOAP_TYPE_xsd__dateTime */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__dateTime() { xsd__dateTime::soap_default(NULL); } + virtual ~xsd__dateTime() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__decimal_ +#define SOAP_TYPE_xsd__decimal_ (33) +/* Primitive xsd:decimal schema type: */ +class SOAP_CMAC xsd__decimal_ : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 33; } /* = unique type id SOAP_TYPE_xsd__decimal_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__decimal_() { xsd__decimal_::soap_default(NULL); } + virtual ~xsd__decimal_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__double +#define SOAP_TYPE_xsd__double (34) +/* Primitive xsd:double schema type: */ +class SOAP_CMAC xsd__double : public xsd__anyType +{ +public: + double __item; +public: + virtual int soap_type() const { return 34; } /* = unique type id SOAP_TYPE_xsd__double */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__double() { xsd__double::soap_default(NULL); } + virtual ~xsd__double() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__duration_ +#define SOAP_TYPE_xsd__duration_ (37) +/* Primitive xsd:duration schema type: */ +class SOAP_CMAC xsd__duration_ : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 37; } /* = unique type id SOAP_TYPE_xsd__duration_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__duration_() { xsd__duration_::soap_default(NULL); } + virtual ~xsd__duration_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__float +#define SOAP_TYPE_xsd__float (38) +/* Primitive xsd:float schema type: */ +class SOAP_CMAC xsd__float : public xsd__anyType +{ +public: + float __item; +public: + virtual int soap_type() const { return 38; } /* = unique type id SOAP_TYPE_xsd__float */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__float() { xsd__float::soap_default(NULL); } + virtual ~xsd__float() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__int +#define SOAP_TYPE_xsd__int (40) +/* Primitive xsd:int schema type: */ +class SOAP_CMAC xsd__int : public xsd__anyType +{ +public: + int __item; +public: + virtual int soap_type() const { return 40; } /* = unique type id SOAP_TYPE_xsd__int */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__int() { xsd__int::soap_default(NULL); } + virtual ~xsd__int() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__long +#define SOAP_TYPE_xsd__long (41) +/* Primitive xsd:long schema type: */ +class SOAP_CMAC xsd__long : public xsd__anyType +{ +public: + LONG64 __item; +public: + virtual int soap_type() const { return 41; } /* = unique type id SOAP_TYPE_xsd__long */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__long() { xsd__long::soap_default(NULL); } + virtual ~xsd__long() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__short +#define SOAP_TYPE_xsd__short (43) +/* Primitive xsd:short schema type: */ +class SOAP_CMAC xsd__short : public xsd__anyType +{ +public: + short __item; +public: + virtual int soap_type() const { return 43; } /* = unique type id SOAP_TYPE_xsd__short */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__short() { xsd__short::soap_default(NULL); } + virtual ~xsd__short() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__string +#define SOAP_TYPE_xsd__string (45) +/* Primitive xsd:string schema type: */ +class SOAP_CMAC xsd__string : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 45; } /* = unique type id SOAP_TYPE_xsd__string */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__string() { xsd__string::soap_default(NULL); } + virtual ~xsd__string() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__unsignedByte_ +#define SOAP_TYPE_xsd__unsignedByte_ (46) +/* Primitive xsd:unsignedByte schema type: */ +class SOAP_CMAC xsd__unsignedByte_ : public xsd__anyType +{ +public: + unsigned char __item; +public: + virtual int soap_type() const { return 46; } /* = unique type id SOAP_TYPE_xsd__unsignedByte_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__unsignedByte_() { xsd__unsignedByte_::soap_default(NULL); } + virtual ~xsd__unsignedByte_() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__unsignedInt +#define SOAP_TYPE_xsd__unsignedInt (47) +/* Primitive xsd:unsignedInt schema type: */ +class SOAP_CMAC xsd__unsignedInt : public xsd__anyType +{ +public: + unsigned int __item; +public: + virtual int soap_type() const { return 47; } /* = unique type id SOAP_TYPE_xsd__unsignedInt */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__unsignedInt() { xsd__unsignedInt::soap_default(NULL); } + virtual ~xsd__unsignedInt() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__unsignedLong +#define SOAP_TYPE_xsd__unsignedLong (48) +/* Primitive xsd:unsignedLong schema type: */ +class SOAP_CMAC xsd__unsignedLong : public xsd__anyType +{ +public: + ULONG64 __item; +public: + virtual int soap_type() const { return 48; } /* = unique type id SOAP_TYPE_xsd__unsignedLong */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__unsignedLong() { xsd__unsignedLong::soap_default(NULL); } + virtual ~xsd__unsignedLong() { } +}; +#endif + +#ifndef SOAP_TYPE_xsd__unsignedShort +#define SOAP_TYPE_xsd__unsignedShort (50) +/* Primitive xsd:unsignedShort schema type: */ +class SOAP_CMAC xsd__unsignedShort : public xsd__anyType +{ +public: + unsigned short __item; +public: + virtual int soap_type() const { return 50; } /* = unique type id SOAP_TYPE_xsd__unsignedShort */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + xsd__unsignedShort() { xsd__unsignedShort::soap_default(NULL); } + virtual ~xsd__unsignedShort() { } +}; +#endif + +#ifndef SOAP_TYPE_ns3__char__ +#define SOAP_TYPE_ns3__char__ (81) +/* Primitive ns3:char schema type: */ +class SOAP_CMAC ns3__char__ : public xsd__anyType +{ +public: + int __item; +public: + virtual int soap_type() const { return 81; } /* = unique type id SOAP_TYPE_ns3__char__ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns3__char__() { ns3__char__::soap_default(NULL); } + virtual ~ns3__char__() { } +}; +#endif + +#ifndef SOAP_TYPE_ns3__duration__ +#define SOAP_TYPE_ns3__duration__ (83) +/* Primitive ns3:duration schema type: */ +class SOAP_CMAC ns3__duration__ : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 83; } /* = unique type id SOAP_TYPE_ns3__duration__ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns3__duration__() { ns3__duration__::soap_default(NULL); } + virtual ~ns3__duration__() { } +}; +#endif + +#ifndef SOAP_TYPE_ns3__guid__ +#define SOAP_TYPE_ns3__guid__ (85) +/* Primitive ns3:guid schema type: */ +class SOAP_CMAC ns3__guid__ : public xsd__anyType +{ +public: + std::wstring __item; +public: + virtual int soap_type() const { return 85; } /* = unique type id SOAP_TYPE_ns3__guid__ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns3__guid__() { ns3__guid__::soap_default(NULL); } + virtual ~ns3__guid__() { } +}; +#endif + +#ifndef SOAP_TYPE_ns4__ClientLib_Architecture_ +#define SOAP_TYPE_ns4__ClientLib_Architecture_ (87) +/* Primitive ns4:ClientLib.Architecture schema type: */ +class SOAP_CMAC ns4__ClientLib_Architecture_ : public xsd__anyType +{ +public: + enum ns4__ClientLib_Architecture __item; +public: + virtual int soap_type() const { return 87; } /* = unique type id SOAP_TYPE_ns4__ClientLib_Architecture_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns4__ClientLib_Architecture_() { ns4__ClientLib_Architecture_::soap_default(NULL); } + virtual ~ns4__ClientLib_Architecture_() { } +}; +#endif + +#ifndef SOAP_TYPE_ns4__ClientLib_ClientType_ +#define SOAP_TYPE_ns4__ClientLib_ClientType_ (89) +/* Primitive ns4:ClientLib.ClientType schema type: */ +class SOAP_CMAC ns4__ClientLib_ClientType_ : public xsd__anyType +{ +public: + enum ns4__ClientLib_ClientType __item; +public: + virtual int soap_type() const { return 89; } /* = unique type id SOAP_TYPE_ns4__ClientLib_ClientType_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns4__ClientLib_ClientType_() { ns4__ClientLib_ClientType_::soap_default(NULL); } + virtual ~ns4__ClientLib_ClientType_() { } +}; +#endif + +#ifndef SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_ +#define SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_ (91) +/* Primitive ns4:HaveSolutionResponse.SolutionType schema type: */ +class SOAP_CMAC ns4__HaveSolutionResponse_SolutionType_ : public xsd__anyType +{ +public: + enum ns4__HaveSolutionResponse_SolutionType __item; +public: + virtual int soap_type() const { return 91; } /* = unique type id SOAP_TYPE_ns4__HaveSolutionResponse_SolutionType_ */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns4__HaveSolutionResponse_SolutionType_() { ns4__HaveSolutionResponse_SolutionType_::soap_default(NULL); } + virtual ~ns4__HaveSolutionResponse_SolutionType_() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__ClientLib +#define SOAP_TYPE_ns1__ClientLib (52) +/* ns1:ClientLib */ +class SOAP_CMAC ns1__ClientLib : public xsd__anyType +{ +public: + enum ns4__ClientLib_Architecture arch; /* required element of type ns4:ClientLib.Architecture */ + enum ns4__ClientLib_ClientType type; /* required element of type ns4:ClientLib.ClientType */ + unsigned short v1; /* required element of type xsd:unsignedShort */ + unsigned short v2; /* required element of type xsd:unsignedShort */ + unsigned short v3; /* required element of type xsd:unsignedShort */ + unsigned short v4; /* required element of type xsd:unsignedShort */ +public: + virtual int soap_type() const { return 52; } /* = unique type id SOAP_TYPE_ns1__ClientLib */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__ClientLib() { ns1__ClientLib::soap_default(NULL); } + virtual ~ns1__ClientLib() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__Application +#define SOAP_TYPE_ns1__Application (53) +/* ns1:Application */ +class SOAP_CMAC ns1__Application : public xsd__anyType +{ +public: + std::wstring applicationGUID; /* required element of type ns3:guid */ + unsigned short hotfix; /* required element of type xsd:unsignedShort */ + std::wstring *mainModule; /* optional element of type xsd:string */ + unsigned short v1; /* required element of type xsd:unsignedShort */ + unsigned short v2; /* required element of type xsd:unsignedShort */ + unsigned short v3; /* required element of type xsd:unsignedShort */ + unsigned short v4; /* required element of type xsd:unsignedShort */ +public: + virtual int soap_type() const { return 53; } /* = unique type id SOAP_TYPE_ns1__Application */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__Application() { ns1__Application::soap_default(NULL); } + virtual ~ns1__Application() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__AppAdditionalInfo +#define SOAP_TYPE_ns1__AppAdditionalInfo (54) +/* ns1:AppAdditionalInfo */ +class SOAP_CMAC ns1__AppAdditionalInfo : public xsd__anyType +{ +public: + std::wstring *appName; /* optional element of type xsd:string */ + std::wstring *companyName; /* optional element of type xsd:string */ +public: + virtual int soap_type() const { return 54; } /* = unique type id SOAP_TYPE_ns1__AppAdditionalInfo */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__AppAdditionalInfo() { ns1__AppAdditionalInfo::soap_default(NULL); } + virtual ~ns1__AppAdditionalInfo() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__DumpAdditionalInfo +#define SOAP_TYPE_ns1__DumpAdditionalInfo (55) +/* ns1:DumpAdditionalInfo */ +class SOAP_CMAC ns1__DumpAdditionalInfo : public xsd__anyType +{ +public: + int PCID; /* required element of type xsd:int */ + time_t crashDate; /* required element of type xsd:dateTime */ + std::wstring *description; /* optional element of type xsd:string */ + std::wstring *group; /* optional element of type xsd:string */ + int submitterID; /* required element of type xsd:int */ +public: + virtual int soap_type() const { return 55; } /* = unique type id SOAP_TYPE_ns1__DumpAdditionalInfo */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__DumpAdditionalInfo() { ns1__DumpAdditionalInfo::soap_default(NULL); } + virtual ~ns1__DumpAdditionalInfo() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo +#define SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo (56) +/* ns1:ArrayOfModuleSymbolInfo */ +class SOAP_CMAC ns1__ArrayOfModuleSymbolInfo : public xsd__anyType { public: - unsigned short v1; /* required element of type xsd:unsignedShort */ - unsigned short v2; /* required element of type xsd:unsignedShort */ - unsigned short v3; /* required element of type xsd:unsignedShort */ - unsigned short v4; /* required element of type xsd:unsignedShort */ - enum ns1__Architecture arch; /* required element of type ns1:Architecture */ - struct soap *soap; /* transient */ + std::vectorModuleSymbolInfo; /* optional element of type ns1:ModuleSymbolInfo */ public: - virtual int soap_type() const { return 12; } /* = unique id SOAP_TYPE_ns1__ClientLib */ + virtual int soap_type() const { return 56; } /* = unique type id SOAP_TYPE_ns1__ArrayOfModuleSymbolInfo */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - ns1__ClientLib(): soap(NULL) { ns1__ClientLib::soap_default(NULL); } - virtual ~ns1__ClientLib() { } + ns1__ArrayOfModuleSymbolInfo() { ns1__ArrayOfModuleSymbolInfo::soap_default(NULL); } + virtual ~ns1__ArrayOfModuleSymbolInfo() { } }; #endif -#ifndef SOAP_TYPE_ns1__Application -#define SOAP_TYPE_ns1__Application (13) -/* ns1:Application */ -class SOAP_CMAC ns1__Application +#ifndef SOAP_TYPE_ns1__ModuleSymbolInfo +#define SOAP_TYPE_ns1__ModuleSymbolInfo (57) +/* ns1:ModuleSymbolInfo */ +class SOAP_CMAC ns1__ModuleSymbolInfo : public xsd__anyType { public: - std::wstring applicationGUID; /* required element of type ns2:guid */ - unsigned short v1; /* required element of type xsd:unsignedShort */ - unsigned short v2; /* required element of type xsd:unsignedShort */ - unsigned short v3; /* required element of type xsd:unsignedShort */ - unsigned short v4; /* required element of type xsd:unsignedShort */ - unsigned short hotfix; /* required element of type xsd:unsignedShort */ - struct soap *soap; /* transient */ + bool isMicrosoftModule; /* required element of type xsd:boolean */ + std::wstring *path; /* optional element of type xsd:string */ + class ns1__Pdb70File *pdb; /* optional element of type ns1:Pdb70File */ + unsigned int sizeOfImage; /* required element of type xsd:unsignedInt */ + unsigned int timeDateStamp; /* required element of type xsd:unsignedInt */ public: - virtual int soap_type() const { return 13; } /* = unique id SOAP_TYPE_ns1__Application */ + virtual int soap_type() const { return 57; } /* = unique type id SOAP_TYPE_ns1__ModuleSymbolInfo */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - ns1__Application(): soap(NULL) { ns1__Application::soap_default(NULL); } - virtual ~ns1__Application() { } + ns1__ModuleSymbolInfo() { ns1__ModuleSymbolInfo::soap_default(NULL); } + virtual ~ns1__ModuleSymbolInfo() { } }; #endif -#ifndef SOAP_TYPE_ns1__Response -#define SOAP_TYPE_ns1__Response (14) -/* ns1:Response */ -class SOAP_CMAC ns1__Response +#ifndef SOAP_TYPE_ns1__Pdb70File +#define SOAP_TYPE_ns1__Pdb70File (58) +/* ns1:Pdb70File */ +class SOAP_CMAC ns1__Pdb70File : public xsd__anyType { public: - enum ns1__ResponseType type; /* required element of type ns1:ResponseType */ - std::wstring *error; /* optional element of type xsd:string */ - class ns1__Solution *solution; /* optional element of type ns1:Solution */ - std::wstring *clientID; /* optional element of type xsd:string */ - int problemID; /* required element of type xsd:int */ - int dumpGroupID; /* required element of type xsd:int */ - int dumpID; /* required element of type xsd:int */ - std::wstring *urlToProblem; /* optional element of type xsd:string */ - enum ns1__AdditionalInfoType infoType; /* required element of type ns1:AdditionalInfoType */ - struct _xop__Include *infoModule; /* optional element of type xop:Include */ - std::wstring *infoModuleCfg; /* optional element of type xsd:string */ - struct soap *soap; /* transient */ + unsigned int age; /* required element of type xsd:unsignedInt */ + std::wstring *path; /* optional element of type xsd:string */ + std::wstring signature; /* required element of type ns3:guid */ public: - virtual int soap_type() const { return 14; } /* = unique id SOAP_TYPE_ns1__Response */ + virtual int soap_type() const { return 58; } /* = unique type id SOAP_TYPE_ns1__Pdb70File */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - ns1__Response(): error(NULL), solution(NULL), clientID(NULL), urlToProblem(NULL), infoModule(NULL), infoModuleCfg(NULL), soap(NULL) { ns1__Response::soap_default(NULL); } - virtual ~ns1__Response() { } + ns1__Pdb70File() { ns1__Pdb70File::soap_default(NULL); } + virtual ~ns1__Pdb70File() { } }; #endif -#ifndef SOAP_TYPE_ns1__Solution -#define SOAP_TYPE_ns1__Solution (15) -/* ns1:Solution */ -class SOAP_CMAC ns1__Solution +#ifndef SOAP_TYPE_ns1__Response +#define SOAP_TYPE_ns1__Response (59) +/* ns1:Response */ +class SOAP_CMAC ns1__Response : public xsd__anyType { public: - bool askConfirmation; /* required element of type xsd:boolean */ - enum ns1__SolutionType type; /* required element of type ns1:SolutionType */ - std::wstring *url; /* optional element of type xsd:string */ - struct _xop__Include *exe; /* optional element of type xop:Include */ - struct soap *soap; /* transient */ + std::wstring *clientID; /* optional element of type xsd:string */ + struct _xop__Include *context; /* optional element of type xop:Include */ + int *dumpGroupID; /* optional element of type xsd:int */ + int *dumpID; /* optional element of type xsd:int */ + struct _xop__Include *garbage; /* optional element of type xop:Include */ + int *problemID; /* optional element of type xsd:int */ + std::wstring *urlToProblem; /* optional element of type xsd:string */ public: - virtual int soap_type() const { return 15; } /* = unique id SOAP_TYPE_ns1__Solution */ + virtual int soap_type() const { return 59; } /* = unique type id SOAP_TYPE_ns1__Response */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - ns1__Solution(): url(NULL), exe(NULL), soap(NULL) { ns1__Solution::soap_default(NULL); } - virtual ~ns1__Solution() { } + ns1__Response() { ns1__Response::soap_default(NULL); } + virtual ~ns1__Response() { } }; #endif #ifndef SOAP_TYPE__ns1__Hello -#define SOAP_TYPE__ns1__Hello (16) +#define SOAP_TYPE__ns1__Hello (67) /* ns1:Hello */ class SOAP_CMAC _ns1__Hello { public: - ns1__ClientLib *client; /* optional element of type ns1:ClientLib */ + ns1__ClientLib *clientLib; /* optional element of type ns1:ClientLib */ ns1__Application *app; /* optional element of type ns1:Application */ - std::wstring *mainModule; /* optional element of type xsd:string */ + ns1__AppAdditionalInfo *appAddInfo; /* optional element of type ns1:AppAdditionalInfo */ + ns1__DumpAdditionalInfo *addInfo; /* optional element of type ns1:DumpAdditionalInfo */ + ns1__ArrayOfModuleSymbolInfo *availableSymbols; /* optional element of type ns1:ArrayOfModuleSymbolInfo */ + struct _xop__Include *stack; /* optional element of type xop:Include */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 16; } /* = unique id SOAP_TYPE__ns1__Hello */ + virtual int soap_type() const { return 67; } /* = unique type id SOAP_TYPE__ns1__Hello */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__Hello(): client(NULL), app(NULL), mainModule(NULL), soap(NULL) { _ns1__Hello::soap_default(NULL); } + _ns1__Hello() { _ns1__Hello::soap_default(NULL); } virtual ~_ns1__Hello() { } }; #endif #ifndef SOAP_TYPE__ns1__HelloResponse -#define SOAP_TYPE__ns1__HelloResponse (17) +#define SOAP_TYPE__ns1__HelloResponse (68) /* ns1:HelloResponse */ class SOAP_CMAC _ns1__HelloResponse { @@ -218,46 +859,45 @@ public: ns1__Response *HelloResult; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* optional element of type ns1:Response */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 17; } /* = unique id SOAP_TYPE__ns1__HelloResponse */ + virtual int soap_type() const { return 68; } /* = unique type id SOAP_TYPE__ns1__HelloResponse */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__HelloResponse(): HelloResult(NULL), soap(NULL) { _ns1__HelloResponse::soap_default(NULL); } + _ns1__HelloResponse() { _ns1__HelloResponse::soap_default(NULL); } virtual ~_ns1__HelloResponse() { } }; #endif #ifndef SOAP_TYPE__ns1__UploadMiniDump -#define SOAP_TYPE__ns1__UploadMiniDump (18) +#define SOAP_TYPE__ns1__UploadMiniDump (69) /* ns1:UploadMiniDump */ class SOAP_CMAC _ns1__UploadMiniDump { public: ns1__ClientLib *client; /* optional element of type ns1:ClientLib */ ns1__Application *app; /* optional element of type ns1:Application */ - std::wstring *mainModule; /* optional element of type xsd:string */ - int PCID; /* required element of type xsd:int */ - int submitterID; /* required element of type xsd:int */ + ns1__DumpAdditionalInfo *addInfo; /* optional element of type ns1:DumpAdditionalInfo */ struct _xop__Include *dump; /* optional element of type xop:Include */ + struct _xop__Include *context; /* optional element of type xop:Include */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 18; } /* = unique id SOAP_TYPE__ns1__UploadMiniDump */ + virtual int soap_type() const { return 69; } /* = unique type id SOAP_TYPE__ns1__UploadMiniDump */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__UploadMiniDump(): client(NULL), app(NULL), mainModule(NULL), dump(NULL), soap(NULL) { _ns1__UploadMiniDump::soap_default(NULL); } + _ns1__UploadMiniDump() { _ns1__UploadMiniDump::soap_default(NULL); } virtual ~_ns1__UploadMiniDump() { } }; #endif #ifndef SOAP_TYPE__ns1__UploadMiniDumpResponse -#define SOAP_TYPE__ns1__UploadMiniDumpResponse (19) +#define SOAP_TYPE__ns1__UploadMiniDumpResponse (70) /* ns1:UploadMiniDumpResponse */ class SOAP_CMAC _ns1__UploadMiniDumpResponse { @@ -265,46 +905,91 @@ public: ns1__Response *UploadMiniDumpResult; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* optional element of type ns1:Response */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 19; } /* = unique id SOAP_TYPE__ns1__UploadMiniDumpResponse */ + virtual int soap_type() const { return 70; } /* = unique type id SOAP_TYPE__ns1__UploadMiniDumpResponse */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__UploadMiniDumpResponse(): UploadMiniDumpResult(NULL), soap(NULL) { _ns1__UploadMiniDumpResponse::soap_default(NULL); } + _ns1__UploadMiniDumpResponse() { _ns1__UploadMiniDumpResponse::soap_default(NULL); } virtual ~_ns1__UploadMiniDumpResponse() { } }; #endif +#ifndef SOAP_TYPE__ns1__UploadFullDump +#define SOAP_TYPE__ns1__UploadFullDump (71) +/* ns1:UploadFullDump */ +class SOAP_CMAC _ns1__UploadFullDump +{ +public: + ns1__ClientLib *client; /* optional element of type ns1:ClientLib */ + ns1__Application *app; /* optional element of type ns1:Application */ + int *miniDumpID; /* optional element of type xsd:int */ + struct _xop__Include *dumpInZip; /* optional element of type xop:Include */ + struct _xop__Include *context; /* optional element of type xop:Include */ + struct soap *soap; /* transient */ +public: + virtual int soap_type() const { return 71; } /* = unique type id SOAP_TYPE__ns1__UploadFullDump */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + _ns1__UploadFullDump() { _ns1__UploadFullDump::soap_default(NULL); } + virtual ~_ns1__UploadFullDump() { } +}; +#endif + +#ifndef SOAP_TYPE__ns1__UploadFullDumpResponse +#define SOAP_TYPE__ns1__UploadFullDumpResponse (72) +/* ns1:UploadFullDumpResponse */ +class SOAP_CMAC _ns1__UploadFullDumpResponse +{ +public: + ns1__Response *UploadFullDumpResult; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* optional element of type ns1:Response */ + struct soap *soap; /* transient */ +public: + virtual int soap_type() const { return 72; } /* = unique type id SOAP_TYPE__ns1__UploadFullDumpResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + _ns1__UploadFullDumpResponse() { _ns1__UploadFullDumpResponse::soap_default(NULL); } + virtual ~_ns1__UploadFullDumpResponse() { } +}; +#endif + #ifndef SOAP_TYPE__ns1__UploadAdditionalInfo -#define SOAP_TYPE__ns1__UploadAdditionalInfo (20) +#define SOAP_TYPE__ns1__UploadAdditionalInfo (73) /* ns1:UploadAdditionalInfo */ class SOAP_CMAC _ns1__UploadAdditionalInfo { public: ns1__ClientLib *client; /* optional element of type ns1:ClientLib */ ns1__Application *app; /* optional element of type ns1:Application */ - std::wstring *mainModule; /* optional element of type xsd:string */ - int miniDumpID; /* required element of type xsd:int */ + int *miniDumpID; /* optional element of type xsd:int */ struct _xop__Include *info; /* optional element of type xop:Include */ - enum ns1__AdditionalInfoType infoType; /* required element of type ns1:AdditionalInfoType */ + struct _xop__Include *context; /* optional element of type xop:Include */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 20; } /* = unique id SOAP_TYPE__ns1__UploadAdditionalInfo */ + virtual int soap_type() const { return 73; } /* = unique type id SOAP_TYPE__ns1__UploadAdditionalInfo */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__UploadAdditionalInfo(): client(NULL), app(NULL), mainModule(NULL), info(NULL), soap(NULL) { _ns1__UploadAdditionalInfo::soap_default(NULL); } + _ns1__UploadAdditionalInfo() { _ns1__UploadAdditionalInfo::soap_default(NULL); } virtual ~_ns1__UploadAdditionalInfo() { } }; #endif #ifndef SOAP_TYPE__ns1__UploadAdditionalInfoResponse -#define SOAP_TYPE__ns1__UploadAdditionalInfoResponse (21) +#define SOAP_TYPE__ns1__UploadAdditionalInfoResponse (74) /* ns1:UploadAdditionalInfoResponse */ class SOAP_CMAC _ns1__UploadAdditionalInfoResponse { @@ -312,44 +997,89 @@ public: ns1__Response *UploadAdditionalInfoResult; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* optional element of type ns1:Response */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 21; } /* = unique id SOAP_TYPE__ns1__UploadAdditionalInfoResponse */ + virtual int soap_type() const { return 74; } /* = unique type id SOAP_TYPE__ns1__UploadAdditionalInfoResponse */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__UploadAdditionalInfoResponse(): UploadAdditionalInfoResult(NULL), soap(NULL) { _ns1__UploadAdditionalInfoResponse::soap_default(NULL); } + _ns1__UploadAdditionalInfoResponse() { _ns1__UploadAdditionalInfoResponse::soap_default(NULL); } virtual ~_ns1__UploadAdditionalInfoResponse() { } }; #endif +#ifndef SOAP_TYPE__ns1__RejectedToSendAdditionalInfo +#define SOAP_TYPE__ns1__RejectedToSendAdditionalInfo (75) +/* ns1:RejectedToSendAdditionalInfo */ +class SOAP_CMAC _ns1__RejectedToSendAdditionalInfo +{ +public: + ns1__ClientLib *client; /* optional element of type ns1:ClientLib */ + ns1__Application *app; /* optional element of type ns1:Application */ + int *miniDumpID; /* optional element of type xsd:int */ + struct _xop__Include *context; /* optional element of type xop:Include */ + struct soap *soap; /* transient */ +public: + virtual int soap_type() const { return 75; } /* = unique type id SOAP_TYPE__ns1__RejectedToSendAdditionalInfo */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + _ns1__RejectedToSendAdditionalInfo() { _ns1__RejectedToSendAdditionalInfo::soap_default(NULL); } + virtual ~_ns1__RejectedToSendAdditionalInfo() { } +}; +#endif + +#ifndef SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse +#define SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse (76) +/* ns1:RejectedToSendAdditionalInfoResponse */ +class SOAP_CMAC _ns1__RejectedToSendAdditionalInfoResponse +{ +public: + ns1__Response *RejectedToSendAdditionalInfoResult; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* optional element of type ns1:Response */ + struct soap *soap; /* transient */ +public: + virtual int soap_type() const { return 76; } /* = unique type id SOAP_TYPE__ns1__RejectedToSendAdditionalInfoResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + _ns1__RejectedToSendAdditionalInfoResponse() { _ns1__RejectedToSendAdditionalInfoResponse::soap_default(NULL); } + virtual ~_ns1__RejectedToSendAdditionalInfoResponse() { } +}; +#endif + #ifndef SOAP_TYPE__ns1__UploadSymbol -#define SOAP_TYPE__ns1__UploadSymbol (22) +#define SOAP_TYPE__ns1__UploadSymbol (77) /* ns1:UploadSymbol */ class SOAP_CMAC _ns1__UploadSymbol { public: ns1__ClientLib *client; /* optional element of type ns1:ClientLib */ ns1__Application *app; /* optional element of type ns1:Application */ - bool publish; /* required element of type xsd:boolean */ + bool *publish; /* optional element of type xsd:boolean */ struct _xop__Include *sym; /* optional element of type xop:Include */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 22; } /* = unique id SOAP_TYPE__ns1__UploadSymbol */ + virtual int soap_type() const { return 77; } /* = unique type id SOAP_TYPE__ns1__UploadSymbol */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__UploadSymbol(): client(NULL), app(NULL), sym(NULL), soap(NULL) { _ns1__UploadSymbol::soap_default(NULL); } + _ns1__UploadSymbol() { _ns1__UploadSymbol::soap_default(NULL); } virtual ~_ns1__UploadSymbol() { } }; #endif #ifndef SOAP_TYPE__ns1__UploadSymbolResponse -#define SOAP_TYPE__ns1__UploadSymbolResponse (23) +#define SOAP_TYPE__ns1__UploadSymbolResponse (78) /* ns1:UploadSymbolResponse */ class SOAP_CMAC _ns1__UploadSymbolResponse { @@ -357,103 +1087,262 @@ public: std::wstring *UploadSymbolResult; /* SOAP 1.2 RPC return element (when namespace qualified) */ /* optional element of type xsd:string */ struct soap *soap; /* transient */ public: - virtual int soap_type() const { return 23; } /* = unique id SOAP_TYPE__ns1__UploadSymbolResponse */ + virtual int soap_type() const { return 78; } /* = unique type id SOAP_TYPE__ns1__UploadSymbolResponse */ virtual void soap_default(struct soap*); virtual void soap_serialize(struct soap*) const; virtual int soap_put(struct soap*, const char*, const char*) const; virtual int soap_out(struct soap*, const char*, int, const char*) const; virtual void *soap_get(struct soap*, const char*, const char*); virtual void *soap_in(struct soap*, const char*, const char*); - _ns1__UploadSymbolResponse(): UploadSymbolResult(NULL), soap(NULL) { _ns1__UploadSymbolResponse::soap_default(NULL); } + _ns1__UploadSymbolResponse() { _ns1__UploadSymbolResponse::soap_default(NULL); } virtual ~_ns1__UploadSymbolResponse() { } }; #endif -#ifndef SOAP_TYPE___ns3__Hello -#define SOAP_TYPE___ns3__Hello (43) -/* Operation wrapper: */ -struct __ns3__Hello +#ifndef SOAP_TYPE_ns5__ArrayOfstring +#define SOAP_TYPE_ns5__ArrayOfstring (79) +/* ns5:ArrayOfstring */ +class SOAP_CMAC ns5__ArrayOfstring : public xsd__anyType { public: - _ns1__Hello *ns1__Hello; /* optional element of type ns1:Hello */ + std::vectorstring; /* optional element of type xsd:string */ +public: + virtual int soap_type() const { return 79; } /* = unique type id SOAP_TYPE_ns5__ArrayOfstring */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns5__ArrayOfstring() { ns5__ArrayOfstring::soap_default(NULL); } + virtual ~ns5__ArrayOfstring() { } }; #endif -#ifndef SOAP_TYPE___ns3__UploadMiniDump -#define SOAP_TYPE___ns3__UploadMiniDump (47) -/* Operation wrapper: */ -struct __ns3__UploadMiniDump +#ifndef SOAP_TYPE_ns1__StopResponse +#define SOAP_TYPE_ns1__StopResponse (60) +/* ns1:StopResponse */ +class SOAP_CMAC ns1__StopResponse : public ns1__Response { public: - _ns1__UploadMiniDump *ns1__UploadMiniDump; /* optional element of type ns1:UploadMiniDump */ + virtual int soap_type() const { return 60; } /* = unique type id SOAP_TYPE_ns1__StopResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__StopResponse() { ns1__StopResponse::soap_default(NULL); } + virtual ~ns1__StopResponse() { } }; #endif -#ifndef SOAP_TYPE___ns3__UploadAdditionalInfo -#define SOAP_TYPE___ns3__UploadAdditionalInfo (51) -/* Operation wrapper: */ -struct __ns3__UploadAdditionalInfo +#ifndef SOAP_TYPE_ns1__ErrorResponse +#define SOAP_TYPE_ns1__ErrorResponse (61) +/* ns1:ErrorResponse */ +class SOAP_CMAC ns1__ErrorResponse : public ns1__Response { public: - _ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo; /* optional element of type ns1:UploadAdditionalInfo */ + std::wstring *error; /* optional element of type xsd:string */ +public: + virtual int soap_type() const { return 61; } /* = unique type id SOAP_TYPE_ns1__ErrorResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__ErrorResponse() { ns1__ErrorResponse::soap_default(NULL); } + virtual ~ns1__ErrorResponse() { } }; #endif -#ifndef SOAP_TYPE___ns3__UploadSymbol -#define SOAP_TYPE___ns3__UploadSymbol (55) -/* Operation wrapper: */ -struct __ns3__UploadSymbol +#ifndef SOAP_TYPE_ns1__HaveSolutionResponse +#define SOAP_TYPE_ns1__HaveSolutionResponse (62) +/* ns1:HaveSolutionResponse */ +class SOAP_CMAC ns1__HaveSolutionResponse : public ns1__Response { public: - _ns1__UploadSymbol *ns1__UploadSymbol; /* optional element of type ns1:UploadSymbol */ + bool askConfirmation; /* required element of type xsd:boolean */ + struct _xop__Include *exe; /* optional element of type xop:Include */ + enum ns4__HaveSolutionResponse_SolutionType type; /* required element of type ns4:HaveSolutionResponse.SolutionType */ + std::wstring *url; /* optional element of type xsd:string */ +public: + virtual int soap_type() const { return 62; } /* = unique type id SOAP_TYPE_ns1__HaveSolutionResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__HaveSolutionResponse() { ns1__HaveSolutionResponse::soap_default(NULL); } + virtual ~ns1__HaveSolutionResponse() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse +#define SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse (63) +/* ns1:NeedSymbolsThenMiniDumpResponse */ +class SOAP_CMAC ns1__NeedSymbolsThenMiniDumpResponse : public ns1__Response +{ +public: + bool askConfirmation; /* required element of type xsd:boolean */ + ns5__ArrayOfstring *msSymbols; /* optional element of type ns5:ArrayOfstring */ + ns5__ArrayOfstring *symbols; /* optional element of type ns5:ArrayOfstring */ +public: + virtual int soap_type() const { return 63; } /* = unique type id SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__NeedSymbolsThenMiniDumpResponse() { ns1__NeedSymbolsThenMiniDumpResponse::soap_default(NULL); } + virtual ~ns1__NeedSymbolsThenMiniDumpResponse() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__NeedMiniDumpResponse +#define SOAP_TYPE_ns1__NeedMiniDumpResponse (64) +/* ns1:NeedMiniDumpResponse */ +class SOAP_CMAC ns1__NeedMiniDumpResponse : public ns1__Response +{ +public: + virtual int soap_type() const { return 64; } /* = unique type id SOAP_TYPE_ns1__NeedMiniDumpResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__NeedMiniDumpResponse() { ns1__NeedMiniDumpResponse::soap_default(NULL); } + virtual ~ns1__NeedMiniDumpResponse() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__NeedFullDumpResponse +#define SOAP_TYPE_ns1__NeedFullDumpResponse (65) +/* ns1:NeedFullDumpResponse */ +class SOAP_CMAC ns1__NeedFullDumpResponse : public ns1__Response +{ +public: + bool attachUserInfo; /* required element of type xsd:boolean */ + unsigned int restrictedDumpType; /* required element of type xsd:unsignedInt */ +public: + virtual int soap_type() const { return 65; } /* = unique type id SOAP_TYPE_ns1__NeedFullDumpResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__NeedFullDumpResponse() { ns1__NeedFullDumpResponse::soap_default(NULL); } + virtual ~ns1__NeedFullDumpResponse() { } +}; +#endif + +#ifndef SOAP_TYPE_ns1__NeedMoreInfoResponse +#define SOAP_TYPE_ns1__NeedMoreInfoResponse (66) +/* ns1:NeedMoreInfoResponse */ +class SOAP_CMAC ns1__NeedMoreInfoResponse : public ns1__Response +{ +public: + struct _xop__Include *infoModule; /* optional element of type xop:Include */ + std::wstring *infoModuleCfg; /* optional element of type xsd:string */ +public: + virtual int soap_type() const { return 66; } /* = unique type id SOAP_TYPE_ns1__NeedMoreInfoResponse */ + virtual void soap_default(struct soap*); + virtual void soap_serialize(struct soap*) const; + virtual int soap_put(struct soap*, const char*, const char*) const; + virtual int soap_out(struct soap*, const char*, int, const char*) const; + virtual void *soap_get(struct soap*, const char*, const char*); + virtual void *soap_in(struct soap*, const char*, const char*); + ns1__NeedMoreInfoResponse() { ns1__NeedMoreInfoResponse::soap_default(NULL); } + virtual ~ns1__NeedMoreInfoResponse() { } }; #endif -#ifndef SOAP_TYPE___ns4__Hello -#define SOAP_TYPE___ns4__Hello (57) +#ifndef SOAP_TYPE___ns1__Hello +#define SOAP_TYPE___ns1__Hello (110) /* Operation wrapper: */ -struct __ns4__Hello +struct __ns1__Hello { public: _ns1__Hello *ns1__Hello; /* optional element of type ns1:Hello */ +public: + int soap_type() const { return 110; } /* = unique type id SOAP_TYPE___ns1__Hello */ }; #endif -#ifndef SOAP_TYPE___ns4__UploadMiniDump -#define SOAP_TYPE___ns4__UploadMiniDump (59) +#ifndef SOAP_TYPE___ns1__UploadMiniDump +#define SOAP_TYPE___ns1__UploadMiniDump (114) /* Operation wrapper: */ -struct __ns4__UploadMiniDump +struct __ns1__UploadMiniDump { public: _ns1__UploadMiniDump *ns1__UploadMiniDump; /* optional element of type ns1:UploadMiniDump */ +public: + int soap_type() const { return 114; } /* = unique type id SOAP_TYPE___ns1__UploadMiniDump */ }; #endif -#ifndef SOAP_TYPE___ns4__UploadAdditionalInfo -#define SOAP_TYPE___ns4__UploadAdditionalInfo (61) +#ifndef SOAP_TYPE___ns1__UploadFullDump +#define SOAP_TYPE___ns1__UploadFullDump (118) /* Operation wrapper: */ -struct __ns4__UploadAdditionalInfo +struct __ns1__UploadFullDump +{ +public: + _ns1__UploadFullDump *ns1__UploadFullDump; /* optional element of type ns1:UploadFullDump */ +public: + int soap_type() const { return 118; } /* = unique type id SOAP_TYPE___ns1__UploadFullDump */ +}; +#endif + +#ifndef SOAP_TYPE___ns1__UploadAdditionalInfo +#define SOAP_TYPE___ns1__UploadAdditionalInfo (122) +/* Operation wrapper: */ +struct __ns1__UploadAdditionalInfo { public: _ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo; /* optional element of type ns1:UploadAdditionalInfo */ +public: + int soap_type() const { return 122; } /* = unique type id SOAP_TYPE___ns1__UploadAdditionalInfo */ }; #endif -#ifndef SOAP_TYPE___ns4__UploadSymbol -#define SOAP_TYPE___ns4__UploadSymbol (63) +#ifndef SOAP_TYPE___ns1__RejectedToSendAdditionalInfo +#define SOAP_TYPE___ns1__RejectedToSendAdditionalInfo (126) /* Operation wrapper: */ -struct __ns4__UploadSymbol +struct __ns1__RejectedToSendAdditionalInfo +{ +public: + _ns1__RejectedToSendAdditionalInfo *ns1__RejectedToSendAdditionalInfo; /* optional element of type ns1:RejectedToSendAdditionalInfo */ +public: + int soap_type() const { return 126; } /* = unique type id SOAP_TYPE___ns1__RejectedToSendAdditionalInfo */ +}; +#endif + +#ifndef SOAP_TYPE___ns1__UploadSymbol +#define SOAP_TYPE___ns1__UploadSymbol (130) +/* Operation wrapper: */ +struct __ns1__UploadSymbol { public: _ns1__UploadSymbol *ns1__UploadSymbol; /* optional element of type ns1:UploadSymbol */ +public: + int soap_type() const { return 130; } /* = unique type id SOAP_TYPE___ns1__UploadSymbol */ }; #endif +#ifndef WITH_NOGLOBAL + #ifndef SOAP_TYPE_SOAP_ENV__Header -#define SOAP_TYPE_SOAP_ENV__Header (64) +#define SOAP_TYPE_SOAP_ENV__Header (131) /* SOAP Header: */ struct SOAP_ENV__Header { +public: + int soap_type() const { return 131; } /* = unique type id SOAP_TYPE_SOAP_ENV__Header */ #ifdef WITH_NOEMPTYSTRUCT private: char dummy; /* dummy member to enable compilation */ @@ -461,41 +1350,63 @@ private: }; #endif +#endif + +#ifndef WITH_NOGLOBAL + #ifndef SOAP_TYPE_SOAP_ENV__Code -#define SOAP_TYPE_SOAP_ENV__Code (65) +#define SOAP_TYPE_SOAP_ENV__Code (132) /* 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 */ +public: + int soap_type() const { return 132; } /* = unique type id SOAP_TYPE_SOAP_ENV__Code */ }; #endif +#endif + +#ifndef WITH_NOGLOBAL + #ifndef SOAP_TYPE_SOAP_ENV__Detail -#define SOAP_TYPE_SOAP_ENV__Detail (67) +#define SOAP_TYPE_SOAP_ENV__Detail (134) /* SOAP-ENV:Detail */ struct SOAP_ENV__Detail { public: + char *__any; int __type; /* any type of element (defined below) */ void *fault; /* transient */ - char *__any; +public: + int soap_type() const { return 134; } /* = unique type id SOAP_TYPE_SOAP_ENV__Detail */ }; #endif +#endif + +#ifndef WITH_NOGLOBAL + #ifndef SOAP_TYPE_SOAP_ENV__Reason -#define SOAP_TYPE_SOAP_ENV__Reason (70) +#define SOAP_TYPE_SOAP_ENV__Reason (137) /* SOAP-ENV:Reason */ struct SOAP_ENV__Reason { public: char *SOAP_ENV__Text; /* optional element of type xsd:string */ +public: + int soap_type() const { return 137; } /* = unique type id SOAP_TYPE_SOAP_ENV__Reason */ }; #endif +#endif + +#ifndef WITH_NOGLOBAL + #ifndef SOAP_TYPE_SOAP_ENV__Fault -#define SOAP_TYPE_SOAP_ENV__Fault (71) +#define SOAP_TYPE_SOAP_ENV__Fault (138) /* SOAP Fault: */ struct SOAP_ENV__Fault { @@ -509,9 +1420,13 @@ public: 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 */ +public: + int soap_type() const { return 138; } /* = unique type id SOAP_TYPE_SOAP_ENV__Fault */ }; #endif +#endif + /******************************************************************************\ * * * Typedefs * @@ -528,9 +1443,54 @@ typedef char *_QName; typedef char *_XML; #endif -#ifndef SOAP_TYPE_ns2__guid -#define SOAP_TYPE_ns2__guid (29) -typedef std::wstring ns2__guid; +#ifndef SOAP_TYPE_xsd__byte +#define SOAP_TYPE_xsd__byte (16) +typedef char xsd__byte; +#endif + +#ifndef SOAP_TYPE_xsd__unsignedByte +#define SOAP_TYPE_xsd__unsignedByte (17) +typedef unsigned char xsd__unsignedByte; +#endif + +#ifndef SOAP_TYPE_xsd__ID +#define SOAP_TYPE_xsd__ID (19) +typedef std::wstring xsd__ID; +#endif + +#ifndef SOAP_TYPE_xsd__IDREF +#define SOAP_TYPE_xsd__IDREF (21) +typedef std::wstring xsd__IDREF; +#endif + +#ifndef SOAP_TYPE_xsd__anyURI +#define SOAP_TYPE_xsd__anyURI (24) +typedef std::wstring xsd__anyURI; +#endif + +#ifndef SOAP_TYPE_xsd__decimal +#define SOAP_TYPE_xsd__decimal (32) +typedef std::wstring xsd__decimal; +#endif + +#ifndef SOAP_TYPE_xsd__duration +#define SOAP_TYPE_xsd__duration (36) +typedef std::wstring xsd__duration; +#endif + +#ifndef SOAP_TYPE_ns3__char +#define SOAP_TYPE_ns3__char (80) +typedef int ns3__char; +#endif + +#ifndef SOAP_TYPE_ns3__duration +#define SOAP_TYPE_ns3__duration (82) +typedef std::wstring ns3__duration; +#endif + +#ifndef SOAP_TYPE_ns3__guid +#define SOAP_TYPE_ns3__guid (84) +typedef std::wstring ns3__guid; #endif diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.cpp deleted file mode 100644 index b4b8dfc45..000000000 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* soapUploaderSoap12Proxy.cpp - Generated by gSOAP 2.8.0 from DumpUploader.h - Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. - The generated code is released under one of the following licenses: - GPL, the gSOAP public license, or Genivia's license for commercial use. -*/ - -#include "soapUploaderSoap12Proxy.h" - -UploaderSoap12Proxy::UploaderSoap12Proxy() -{ UploaderSoap12Proxy_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); -} - -UploaderSoap12Proxy::UploaderSoap12Proxy(const struct soap &_soap) : soap(_soap) -{ } - -UploaderSoap12Proxy::UploaderSoap12Proxy(soap_mode iomode) -{ UploaderSoap12Proxy_init(iomode, iomode); -} - -UploaderSoap12Proxy::UploaderSoap12Proxy(soap_mode imode, soap_mode omode) -{ UploaderSoap12Proxy_init(imode, omode); -} - -void UploaderSoap12Proxy::UploaderSoap12Proxy_init(soap_mode imode, soap_mode omode) -{ soap_imode(this, imode); - soap_omode(this, omode); - soap_endpoint = NULL; - static const struct Namespace namespaces[] = -{ - {"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://www.w3.org/2003/05/soap-envelope", NULL}, - {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://www.w3.org/2003/05/soap-encoding", NULL}, - {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL}, - {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL}, - {"xop", "http://www.w3.org/2004/08/xop/include", NULL, NULL}, - {"ns2", "http://microsoft.com/wsdl/types/", NULL, NULL}, - {"ns3", "https://www.crash-server.com/UploaderSoap", NULL, NULL}, - {"ns1", "https://www.crash-server.com/", NULL, NULL}, - {"ns4", "https://www.crash-server.com/UploaderSoap12", NULL, NULL}, - {NULL, NULL, NULL, NULL} -}; - this->namespaces = namespaces; -} - -UploaderSoap12Proxy::~UploaderSoap12Proxy() -{ } - -void UploaderSoap12Proxy::destroy() -{ soap_destroy(this); - soap_end(this); -} - -void UploaderSoap12Proxy::soap_noheader() -{ header = NULL; -} - -const SOAP_ENV__Fault *UploaderSoap12Proxy::soap_fault() -{ return this->fault; -} - -const char *UploaderSoap12Proxy::soap_fault_string() -{ return *soap_faultstring(this); -} - -const char *UploaderSoap12Proxy::soap_fault_detail() -{ return *soap_faultdetail(this); -} - -int UploaderSoap12Proxy::soap_close_socket() -{ return soap_closesock(this); -} - -void UploaderSoap12Proxy::soap_print_fault(FILE *fd) -{ ::soap_print_fault(this, fd); -} - -#ifndef WITH_LEAN -void UploaderSoap12Proxy::soap_stream_fault(std::ostream& os) -{ ::soap_stream_fault(this, os); -} - -char *UploaderSoap12Proxy::soap_sprint_fault(char *buf, size_t len) -{ return ::soap_sprint_fault(this, buf, len); -} -#endif - -int UploaderSoap12Proxy::Hello(_ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse) -{ struct soap *soap = this; - struct __ns4__Hello soap_tmp___ns4__Hello; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/Hello"; - soap->encodingStyle = NULL; - soap_tmp___ns4__Hello.ns1__Hello = ns1__Hello; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns4__Hello(soap, &soap_tmp___ns4__Hello); - 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___ns4__Hello(soap, &soap_tmp___ns4__Hello, "-ns4:Hello", 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___ns4__Hello(soap, &soap_tmp___ns4__Hello, "-ns4:Hello", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__HelloResponse) - return soap_closesock(soap); - ns1__HelloResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__HelloResponse->soap_get(soap, "ns1:HelloResponse", ""); - 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); -} - -int UploaderSoap12Proxy::UploadMiniDump(_ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse) -{ struct soap *soap = this; - struct __ns4__UploadMiniDump soap_tmp___ns4__UploadMiniDump; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/UploadMiniDump"; - soap->encodingStyle = NULL; - soap_tmp___ns4__UploadMiniDump.ns1__UploadMiniDump = ns1__UploadMiniDump; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns4__UploadMiniDump(soap, &soap_tmp___ns4__UploadMiniDump); - 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___ns4__UploadMiniDump(soap, &soap_tmp___ns4__UploadMiniDump, "-ns4:UploadMiniDump", 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___ns4__UploadMiniDump(soap, &soap_tmp___ns4__UploadMiniDump, "-ns4:UploadMiniDump", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__UploadMiniDumpResponse) - return soap_closesock(soap); - ns1__UploadMiniDumpResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__UploadMiniDumpResponse->soap_get(soap, "ns1:UploadMiniDumpResponse", ""); - 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); -} - -int UploaderSoap12Proxy::UploadAdditionalInfo(_ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse) -{ struct soap *soap = this; - struct __ns4__UploadAdditionalInfo soap_tmp___ns4__UploadAdditionalInfo; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/UploadAdditionalInfo"; - soap->encodingStyle = NULL; - soap_tmp___ns4__UploadAdditionalInfo.ns1__UploadAdditionalInfo = ns1__UploadAdditionalInfo; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns4__UploadAdditionalInfo(soap, &soap_tmp___ns4__UploadAdditionalInfo); - 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___ns4__UploadAdditionalInfo(soap, &soap_tmp___ns4__UploadAdditionalInfo, "-ns4:UploadAdditionalInfo", 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___ns4__UploadAdditionalInfo(soap, &soap_tmp___ns4__UploadAdditionalInfo, "-ns4:UploadAdditionalInfo", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__UploadAdditionalInfoResponse) - return soap_closesock(soap); - ns1__UploadAdditionalInfoResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__UploadAdditionalInfoResponse->soap_get(soap, "ns1:UploadAdditionalInfoResponse", ""); - 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); -} - -int UploaderSoap12Proxy::UploadSymbol(_ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse) -{ struct soap *soap = this; - struct __ns4__UploadSymbol soap_tmp___ns4__UploadSymbol; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/UploadSymbol"; - soap->encodingStyle = NULL; - soap_tmp___ns4__UploadSymbol.ns1__UploadSymbol = ns1__UploadSymbol; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns4__UploadSymbol(soap, &soap_tmp___ns4__UploadSymbol); - 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___ns4__UploadSymbol(soap, &soap_tmp___ns4__UploadSymbol, "-ns4:UploadSymbol", 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___ns4__UploadSymbol(soap, &soap_tmp___ns4__UploadSymbol, "-ns4:UploadSymbol", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__UploadSymbolResponse) - return soap_closesock(soap); - ns1__UploadSymbolResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__UploadSymbolResponse->soap_get(soap, "ns1:UploadSymbolResponse", ""); - 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); -} -/* End of client proxy code */ diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.h deleted file mode 100644 index 29a71f13a..000000000 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoap12Proxy.h +++ /dev/null @@ -1,61 +0,0 @@ -/* soapUploaderSoap12Proxy.h - Generated by gSOAP 2.8.0 from DumpUploader.h - Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. - The generated code is released under one of the following licenses: - GPL, the gSOAP public license, or Genivia's license for commercial use. -*/ - -#ifndef soapUploaderSoap12Proxy_H -#define soapUploaderSoap12Proxy_H -#include "soapH.h" - -class SOAP_CMAC UploaderSoap12Proxy : public soap -{ public: - /// Endpoint URL of service 'UploaderSoap12Proxy' (change as needed) - const char *soap_endpoint; - /// Constructor - UploaderSoap12Proxy(); - /// Constructor with copy of another engine state - UploaderSoap12Proxy(const struct soap&); - /// Constructor with engine input+output mode control - UploaderSoap12Proxy(soap_mode iomode); - /// Constructor with engine input and output mode control - UploaderSoap12Proxy(soap_mode imode, soap_mode omode); - /// Destructor frees deserialized data - virtual ~UploaderSoap12Proxy(); - /// Initializer used by constructors - virtual void UploaderSoap12Proxy_init(soap_mode imode, soap_mode omode); - /// Delete all deserialized data (uses soap_destroy and soap_end) - virtual void destroy(); - /// Disables and removes SOAP Header from message - virtual void soap_noheader(); - /// Get SOAP Fault structure (NULL when absent) - virtual const SOAP_ENV__Fault *soap_fault(); - /// Get SOAP Fault string (NULL when absent) - virtual const char *soap_fault_string(); - /// Get SOAP Fault detail as string (NULL when absent) - virtual const char *soap_fault_detail(); - /// Force close connection (normally automatic, except for send_X ops) - virtual int soap_close_socket(); - /// Print fault - virtual void soap_print_fault(FILE*); -#ifndef WITH_LEAN - /// Print fault to stream - virtual void soap_stream_fault(std::ostream&); - /// Put fault into buffer - virtual char *soap_sprint_fault(char *buf, size_t len); -#endif - - /// Web service operation 'Hello' (returns error code or SOAP_OK) - virtual int Hello(_ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse); - - /// Web service operation 'UploadMiniDump' (returns error code or SOAP_OK) - virtual int UploadMiniDump(_ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse); - - /// Web service operation 'UploadAdditionalInfo' (returns error code or SOAP_OK) - virtual int UploadAdditionalInfo(_ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse); - - /// Web service operation 'UploadSymbol' (returns error code or SOAP_OK) - virtual int UploadSymbol(_ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse); -}; -#endif diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.cpp deleted file mode 100644 index a7cabaf91..000000000 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* soapUploaderSoapProxy.cpp - Generated by gSOAP 2.8.0 from DumpUploader.h - Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. - The generated code is released under one of the following licenses: - GPL, the gSOAP public license, or Genivia's license for commercial use. -*/ - -#include "soapUploaderSoapProxy.h" - -UploaderSoapProxy::UploaderSoapProxy() -{ UploaderSoapProxy_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); -} - -UploaderSoapProxy::UploaderSoapProxy(const struct soap &_soap) : soap(_soap) -{ } - -UploaderSoapProxy::UploaderSoapProxy(soap_mode iomode) -{ UploaderSoapProxy_init(iomode, iomode); -} - -UploaderSoapProxy::UploaderSoapProxy(soap_mode imode, soap_mode omode) -{ UploaderSoapProxy_init(imode, omode); -} - -void UploaderSoapProxy::UploaderSoapProxy_init(soap_mode imode, soap_mode omode) -{ soap_imode(this, imode); - soap_omode(this, omode); - soap_endpoint = NULL; - static const struct Namespace namespaces[] = -{ - {"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://www.w3.org/2003/05/soap-envelope", NULL}, - {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://www.w3.org/2003/05/soap-encoding", NULL}, - {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL}, - {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL}, - {"xop", "http://www.w3.org/2004/08/xop/include", NULL, NULL}, - {"ns2", "http://microsoft.com/wsdl/types/", NULL, NULL}, - {"ns3", "https://www.crash-server.com/UploaderSoap", NULL, NULL}, - {"ns1", "https://www.crash-server.com/", NULL, NULL}, - {"ns4", "https://www.crash-server.com/UploaderSoap12", NULL, NULL}, - {NULL, NULL, NULL, NULL} -}; - this->namespaces = namespaces; -} - -UploaderSoapProxy::~UploaderSoapProxy() -{ } - -void UploaderSoapProxy::destroy() -{ soap_destroy(this); - soap_end(this); -} - -void UploaderSoapProxy::soap_noheader() -{ header = NULL; -} - -const SOAP_ENV__Fault *UploaderSoapProxy::soap_fault() -{ return this->fault; -} - -const char *UploaderSoapProxy::soap_fault_string() -{ return *soap_faultstring(this); -} - -const char *UploaderSoapProxy::soap_fault_detail() -{ return *soap_faultdetail(this); -} - -int UploaderSoapProxy::soap_close_socket() -{ return soap_closesock(this); -} - -void UploaderSoapProxy::soap_print_fault(FILE *fd) -{ ::soap_print_fault(this, fd); -} - -#ifndef WITH_LEAN -void UploaderSoapProxy::soap_stream_fault(std::ostream& os) -{ ::soap_stream_fault(this, os); -} - -char *UploaderSoapProxy::soap_sprint_fault(char *buf, size_t len) -{ return ::soap_sprint_fault(this, buf, len); -} -#endif - -int UploaderSoapProxy::Hello(_ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse) -{ struct soap *soap = this; - struct __ns3__Hello soap_tmp___ns3__Hello; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/Hello"; - soap->encodingStyle = NULL; - soap_tmp___ns3__Hello.ns1__Hello = ns1__Hello; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns3__Hello(soap, &soap_tmp___ns3__Hello); - 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___ns3__Hello(soap, &soap_tmp___ns3__Hello, "-ns3:Hello", 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___ns3__Hello(soap, &soap_tmp___ns3__Hello, "-ns3:Hello", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__HelloResponse) - return soap_closesock(soap); - ns1__HelloResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__HelloResponse->soap_get(soap, "ns1:HelloResponse", ""); - 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); -} - -int UploaderSoapProxy::UploadMiniDump(_ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse) -{ struct soap *soap = this; - struct __ns3__UploadMiniDump soap_tmp___ns3__UploadMiniDump; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/UploadMiniDump"; - soap->encodingStyle = NULL; - soap_tmp___ns3__UploadMiniDump.ns1__UploadMiniDump = ns1__UploadMiniDump; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns3__UploadMiniDump(soap, &soap_tmp___ns3__UploadMiniDump); - 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___ns3__UploadMiniDump(soap, &soap_tmp___ns3__UploadMiniDump, "-ns3:UploadMiniDump", 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___ns3__UploadMiniDump(soap, &soap_tmp___ns3__UploadMiniDump, "-ns3:UploadMiniDump", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__UploadMiniDumpResponse) - return soap_closesock(soap); - ns1__UploadMiniDumpResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__UploadMiniDumpResponse->soap_get(soap, "ns1:UploadMiniDumpResponse", ""); - 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); -} - -int UploaderSoapProxy::UploadAdditionalInfo(_ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse) -{ struct soap *soap = this; - struct __ns3__UploadAdditionalInfo soap_tmp___ns3__UploadAdditionalInfo; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/UploadAdditionalInfo"; - soap->encodingStyle = NULL; - soap_tmp___ns3__UploadAdditionalInfo.ns1__UploadAdditionalInfo = ns1__UploadAdditionalInfo; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns3__UploadAdditionalInfo(soap, &soap_tmp___ns3__UploadAdditionalInfo); - 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___ns3__UploadAdditionalInfo(soap, &soap_tmp___ns3__UploadAdditionalInfo, "-ns3:UploadAdditionalInfo", 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___ns3__UploadAdditionalInfo(soap, &soap_tmp___ns3__UploadAdditionalInfo, "-ns3:UploadAdditionalInfo", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__UploadAdditionalInfoResponse) - return soap_closesock(soap); - ns1__UploadAdditionalInfoResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__UploadAdditionalInfoResponse->soap_get(soap, "ns1:UploadAdditionalInfoResponse", ""); - 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); -} - -int UploaderSoapProxy::UploadSymbol(_ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse) -{ struct soap *soap = this; - struct __ns3__UploadSymbol soap_tmp___ns3__UploadSymbol; - const char *soap_action = NULL; - if (!soap_endpoint) - soap_endpoint = "http://localhost:59175/DumpUploader.asmx"; - soap_action = "https://www.crash-server.com/UploadSymbol"; - soap->encodingStyle = NULL; - soap_tmp___ns3__UploadSymbol.ns1__UploadSymbol = ns1__UploadSymbol; - soap_begin(soap); - soap_serializeheader(soap); - soap_serialize___ns3__UploadSymbol(soap, &soap_tmp___ns3__UploadSymbol); - 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___ns3__UploadSymbol(soap, &soap_tmp___ns3__UploadSymbol, "-ns3:UploadSymbol", 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___ns3__UploadSymbol(soap, &soap_tmp___ns3__UploadSymbol, "-ns3:UploadSymbol", NULL) - || soap_body_end_out(soap) - || soap_envelope_end_out(soap) - || soap_end_send(soap)) - return soap_closesock(soap); - if (!ns1__UploadSymbolResponse) - return soap_closesock(soap); - ns1__UploadSymbolResponse->soap_default(soap); - if (soap_begin_recv(soap) - || soap_envelope_begin_in(soap) - || soap_recv_header(soap) - || soap_body_begin_in(soap)) - return soap_closesock(soap); - ns1__UploadSymbolResponse->soap_get(soap, "ns1:UploadSymbolResponse", ""); - 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); -} -/* End of client proxy code */ diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.h deleted file mode 100644 index 9343019dd..000000000 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/generated/soapUploaderSoapProxy.h +++ /dev/null @@ -1,61 +0,0 @@ -/* soapUploaderSoapProxy.h - Generated by gSOAP 2.8.0 from DumpUploader.h - Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved. - The generated code is released under one of the following licenses: - GPL, the gSOAP public license, or Genivia's license for commercial use. -*/ - -#ifndef soapUploaderSoapProxy_H -#define soapUploaderSoapProxy_H -#include "soapH.h" - -class SOAP_CMAC UploaderSoapProxy : public soap -{ public: - /// Endpoint URL of service 'UploaderSoapProxy' (change as needed) - const char *soap_endpoint; - /// Constructor - UploaderSoapProxy(); - /// Constructor with copy of another engine state - UploaderSoapProxy(const struct soap&); - /// Constructor with engine input+output mode control - UploaderSoapProxy(soap_mode iomode); - /// Constructor with engine input and output mode control - UploaderSoapProxy(soap_mode imode, soap_mode omode); - /// Destructor frees deserialized data - virtual ~UploaderSoapProxy(); - /// Initializer used by constructors - virtual void UploaderSoapProxy_init(soap_mode imode, soap_mode omode); - /// Delete all deserialized data (uses soap_destroy and soap_end) - virtual void destroy(); - /// Disables and removes SOAP Header from message - virtual void soap_noheader(); - /// Get SOAP Fault structure (NULL when absent) - virtual const SOAP_ENV__Fault *soap_fault(); - /// Get SOAP Fault string (NULL when absent) - virtual const char *soap_fault_string(); - /// Get SOAP Fault detail as string (NULL when absent) - virtual const char *soap_fault_detail(); - /// Force close connection (normally automatic, except for send_X ops) - virtual int soap_close_socket(); - /// Print fault - virtual void soap_print_fault(FILE*); -#ifndef WITH_LEAN - /// Print fault to stream - virtual void soap_stream_fault(std::ostream&); - /// Put fault into buffer - virtual char *soap_sprint_fault(char *buf, size_t len); -#endif - - /// Web service operation 'Hello' (returns error code or SOAP_OK) - virtual int Hello(_ns1__Hello *ns1__Hello, _ns1__HelloResponse *ns1__HelloResponse); - - /// Web service operation 'UploadMiniDump' (returns error code or SOAP_OK) - virtual int UploadMiniDump(_ns1__UploadMiniDump *ns1__UploadMiniDump, _ns1__UploadMiniDumpResponse *ns1__UploadMiniDumpResponse); - - /// Web service operation 'UploadAdditionalInfo' (returns error code or SOAP_OK) - virtual int UploadAdditionalInfo(_ns1__UploadAdditionalInfo *ns1__UploadAdditionalInfo, _ns1__UploadAdditionalInfoResponse *ns1__UploadAdditionalInfoResponse); - - /// Web service operation 'UploadSymbol' (returns error code or SOAP_OK) - virtual int UploadSymbol(_ns1__UploadSymbol *ns1__UploadSymbol, _ns1__UploadSymbolResponse *ns1__UploadSymbolResponse); -}; -#endif diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet-2.8.0.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet-2.8.0.cpp deleted file mode 100644 index b47d6def3..000000000 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet-2.8.0.cpp +++ /dev/null @@ -1,1185 +0,0 @@ -/* -See the header file for details. This file is distributed under the MIT licence. -*/ - -/* system */ -#include -#include -#include - -/* gsoap */ -#include - -/* local */ -#include "gsoapWinInet.h" - -/* ensure that the wininet library is linked */ -#pragma comment( lib, "wininet.lib" ) -/* disable deprecation warnings */ -#pragma warning(disable : 4996) - -#define UNUSED_ARG(x) (x) -#define INVALID_BUFFER_LENGTH ((DWORD)-1) - -/* plugin id */ -static const char wininet_id[] = "wininet-2.0"; - -/* plugin private data */ -struct wininet_data -{ - HINTERNET hInternet; /* internet session handle */ - HINTERNET hConnection; /* current connection handle */ - BOOL bDisconnect; /* connection is disconnected */ - DWORD dwRequestFlags; /* extra request flags from user */ - char * pBuffer; /* send buffer */ - size_t uiBufferLenMax; /* total length of the message */ - size_t uiBufferLen; /* length of data in buffer */ - BOOL bIsChunkSize; /* expecting a chunk size buffer */ - wininet_rse_callback pRseCallback; /* wininet_resolve_send_error callback. Allows clients to resolve ssl errors programatically */ -#ifdef SOAP_DEBUG - /* this is only used for DBGLOG output */ - char * pszErrorMessage; /* wininet/system error message */ -#endif -}; - -/* forward declarations */ -static BOOL -wininet_init( - struct soap * soap, - struct wininet_data * a_pData, - DWORD a_dwRequestFlags ); -static int -wininet_copy( - struct soap * soap, - struct soap_plugin * a_pDst, - struct soap_plugin * a_pSrc ); -static void -wininet_delete( - struct soap * soap, - struct soap_plugin * a_pPluginData ); -static SOAP_SOCKET -wininet_connect( - struct soap * soap, - const char * a_pszEndpoint, - const char * a_pszHost, - int a_nPort ); -static int -wininet_post_header( - struct soap * soap, - const char * a_pszKey, - const char * a_pszValue ); -static int -wininet_fsend( - struct soap * soap, - const char * a_pBuffer, - size_t a_uiBufferLen ); -static size_t -wininet_frecv( - struct soap * soap, - char * a_pBuffer, - size_t a_uiBufferLen ); -static int -wininet_disconnect( - struct soap * soap ); -void CALLBACK -wininet_callback( - HINTERNET hInternet, - DWORD_PTR dwContext, - DWORD dwInternetStatus, - LPVOID lpvStatusInformation, - DWORD dwStatusInformationLength ); -static BOOL -wininet_have_connection( - struct soap * soap, - struct wininet_data * a_pData ); -static DWORD -wininet_set_timeout( - struct soap * soap, - struct wininet_data * a_pData, - const char * a_pszTimeout, - DWORD a_dwOption, - int a_nTimeout ); -static BOOL -wininet_resolve_send_error( - HINTERNET a_hHttpRequest, - DWORD a_dwErrorCode ); - -#ifdef SOAP_DEBUG -/* this is only used for DBGLOG output */ -static const char * -wininet_error_message( - struct soap * a_pData, - DWORD a_dwErrorMsgId ); -static void -wininet_free_error_message( - struct wininet_data * a_pData ); -#else -#define wininet_free_error_message(x) -#endif - -/* plugin registration */ -int -wininet_plugin( - struct soap * soap, - struct soap_plugin * a_pPluginData, - void * a_dwRequestFlags ) -{ - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: plugin registration\n", soap )); - - a_pPluginData->id = wininet_id; - a_pPluginData->fcopy = wininet_copy; - a_pPluginData->fdelete = wininet_delete; - a_pPluginData->data = (void*) malloc( sizeof(struct wininet_data) ); - if ( !a_pPluginData->data ) - { - return SOAP_EOM; - } - if ( !wininet_init( soap, - (struct wininet_data *) a_pPluginData->data, - (DWORD) (size_t) a_dwRequestFlags ) ) - { - free( a_pPluginData->data ); - return SOAP_EOM; - } - -#ifdef SOAP_DEBUG - if ( (soap->omode & SOAP_IO) == SOAP_IO_STORE ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: use of SOAP_IO_STORE is not recommended\n", soap )); - } -#endif - - return SOAP_OK; -} - -/* initialize private data */ -static BOOL -wininet_init( - struct soap * soap, - struct wininet_data * a_pData, - DWORD a_dwRequestFlags ) -{ - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: init private data\n", soap )); - - memset( a_pData, 0, sizeof(struct wininet_data) ); - a_pData->dwRequestFlags = a_dwRequestFlags; - - /* start our internet session */ - a_pData->hInternet = InternetOpenA( - "gSOAP", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 ); - if ( !a_pData->hInternet ) - { - soap->error = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: init, error %d (%s) in InternetOpen\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - wininet_free_error_message( a_pData ); - return FALSE; - } - - /* set the timeouts, if any of these fail the error isn't fatal */ - wininet_set_timeout( soap, a_pData, "connect", - INTERNET_OPTION_CONNECT_TIMEOUT, soap->connect_timeout ); - wininet_set_timeout( soap, a_pData, "receive", - INTERNET_OPTION_RECEIVE_TIMEOUT, soap->recv_timeout ); - wininet_set_timeout( soap, a_pData, "send", - INTERNET_OPTION_SEND_TIMEOUT, soap->send_timeout ); - - /* set up the callback function so we get notifications */ - InternetSetStatusCallback( a_pData->hInternet, wininet_callback ); - - /* set all of our callbacks */ - soap->fopen = wininet_connect; - soap->fposthdr = wininet_post_header; - soap->fsend = wininet_fsend; - soap->frecv = wininet_frecv; - soap->fclose = wininet_disconnect; - - return TRUE; -} - -void -wininet_set_rse_callback( - struct soap * soap, - wininet_rse_callback a_pRsecallback) -{ - struct wininet_data * pData = (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: resolve_send_error callback = '%p'\n", soap, a_pRsecallback )); - - pData->pRseCallback = a_pRsecallback; -} - - -/* copy the private data structure */ -static int -wininet_copy( - struct soap * soap, - struct soap_plugin * a_pDst, - struct soap_plugin * a_pSrc ) -{ - UNUSED_ARG( soap ); - UNUSED_ARG( a_pDst ); - UNUSED_ARG( a_pSrc ); - - _ASSERTE( !"wininet doesn't support copy" ); - return SOAP_FATAL_ERROR; -} - -/* deallocate of our private structure */ -static void -wininet_delete( - struct soap * soap, - struct soap_plugin * a_pPluginData ) -{ - struct wininet_data * pData = - (struct wininet_data *) a_pPluginData->data; - - UNUSED_ARG( soap ); - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: delete private data\n", soap )); - - /* force a disconnect of any existing connection */ - pData->bDisconnect = TRUE; - wininet_have_connection( soap, pData ); - - /* close down the internet */ - if ( pData->hInternet ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: closing internet handle\n", soap)); - InternetCloseHandle( pData->hInternet ); - pData->hInternet = NULL; - } - - /* free our data */ - wininet_free_error_message( pData ); - free( a_pPluginData->data ); -} - -/* gsoap documentation: - Called from a client proxy to open a connection to a Web Service located - at endpoint. Input parameters host and port are micro-parsed from endpoint. - Should return a valid file descriptor, or SOAP_INVALID_SOCKET and - soap->error set to an error code. Built-in gSOAP function: tcp_connect -*/ -static SOAP_SOCKET -wininet_connect( - struct soap * soap, - const char * a_pszEndpoint, - const char * a_pszHost, - int a_nPort ) -{ - URL_COMPONENTSA urlComponents; - char szUrlPath[MAX_PATH]; - char szHost[MAX_PATH]; - DWORD dwFlags; - HINTERNET hConnection = NULL; - HINTERNET hHttpRequest = NULL; - struct wininet_data * pData = - (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - - soap->error = SOAP_OK; - - /* we parse the URL ourselves so we don't use these parameters */ - UNUSED_ARG( a_pszHost ); - UNUSED_ARG( a_nPort ); - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: connect, endpoint = '%s'\n", soap, a_pszEndpoint )); - - /* we should be initialized but not connected */ - _ASSERTE( pData->hInternet ); - _ASSERTE( !pData->hConnection ); - _ASSERTE( soap->socket == SOAP_INVALID_SOCKET ); - - /* parse out the url path */ - memset( &urlComponents, 0, sizeof(urlComponents) ); - urlComponents.dwStructSize = sizeof(urlComponents); - urlComponents.lpszHostName = szHost; - urlComponents.dwHostNameLength = MAX_PATH; - urlComponents.lpszUrlPath = szUrlPath; - urlComponents.dwUrlPathLength = MAX_PATH; - if ( !InternetCrackUrlA( a_pszEndpoint, 0, 0, &urlComponents ) ) - { - InternetCloseHandle( hConnection ); - soap->error = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: connect, error %d (%s) in InternetCrackUrl\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - return SOAP_INVALID_SOCKET; - } - - /* connect to the target url, if we haven't connected yet - or if it was dropped */ - hConnection = InternetConnectA( pData->hInternet, - szHost, urlComponents.nPort, "", "", INTERNET_SERVICE_HTTP, - 0, (DWORD_PTR) soap ); - if ( !hConnection ) - { - soap->error = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: connect, error %d (%s) in InternetConnect\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - return SOAP_INVALID_SOCKET; - } - - /* - Note that although we specify HTTP/1.1 for the connection here, the - actual connection may be HTTP/1.0 depending on the settings in the - control panel. See the "Internet Options", "HTTP 1.1 settings". - */ - dwFlags = pData->dwRequestFlags; - if ( soap->omode & SOAP_IO_KEEPALIVE ) - { - dwFlags |= INTERNET_FLAG_KEEP_CONNECTION; - } - if ( urlComponents.nScheme == INTERNET_SCHEME_HTTPS ) - { - dwFlags |= INTERNET_FLAG_SECURE; - } - hHttpRequest = HttpOpenRequestA( - hConnection, "POST", szUrlPath, "HTTP/1.1", NULL, NULL, - dwFlags, (DWORD_PTR) soap ); - if ( !hHttpRequest ) - { - InternetCloseHandle( hConnection ); - soap->error = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: connect, error %d (%s) in HttpOpenRequest\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - return SOAP_INVALID_SOCKET; - } - - /* save the connection handle in our data structure */ - pData->hConnection = hConnection; - - /* return the http request handle as our file descriptor. */ - _ASSERTE( sizeof(soap->socket) >= sizeof(HINTERNET) ); - return (SOAP_SOCKET) hHttpRequest; -} - -/* gsoap documentation: - Called by http_post and http_response (through the callbacks). Emits HTTP - key: val header entries. Should return SOAP_OK, or a gSOAP error code. - Built-in gSOAP function: http_post_header. - */ -static int -wininet_post_header( - struct soap * soap, - const char * a_pszKey, - const char * a_pszValue ) -{ - HINTERNET hHttpRequest = (HINTERNET) soap->socket; - char szHeader[4096]; - int nLen; - BOOL bResult = FALSE; - struct wininet_data * pData = - (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - - soap->error = SOAP_OK; - - /* ensure that our connection hasn't been disconnected */ - if ( !wininet_have_connection( soap, pData ) ) - { - return SOAP_EOF; - } - - /* if this is the initial POST header then we initialize our send buffer */ - if ( a_pszKey && !a_pszValue ) - { - _ASSERTE( !pData->pBuffer ); - pData->uiBufferLenMax = INVALID_BUFFER_LENGTH; - pData->uiBufferLen = 0; - - /* if we are using chunk output then we start with a chunk size */ - pData->bIsChunkSize = ( (soap->omode & SOAP_IO) == SOAP_IO_CHUNK ); - } - else if ( a_pszValue ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: post_header, adding '%s: %s'\n", - soap, a_pszKey, a_pszValue )); - - /* determine the maximum length of this message so that we can - correctly determine when we have completed the send */ - if ( !strcmp( a_pszKey, "Content-Length" ) ) - { - _ASSERTE( pData->uiBufferLenMax == INVALID_BUFFER_LENGTH ); - pData->uiBufferLenMax = strtoul( a_pszValue, NULL, 10 ); - } - - nLen = _snprintf( - szHeader, 4096, "%s: %s\r\n", a_pszKey, a_pszValue ); - if ( nLen < 0 ) - { - return SOAP_EOM; - } - bResult = HttpAddRequestHeadersA( hHttpRequest, szHeader, nLen, - HTTP_ADDREQ_FLAG_ADD_IF_NEW ); -#ifdef SOAP_DEBUG - /* - we don't return an error if this fails because it isn't - (or shouldn't be) critical. - */ - if ( !bResult ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: post_header, error %d (%s) in HttpAddRequestHeaders\n", - soap, soap->error, wininet_error_message(soap,GetLastError()) )); - } -#endif - } - return SOAP_OK; -} - -/* gsoap documentation: - Called for all send operations to emit contents of s of length n. - Should return SOAP_OK, or a gSOAP error code. Built-in gSOAP - function: fsend - - Notes: - I do a heap of buffering here because we need the entire message available - in a single buffer in order to iterate through the sending loop. I had - hoped that the SOAP_IO_STORE flag would have worked to do the same, however - this still breaks the messages up into blocks. Although there were a number - of ways this could've been implemented, this works and supports all of the - possible SOAP_IO flags, even though the entire message is still buffered - the same as if SOAP_IO_STORE was used. -*/ -static int -wininet_fsend( - struct soap * soap, - const char * a_pBuffer, - size_t a_uiBufferLen ) -{ - HINTERNET hHttpRequest = (HINTERNET) soap->socket; - BOOL bResult; - BOOL bRetryPost; - DWORD dwStatusCode; - DWORD dwStatusCodeLen; - int nResult = SOAP_OK; - struct wininet_data * pData = - (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - - soap->error = SOAP_OK; - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, data len = %lu bytes\n", soap, a_uiBufferLen )); - - /* allow the request to be sent with a NULL buffer */ - if (a_uiBufferLen == 0) - { - pData->uiBufferLenMax = 0; - } - - /* ensure that our connection hasn't been disconnected */ - if ( !wininet_have_connection( soap, pData ) ) - { - return SOAP_EOF; - } - - /* initialize on our first time through. pData->pBuffer will always be - non-null if this is not the first call. */ - if ( !pData->pBuffer ) - { - /* - If we are using chunked sending, then we don't know how big the - buffer will need to be. So we start with a 0 length buffer and - grow it later to ensure that it is always large enough. - - uiBufferLenMax = length of the allocated memory - uiBufferLen = length of the data in the buffer - */ - if ( (soap->mode & SOAP_IO) == SOAP_IO_CHUNK ) - { - /* we make the initial allocation large enough for this chunksize - buffer, plus the next chunk of actual data, and a few extra - bytes for the final "0" chunksize block. */ - size_t uiChunkSize = strtoul( a_pBuffer, NULL, 16 ); - pData->uiBufferLenMax = uiChunkSize + a_uiBufferLen + 16; - } - else if ( a_uiBufferLen == pData->uiBufferLenMax ) - { - /* - If the currently supplied buffer from gsoap holds the entire - message then we just use their buffer and avoid any memory - allocation. This will only be true when (1) we are not using - chunked send (so uiBufferLenMax has been previously set to - the Content-Length header length), and (2) gsoap is sending - the entire message at one time. - */ - pData->pBuffer = (char *) a_pBuffer; - pData->uiBufferLen = a_uiBufferLen; - } - - _ASSERTE( pData->uiBufferLenMax != INVALID_BUFFER_LENGTH ); - } - - /* - If we can't use the gsoap buffer, then we need to allocate our own - buffer for the entire message. This is because authentication may - require the entire message to be sent multiple times. Since this send - is only a part of the message, we need to buffer until we have the - entire message. - */ - if ( pData->pBuffer != a_pBuffer ) - { - /* - We already have a buffer pointer, this means that it isn't the - first time we have been called. We have allocated a buffer and - are current filling it. - - If we don't have enough room in the our buffer to add this new - data, then we need to reallocate. This case will only occur with - chunked sends. - */ - size_t uiNewBufferLen = pData->uiBufferLen + a_uiBufferLen; - if ( !pData->pBuffer || uiNewBufferLen > pData->uiBufferLenMax ) - { - while ( uiNewBufferLen > pData->uiBufferLenMax ) - { - pData->uiBufferLenMax = pData->uiBufferLenMax * 2; - } - pData->pBuffer = (char *) realloc( pData->pBuffer, pData->uiBufferLenMax ); - if ( !pData->pBuffer ) - { - return SOAP_EOM; - } - } - memcpy( pData->pBuffer + pData->uiBufferLen, - a_pBuffer, a_uiBufferLen ); - pData->uiBufferLen = uiNewBufferLen; - - /* if we are doing chunked transfers, and this is a chunk size block, - and it is "0", then this is the last block in the transfer and we - can set the maximum size now to continue to the actual send. */ - if ( (soap->mode & SOAP_IO) == SOAP_IO_CHUNK - && pData->bIsChunkSize - && a_pBuffer[2] == '0' && !isalnum(a_pBuffer[3]) ) - { - pData->uiBufferLenMax = pData->uiBufferLen; - } - } - - /* if we haven't got the entire length of the message yet, then - we return to gsoap and let it continue */ - if ( pData->uiBufferLen < pData->uiBufferLenMax ) - { - /* toggle our chunk size marker if we are chunking */ - pData->bIsChunkSize = - ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) - && !pData->bIsChunkSize; - return SOAP_OK; - } - _ASSERTE( pData->uiBufferLen == pData->uiBufferLenMax ); - - /* we've now got the entire message, now we can enter our sending loop */ - bRetryPost = TRUE; - while ( bRetryPost ) - { - bRetryPost = FALSE; - - bResult = HttpSendRequestA( - hHttpRequest, NULL, 0, pData->pBuffer, (DWORD)pData->uiBufferLen ); - if ( !bResult ) - { - soap->error = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, error %d (%s) in HttpSendRequest\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - - /* see if we can handle this error, see the MSDN documentation - for InternetErrorDlg for details */ - switch ( soap->error ) - { - case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: - case ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR: - case ERROR_INTERNET_INCORRECT_PASSWORD: - case ERROR_INTERNET_INVALID_CA: - case ERROR_INTERNET_POST_IS_NON_SECURE: - case ERROR_INTERNET_SEC_CERT_CN_INVALID: - case ERROR_INTERNET_SEC_CERT_DATE_INVALID: - case ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED: - { - wininet_rseReturn errorResolved = rseDisplayDlg; - if (pData->pRseCallback) - { - errorResolved = pData->pRseCallback(hHttpRequest, soap->error); - } - if (errorResolved == rseDisplayDlg) - { - errorResolved = (wininet_rseReturn) - wininet_resolve_send_error( hHttpRequest, soap->error ); - if ( errorResolved == rseTrue ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, error %d has been resolved\n", - soap, soap->error )); - bRetryPost = TRUE; - - /* - we would have been disconnected by the error. Since we - are going to try again, we will automatically be - reconnected. Therefore we want to disregard any - previous disconnection messages. - */ - pData->bDisconnect = FALSE; - continue; - } - } - } - break; - } - - /* if the error wasn't handled then we exit */ - nResult = SOAP_HTTP_ERROR; - break; - } - - /* get the status code from the response to determine if we need - to authorize */ - dwStatusCodeLen = sizeof(dwStatusCode); - bResult = HttpQueryInfo( - hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, - &dwStatusCode, &dwStatusCodeLen, NULL); - if ( !bResult ) - { - soap->error = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, error %d (%s) in HttpQueryInfo\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - nResult = SOAP_HTTP_ERROR; - break; - } - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, HTTP status code = %lu\n", - soap, dwStatusCode)); - - /* - if we need authentication, then request the user for the - appropriate data. Their reply is saved into the request so - that we can use it later. - */ - switch ( dwStatusCode ) - { - case HTTP_STATUS_DENIED: - case HTTP_STATUS_PROXY_AUTH_REQ: - { - wininet_rseReturn errorResolved = rseDisplayDlg; - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, user authenication required\n", - soap )); - if (pData->pRseCallback) - { - errorResolved = pData->pRseCallback(hHttpRequest, dwStatusCode); - } - if (errorResolved == rseDisplayDlg) - { - errorResolved = (wininet_rseReturn) - wininet_resolve_send_error( hHttpRequest, ERROR_INTERNET_INCORRECT_PASSWORD ); - } - if ( errorResolved == rseTrue ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, authentication has been provided\n", - soap )); - - /* - we may have been disconnected by the error. Since we - are going to try again, we will automatically be - reconnected. Therefore we want to disregard any previous - disconnection messages. - */ - pData->bDisconnect = FALSE; - bRetryPost = TRUE; - continue; - } - } - break; - } - } - - /* if we have an allocated buffer then we can deallocate it now */ - if ( pData->pBuffer != a_pBuffer ) - { - free( pData->pBuffer ); - } - - pData->pBuffer = 0; - pData->uiBufferLen = 0; - pData->uiBufferLenMax = INVALID_BUFFER_LENGTH; - - return nResult; -} - -/* gsoap documentation: - Called for all receive operations to fill buffer s of maximum length n. - Should return the number of bytes read or 0 in case of an error, e.g. EOF. - Built-in gSOAP function: frecv - */ -static size_t -wininet_frecv( - struct soap * soap, - char * a_pBuffer, - size_t a_uiBufferLen ) -{ - HINTERNET hHttpRequest = (HINTERNET) soap->socket; - DWORD dwBytesRead = 0; - size_t uiTotalBytesRead = 0; - BOOL bResult; - - soap->error = SOAP_OK; - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: frecv, available buffer len = %lu\n", - soap, a_uiBufferLen )); - - /* - NOTE: we do not check here that our connection hasn't been - disconnected because in HTTP/1.0 connections, it will always have been - disconnected by now. This is because the response is checked by the - wininet_fsend function to ensure that we didn't need any special - authentication. At that time the connection would have been - disconnected. This is okay however as we can still read the response - from the request handle. - */ - - do - { - /* read from the connection up to our maximum amount of data */ - _ASSERTE( a_uiBufferLen <= ULONG_MAX ); - bResult = InternetReadFile( - hHttpRequest, - &a_pBuffer[uiTotalBytesRead], - (DWORD) a_uiBufferLen - uiTotalBytesRead, - &dwBytesRead ); - if ( bResult ) - { - uiTotalBytesRead += dwBytesRead; - } - else - { - soap->error = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: frecv, error %d (%s) in InternetReadFile\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - } - } - while ( bResult && dwBytesRead && uiTotalBytesRead < a_uiBufferLen ); - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: recv, received %lu bytes\n", soap, uiTotalBytesRead )); - - return uiTotalBytesRead; -} - -/* gsoap documentation: - Called by client proxy multiple times, to close a socket connection before - a new socket connection is established and at the end of communications - when the SOAP_IO_KEEPALIVE flag is not set and soap.keep_alive = 0 - (indicating that the other party supports keep alive). Should return - SOAP_OK, or a gSOAP error code. Built-in gSOAP function: tcp_disconnect - */ -static int -wininet_disconnect( - struct soap * soap ) -{ - struct wininet_data * pData = - (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - - soap->error = SOAP_OK; - - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: disconnect\n", soap )); - - /* force a disconnect by setting the disconnect flag to TRUE */ - pData->bDisconnect = TRUE; - wininet_have_connection( soap, pData ); - - return SOAP_OK; -} - -/* this is mostly for debug tracing */ -void CALLBACK -wininet_callback( - HINTERNET hInternet, - DWORD_PTR dwContext, - DWORD dwInternetStatus, - LPVOID lpvStatusInformation, - DWORD dwStatusInformationLength ) -{ - struct soap * soap = (struct soap *) dwContext; - - UNUSED_ARG( hInternet ); - UNUSED_ARG( lpvStatusInformation ); - UNUSED_ARG( dwStatusInformationLength ); - - switch ( dwInternetStatus ) - { - case INTERNET_STATUS_RESOLVING_NAME: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_RESOLVING_NAME\n", soap )); - break; - case INTERNET_STATUS_NAME_RESOLVED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_NAME_RESOLVED\n", soap )); - break; - case INTERNET_STATUS_CONNECTING_TO_SERVER: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_CONNECTING_TO_SERVER\n", soap)); - break; - case INTERNET_STATUS_CONNECTED_TO_SERVER: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_CONNECTED_TO_SERVER\n", soap)); - break; - case INTERNET_STATUS_SENDING_REQUEST: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_SENDING_REQUEST\n", soap)); - break; - case INTERNET_STATUS_REQUEST_SENT: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_REQUEST_SENT, bytes sent = %lu\n", - soap, *(DWORD *)lpvStatusInformation )); - break; - case INTERNET_STATUS_RECEIVING_RESPONSE: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_RECEIVING_RESPONSE\n", soap)); - break; - case INTERNET_STATUS_RESPONSE_RECEIVED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_RESPONSE_RECEIVED, bytes received = %lu\n", - soap, *(DWORD *)lpvStatusInformation )); - break; - case INTERNET_STATUS_CTL_RESPONSE_RECEIVED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_CTL_RESPONSE_RECEIVED\n", soap)); - break; - case INTERNET_STATUS_PREFETCH: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_PREFETCH\n", soap)); - break; - case INTERNET_STATUS_CLOSING_CONNECTION: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_CLOSING_CONNECTION\n", soap)); - break; - case INTERNET_STATUS_CONNECTION_CLOSED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_CONNECTION_CLOSED\n", soap)); - { - /* the connection has been closed, so we close the handle here */ - struct wininet_data * pData = - (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - if ( pData->hConnection ) - { - /* - we only mark this for disconnection otherwise we get - errors when reading the data from the handle. In every - function that we use the connection we will check first to - see if it has been disconnected. - */ - pData->bDisconnect = TRUE; - } - } - break; - case INTERNET_STATUS_HANDLE_CREATED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_HANDLE_CREATED\n", soap)); - break; - case INTERNET_STATUS_HANDLE_CLOSING: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_HANDLE_CLOSING\n", soap)); - break; -#ifdef INTERNET_STATUS_DETECTING_PROXY - case INTERNET_STATUS_DETECTING_PROXY: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_DETECTING_PROXY\n", soap)); - break; -#endif - case INTERNET_STATUS_REQUEST_COMPLETE: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_REQUEST_COMPLETE\n", soap)); - break; - case INTERNET_STATUS_REDIRECT: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_REDIRECT, new url = %s\n", - soap, (char*) lpvStatusInformation )); - break; - case INTERNET_STATUS_INTERMEDIATE_RESPONSE: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_INTERMEDIATE_RESPONSE\n", soap)); - break; -#ifdef INTERNET_STATUS_USER_INPUT_REQUIRED - case INTERNET_STATUS_USER_INPUT_REQUIRED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_USER_INPUT_REQUIRED\n", soap)); - break; -#endif - case INTERNET_STATUS_STATE_CHANGE: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_STATE_CHANGE\n", soap)); - break; -#ifdef INTERNET_STATUS_COOKIE_SENT - case INTERNET_STATUS_COOKIE_SENT: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_COOKIE_SENT\n", soap)); - break; -#endif -#ifdef INTERNET_STATUS_COOKIE_RECEIVED - case INTERNET_STATUS_COOKIE_RECEIVED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_COOKIE_RECEIVED\n", soap)); - break; -#endif -#ifdef INTERNET_STATUS_PRIVACY_IMPACTED - case INTERNET_STATUS_PRIVACY_IMPACTED: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_PRIVACY_IMPACTED\n", soap)); - break; -#endif -#ifdef INTERNET_STATUS_P3P_HEADER - case INTERNET_STATUS_P3P_HEADER: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_P3P_HEADER\n", soap)); - break; -#endif -#ifdef INTERNET_STATUS_P3P_POLICYREF - case INTERNET_STATUS_P3P_POLICYREF: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_P3P_POLICYREF\n", soap)); - break; -#endif -#ifdef INTERNET_STATUS_COOKIE_HISTORY - case INTERNET_STATUS_COOKIE_HISTORY: - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: INTERNET_STATUS_COOKIE_HISTORY\n", soap)); - break; -#endif - } -} - -/* - check to ensure that our connection hasn't been disconnected - and disconnect remaining handles if necessary. - */ -static BOOL -wininet_have_connection( - struct soap * soap, - struct wininet_data * a_pData ) -{ - /* close the http request if we don't have a connection */ - BOOL bCloseRequest = a_pData->bDisconnect || !a_pData->hConnection; - if ( bCloseRequest && soap->socket != SOAP_INVALID_SOCKET ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: closing request\n", soap)); - - InternetCloseHandle( (HINTERNET) soap->socket ); - soap->socket = SOAP_INVALID_SOCKET; - } - - /* close the connection if we don't have a request */ - if ( soap->socket == SOAP_INVALID_SOCKET && a_pData->hConnection ) - { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: closing connection\n", soap)); - - InternetCloseHandle( a_pData->hConnection ); - a_pData->hConnection = NULL; - } - a_pData->bDisconnect = FALSE; - - /* clean up the send details if we don't have a request */ - if ( soap->socket == SOAP_INVALID_SOCKET ) - { - if ( a_pData->pBuffer ) - { - free( a_pData->pBuffer ); - a_pData->pBuffer = 0; - } - a_pData->uiBufferLen = 0; - a_pData->uiBufferLenMax = INVALID_BUFFER_LENGTH; - } - - /* we now either still have both request and connection, or neither */ - return (a_pData->hConnection != NULL); -} - -static DWORD -wininet_set_timeout( - struct soap * soap, - struct wininet_data * a_pData, - const char * a_pszTimeout, - DWORD a_dwOption, - int a_nTimeout ) -{ - UNUSED_ARG( soap ); - UNUSED_ARG( a_pszTimeout ); - - if ( a_nTimeout > 0 ) - { - DWORD dwTimeout = a_nTimeout * 1000; - if ( !InternetSetOption( a_pData->hInternet, - a_dwOption, &dwTimeout, sizeof(DWORD) ) ) - { - DWORD dwErrorCode = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: failed to set %s timeout, error %d (%s)\n", - soap, a_pszTimeout, dwErrorCode, - wininet_error_message(soap,dwErrorCode) )); - return dwErrorCode; - } - } - return 0; -} - -/* -static BOOL -wininet_flag_set_option( - HINTERNET a_hHttpRequest, - DWORD a_dwOption, - DWORD a_dwFlag ) -{ - DWORD dwBuffer; - DWORD dwBufferLength = sizeof(DWORD); - - BOOL bSuccess = InternetQueryOption( - a_hHttpRequest, - a_dwOption, - &dwBuffer, - &dwBufferLength ); - if (bSuccess) { - dwBuffer |= a_dwFlag; - bSuccess = InternetSetOption( - a_hHttpRequest, - a_dwOption, - &dwBuffer, - dwBufferLength); - } -#ifdef SOAP_DEBUG - if ( !bSuccess ) { - DWORD dwErrorCode = GetLastError(); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: failed to set option: %X, error %d (%s)\n", - a_hHttpRequest, a_dwOption, dwErrorCode, - wininet_error_message(soap,dwErrorCode) )); - } -#endif - return bSuccess; -} -*/ - -static BOOL -wininet_resolve_send_error( - HINTERNET a_hHttpRequest, - DWORD a_dwErrorCode ) -{ - DWORD dwResult = InternetErrorDlg( - GetDesktopWindow(), - a_hHttpRequest, - a_dwErrorCode, - FLAGS_ERROR_UI_FILTER_FOR_ERRORS | - FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | - FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, - NULL ); - BOOL bRetVal = (a_dwErrorCode == ERROR_INTERNET_INCORRECT_PASSWORD) ? - (dwResult == ERROR_INTERNET_FORCE_RETRY) : - (dwResult == ERROR_SUCCESS); - /* If appropriate for your application, it is possible to ignore - errors in future once they have been handled or ignored once. - For example, to ignore invalid SSL certificate dates on this - connection once the client has indicated to ignore them this - time, uncomment this code. - */ - /* - if (bRetVal) - { - switch (a_dwErrorCode) - { - case ERROR_INTERNET_SEC_CERT_CN_INVALID: - wininet_flag_set_option(a_hHttpRequest, - INTERNET_OPTION_SECURITY_FLAGS, - SECURITY_FLAG_IGNORE_CERT_CN_INVALID ); - break; - } - } - */ - return bRetVal; - -} - -#ifdef SOAP_DEBUG - -static const char * -wininet_error_message( - struct soap * soap, - DWORD a_dwErrorMsgId ) -{ - HINSTANCE hModule; - DWORD dwResult; - DWORD dwFormatFlags; - struct wininet_data * pData = - (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - - /* free any existing error message */ - wininet_free_error_message( pData ); - - dwFormatFlags = - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_IGNORE_INSERTS | - FORMAT_MESSAGE_FROM_SYSTEM; - - /* load wininet.dll for the error messages */ - hModule = LoadLibraryExA( "wininet.dll", NULL, - LOAD_LIBRARY_AS_DATAFILE | DONT_RESOLVE_DLL_REFERENCES ); - if ( hModule ) - { - dwFormatFlags |= FORMAT_MESSAGE_FROM_HMODULE; - } - - /* format the messages */ - dwResult = FormatMessageA( - dwFormatFlags, - hModule, - a_dwErrorMsgId, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPSTR) &pData->pszErrorMessage, - 0, - NULL ); - - /* free the library if we loaded it */ - if ( hModule ) - { - FreeLibrary( hModule ); - } - - /* remove the CR LF from the error message */ - if ( dwResult > 2 ) - { - pData->pszErrorMessage[dwResult-2] = 0; - return pData->pszErrorMessage; - } - else - { - const static char szUnknown[] = "(unknown)"; - return szUnknown; - } -} - -static void -wininet_free_error_message( - struct wininet_data * a_pData ) -{ - if ( a_pData->pszErrorMessage ) - { - LocalFree( a_pData->pszErrorMessage ); - a_pData->pszErrorMessage = 0; - } -} - -#endif /* SOAP_DEBUG */ diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.cpp index 3074e331b..bddd0c99a 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.cpp +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.cpp @@ -2,15 +2,6 @@ See the header file for details. This file is distributed under the MIT licence. */ -/* system */ -#include -#include -#include - -/* gsoap */ -#include - -/* local */ #include "gsoapWinInet.h" /* ensure that the wininet library is linked */ @@ -201,10 +192,11 @@ wininet_init( "gSOAP", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 ); if ( !a_pData->hInternet ) { - soap->error = GetLastError(); + soap->error = SOAP_EOF; + soap->errnum = GetLastError(); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: init, error %d (%s) in InternetOpen\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); + soap, soap->errnum, wininet_error_message(soap,soap->errnum) )); wininet_free_error_message( a_pData ); return FALSE; } @@ -325,15 +317,13 @@ wininet_connect( DWORD dwFlags; HINTERNET hConnection = NULL; HINTERNET hHttpRequest = NULL; + const char * pszVerb; + INTERNET_PORT nPort; struct wininet_data * pData = (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); soap->error = SOAP_OK; - /* we parse the URL ourselves so we don't use these parameters */ - UNUSED_ARG( a_pszHost ); - UNUSED_ARG( a_nPort ); - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: connect, endpoint = '%s'\n", soap, a_pszEndpoint )); @@ -357,13 +347,16 @@ wininet_connect( urlComponents.dwUrlPathLength = MAX_PATH; if ( !InternetCrackUrlA( a_pszEndpoint, 0, 0, &urlComponents ) ) { - soap->error = GetLastError(); + soap->error = SOAP_TCP_ERROR; + soap->errnum = GetLastError(); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: connect, error %d (%s) in InternetCrackUrl\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); + soap, soap->errnum, wininet_error_message(soap,soap->errnum) )); return SOAP_INVALID_SOCKET; } + nPort = urlComponents.nPort; + if ( !pData->hConnection ) { Trace("InternetConnectA", szHost, (DWORD)strlen(szHost)); @@ -371,14 +364,15 @@ wininet_connect( /* connect to the target url, if we haven't connected yet or if it was dropped */ hConnection = InternetConnectA( pData->hInternet, - szHost, urlComponents.nPort, "", "", INTERNET_SERVICE_HTTP, + szHost, nPort, "", "", INTERNET_SERVICE_HTTP, 0, (DWORD_PTR) soap ); if ( !hConnection ) { - soap->error = GetLastError(); + soap->error = SOAP_TCP_ERROR; + soap->errnum = GetLastError(); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: connect, error %d (%s) in InternetConnect\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); + soap, soap->errnum, wininet_error_message(soap,soap->errnum) )); return SOAP_INVALID_SOCKET; } } @@ -404,19 +398,46 @@ wininet_connect( dwFlags |= INTERNET_FLAG_SECURE; } + /* proxy requires full endpoint URL */ + if ( soap->proxy_host ) + { + strncpy(szUrlPath, a_pszEndpoint, MAX_PATH); + } + + /* status determines the HTTP verb */ + switch ( soap->status ) + { + case SOAP_GET: + pszVerb = "GET"; + break; + case SOAP_PUT: + pszVerb = "PUT"; + break; + case SOAP_DEL: + pszVerb = "DELETE"; + break; + case SOAP_CONNECT: + pszVerb = "CONNECT"; + _snprintf(szUrlPath, MAX_PATH, "%s:%d", a_pszHost, a_nPort); + break; + default: + pszVerb = "POST"; + } + Trace("HttpOpenRequestA", szUrlPath, (DWORD)strlen(szUrlPath)); hHttpRequest = HttpOpenRequestA( - hConnection, "POST", szUrlPath, "HTTP/1.1", NULL, NULL, + hConnection, pszVerb, szUrlPath, "HTTP/1.1", NULL, NULL, dwFlags, (DWORD_PTR) soap ); if ( !hHttpRequest ) { InternetCloseHandle( hConnection ); pData->bKeepAlive = FALSE; - soap->error = GetLastError(); + soap->error = SOAP_HTTP_ERROR; + soap->errnum = GetLastError(); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: connect, error %d (%s) in HttpOpenRequest\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); + soap, soap->errnum, wininet_error_message(soap,soap->errnum) )); wininet_free_error_message(pData); return SOAP_INVALID_SOCKET; } @@ -499,7 +520,7 @@ wininet_post_header( { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: post_header, error %d (%s) in HttpAddRequestHeaders\n", - soap, soap->error, wininet_error_message(soap,GetLastError()) )); + soap, GetLastError(), wininet_error_message(soap,GetLastError()) )); } #endif } @@ -535,8 +556,6 @@ wininet_fsend( struct wininet_data * pData = (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - soap->error = SOAP_OK; - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: fsend, data len = %lu bytes\n", soap, a_uiBufferLen )); @@ -654,6 +673,8 @@ wininet_fsend( { bRetryPost = FALSE; + soap->error = SOAP_OK; + /* to report a progress when sending a big buffer we need to send it by small chunks since INTERNET_STATUS_REQUEST_SENT callback is sent for entire buffer */ const DWORD dwChunkSize = 64 * 1024; @@ -688,14 +709,15 @@ wininet_fsend( } if ( !bResult ) { - soap->error = GetLastError(); + soap->error = SOAP_EOF; + soap->errnum = GetLastError(); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: fsend, error %d (%s) in HttpSendRequest\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); + soap, soap->errnum, wininet_error_message(soap,soap->errnum) )); /* see if we can handle this error, see the MSDN documentation for InternetErrorDlg for details */ - switch ( soap->error ) + switch ( soap->errnum ) { case ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR: case ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR: @@ -706,46 +728,48 @@ wininet_fsend( case ERROR_INTERNET_SEC_CERT_DATE_INVALID: case ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED: { - wininet_rseReturn errorResolved = rseDisplayDlg; - if (pData->pRseCallback) - { - errorResolved = pData->pRseCallback(hHttpRequest, soap->error); - } - if (errorResolved == rseDisplayDlg) - { - errorResolved = (wininet_rseReturn) - wininet_resolve_send_error( hHttpRequest, soap->error ); - if ( errorResolved == rseTrue ) + wininet_rseReturn errorResolved = rseDisplayDlg; + if (pData->pRseCallback) { - DBGLOG(TEST, SOAP_MESSAGE(fdebug, - "wininet %p: fsend, error %d has been resolved\n", - soap, soap->error )); - bRetryPost = TRUE; - - /* - we would have been disconnected by the error. Since we - are going to try again, we will automatically be - reconnected. Therefore we want to disregard any - previous disconnection messages. - */ - pData->bDisconnect = FALSE; - continue; + errorResolved = pData->pRseCallback(hHttpRequest, soap->errnum); + } + if (errorResolved == rseDisplayDlg) + { + errorResolved = (wininet_rseReturn) + wininet_resolve_send_error( hHttpRequest, soap->errnum ); + if ( errorResolved == rseTrue ) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, + "wininet %p: fsend, error %d has been resolved\n", + soap, soap->errnum )); + bRetryPost = TRUE; + + /* + we would have been disconnected by the error. Since we + are going to try again, we will automatically be + reconnected. Therefore we want to disregard any + previous disconnection messages. + */ + pData->bDisconnect = FALSE; + continue; + } } - } } break; } /* if the error wasn't handled then we exit */ - switch ( soap->error ) + switch ( soap->errnum ) { + case ERROR_INTERNET_NAME_NOT_RESOLVED: case ERROR_INTERNET_CANNOT_CONNECT: nResult = SOAP_TCP_ERROR; break; default: nResult = SOAP_HTTP_ERROR; + break; } - soap_set_sender_error(soap, "HttpSendRequest failed", wininet_error_message(soap,soap->error), nResult); + soap_set_sender_error(soap, "HttpSendRequest failed", wininet_error_message(soap,soap->errnum), nResult); break; } @@ -764,10 +788,11 @@ wininet_fsend( if ( !bResult ) { - soap->error = GetLastError(); + soap->error = SOAP_EOF; + soap->errnum = GetLastError(); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: fsend, error %d (%s) in HttpQueryInfo\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); + soap, soap->errnum, wininet_error_message(soap,soap->errnum) )); nResult = SOAP_HTTP_ERROR; break; } @@ -900,8 +925,6 @@ retry: uiTotalBytesRead = recvSize; } - soap->error = SOAP_OK; - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: frecv, available buffer len = %lu\n", soap, a_uiBufferLen )); @@ -941,11 +964,11 @@ retry: } else { - soap->error = GetLastError(); + soap->errnum = GetLastError(); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: frecv, error %d (%s) in InternetReadFile\n", - soap, soap->error, wininet_error_message(soap,soap->error) )); - soap_set_sender_error(soap, "InternetReadFile failed", wininet_error_message(soap,soap->error), SOAP_HTTP_ERROR); + soap, soap->errnum, wininet_error_message(soap,soap->errnum) )); + soap_set_sender_error(soap, "InternetReadFile failed", wininet_error_message(soap,soap->errnum), SOAP_HTTP_ERROR); } } while ( bResult && dwBytesRead && uiTotalBytesRead < a_uiBufferLen ); @@ -970,8 +993,6 @@ wininet_disconnect( struct wininet_data * pData = (struct wininet_data *) soap_lookup_plugin( soap, wininet_id ); - soap->error = SOAP_OK; - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "wininet %p: disconnect\n", soap )); /* force a disconnect by setting the disconnect flag to TRUE */ @@ -979,7 +1000,7 @@ wininet_disconnect( pData->bKeepAlive = FALSE; wininet_have_connection( soap, pData ); - return SOAP_OK; + return soap->error = SOAP_OK; } /* this is mostly for debug tracing */ @@ -1239,7 +1260,6 @@ wininet_fpoll( return wininet_have_connection(soap, pData) ? SOAP_OK : SOAP_EOF; } - static DWORD wininet_set_timeout( struct soap * soap, @@ -1268,7 +1288,7 @@ wininet_set_timeout( return 0; } -/* +#if 0 static BOOL wininet_flag_set_option( HINTERNET a_hHttpRequest, @@ -1302,7 +1322,7 @@ wininet_flag_set_option( #endif return bSuccess; } -*/ +#endif static BOOL wininet_resolve_send_error( @@ -1384,14 +1404,18 @@ wininet_error_message( /* remove the CR LF from the error message and convert to proper char set */ if ( dwResult > 2 ) { - pszErrorMessage[dwResult-2] = 0; + dwResult -= 2; + pszErrorMessage[dwResult] = 0; + + wchar_t* pszExtendedErrorMessage = (wchar_t*)_alloca(dwResult + 100); + swprintf(pszExtendedErrorMessage, L"WinInet %d, %ls", a_dwErrorMsgId, pszErrorMessage); UINT newCodePage = CP_UTF8; // TODO: May be it should use SOAP_C_UTFSTRING or SOAP_C_MBSTRING? - int len = WideCharToMultiByte(newCodePage, 0, pszErrorMessage, -1, NULL, 0, NULL, NULL); + int len = WideCharToMultiByte(newCodePage, 0, pszExtendedErrorMessage, -1, NULL, 0, NULL, NULL); if (len) { pData->pszErrorMessage = new char[len]; - WideCharToMultiByte(newCodePage, 0, pszErrorMessage, -1, pData->pszErrorMessage, len, NULL, NULL); + WideCharToMultiByte(newCodePage, 0, pszExtendedErrorMessage, -1, pData->pszErrorMessage, len, NULL, NULL); } else { @@ -1430,4 +1454,4 @@ wininet_free_error_message( delete[] a_pData->pszErrorMessage; a_pData->pszErrorMessage = 0; } -} \ No newline at end of file +} diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.h index 8e7ac60b0..685baf2bc 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.h +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/gsoapWinInet.h @@ -165,6 +165,9 @@ Bug fix. 17 March 2009: Brodie Thiesfield (code@jellycan.com) Clean up and re-release. + +10 December 2011: Robert van Engelen (engelen@acm.org) +Build-related fixes. */ #ifndef INCLUDED_gsoapWinInet2_h @@ -177,11 +180,7 @@ Clean up and re-release. extern "C" { #endif -typedef enum { - rseFalse = 0, - rseTrue, - rseDisplayDlg -} wininet_rseReturn; +typedef enum { rseFalse = 0, rseTrue, rseDisplayDlg } wininet_rseReturn; typedef wininet_rseReturn(*wininet_rse_callback)(HINTERNET a_hHttpRequest, DWORD a_dwErrorCode); diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/make_service_stub.bat b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/make_service_stub.bat index d3a11b020..392f11208 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/make_service_stub.bat +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/make_service_stub.bat @@ -1,8 +1,8 @@ SET DumpUploaderHeader=DumpUploader.h -SET DumpUploaderUrl=https://www.crash-server.com/crashserver/DumpUploader.asmx?WSDL -rem SET DumpUploaderUrl=http://localhost:59175/DumpUploader.asmx?WSDL +rem SET DumpUploaderUrl=%~dp0\DumpUploader3.wsdl +SET DumpUploaderUrl=http://localhost:59175/Service/DumpUploader3.svc?WSDL SET DumpUploaderPath=%~dp0\generated -SET GsoapPath=%~dp0\..\..\external\gsoap-win32-2.8.0 +SET GsoapPath=%~dp0\..\..\external\gsoap-2.8.17\gsoap SET TypemapDatPath=%~dp0\typemap.dat if not exist "%DumpUploaderPath%" md "%DumpUploaderPath%" @@ -10,3 +10,22 @@ cd "%DumpUploaderPath%" "%GsoapPath%\bin\win32\wsdl2h.exe" -t "%TypemapDatPath%" -o "%DumpUploaderHeader%" "%DumpUploaderUrl%" "%GsoapPath%\bin\win32\soapcpp2.exe" -2 -i -C -x "%DumpUploaderHeader%" "-I%GsoapPath%\import" + +:: - and . is prohibited symbols in C++ names and gSOAP converts "-" to "_", "_" to "_USCORE" and "." to "_x002e" +:: This looks ugly and will be changed all to "_". +:: But this should be done after soapcpp2 because it needs original ids to make correct back convertion +del soapCustomBinding_DumpUploadService3_UploaderProxy.cpp +ren soapCustomBinding_USCOREDumpUploadService3_x002eUploaderProxy.cpp soapCustomBinding_DumpUploadService3_UploaderProxy.cpp +del soapCustomBinding_DumpUploadService3_UploaderProxy.h +ren soapCustomBinding_USCOREDumpUploadService3_x002eUploaderProxy.h soapCustomBinding_DumpUploadService3_UploaderProxy.h +del CustomBinding_DumpUploadService3_Uploader.nsmap +ren CustomBinding_USCOREDumpUploadService3_x002eUploader.nsmap CustomBinding_DumpUploadService3_Uploader.nsmap + +cscript "%~dp0\replace_text.vbs" soapC.cpp +cscript "%~dp0\replace_text.vbs" soapCustomBinding_DumpUploadService3_UploaderProxy.cpp +cscript "%~dp0\replace_text.vbs" DumpUploader.h +cscript "%~dp0\replace_text.vbs" soapCustomBinding_DumpUploadService3_UploaderProxy.h +cscript "%~dp0\replace_text.vbs" soapH.h +cscript "%~dp0\replace_text.vbs" soapStub.h +cscript "%~dp0\replace_text.vbs" CustomBinding_DumpUploadService3_Uploader.nsmap + diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/replace_text.vbs b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/replace_text.vbs new file mode 100644 index 000000000..379d07c8d --- /dev/null +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/replace_text.vbs @@ -0,0 +1,15 @@ +Const ForReading = 1 +Const ForWriting = 2 + +strFileName = Wscript.Arguments(0) + +Set objFSO = CreateObject("Scripting.FileSystemObject") +Set objFile = objFSO.OpenTextFile(strFileName, ForReading) +strText = objFile.ReadAll +objFile.Close + +strNewText = Replace(strText, "_USCORE", "_") +strNewText = Replace(strNewText, "_x002e", "_") +Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) +objFile.Write strNewText 'WriteLine adds extra CR/LF +objFile.Close \ No newline at end of file diff --git a/ext/CrashServer/external/gsoap-win32-2.8.0/stdsoap2.cpp b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/stdsoap2.cpp similarity index 79% rename from ext/CrashServer/external/gsoap-win32-2.8.0/stdsoap2.cpp rename to ext/CrashServer/CrashHandler/DumpUploaderServiceLib/stdsoap2.cpp index f01d0695b..6ac905b4a 100644 --- a/ext/CrashServer/external/gsoap-win32-2.8.0/stdsoap2.cpp +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/stdsoap2.cpp @@ -1,17 +1,17 @@ /* - stdsoap2.c[pp] 2.8.0 + stdsoap2.c[pp] 2.8.17r gSOAP runtime engine gSOAP XML Web services tools -Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc., All Rights Reserved. +Copyright (C) 2000-2013, 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 under gSOAP public license: - - vxWorks compatible + - vxWorks compatible options -------------------------------------------------------------------------------- gSOAP public license. @@ -24,7 +24,7 @@ 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. +Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc., All Rights Reserved. -------------------------------------------------------------------------------- GPL license. @@ -49,44 +49,40 @@ 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. - */ +#define GSOAP_LIB_VERSION 20817 + #ifdef AS400 # pragma convert(819) /* EBCDIC to ASCII */ #endif #include "stdsoap2.h" +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) +#include +#endif +#if GSOAP_VERSION != GSOAP_LIB_VERSION +# error "GSOAP VERSION MISMATCH IN LIBRARY: PLEASE REINSTALL PACKAGE" +#endif #ifdef __BORLANDC__ # pragma warn -8060 #else # ifdef WIN32 # ifdef UNDER_CE -# pragma comment(lib, "winsock.lib") +# pragma comment(lib, "ws2.lib") /* WinCE */ # else -# pragma comment(lib, "wsock32.lib") +# pragma comment(lib, "ws2_32.lib") # endif # pragma warning(disable : 4996) /* disable deprecation warnings */ # endif #endif #ifdef __cplusplus -SOAP_SOURCE_STAMP("@(#) stdsoap2.cpp ver 2.8.0 2010-09-20 00:00:00 GMT") +SOAP_SOURCE_STAMP("@(#) stdsoap2.cpp ver 2.8.17r 2013-12-18 00:00:00 GMT") extern "C" { #else -SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.8.0 2010-09-20 00:00:00 GMT") +SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.8.17r 2013-12-18 00:00:00 GMT") #endif /* 8bit character representing unknown/nonrepresentable character data (e.g. not supported by current locale with multibyte support enabled) */ @@ -95,13 +91,13 @@ SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.8.0 2010-09-20 00:00:00 GMT") #endif /* EOF=-1 */ -#define SOAP_LT (soap_wchar)(-2) /* XML character '<' */ -#define SOAP_TT (soap_wchar)(-3) /* XML character '' */ -#define SOAP_QT (soap_wchar)(-5) /* XML character '"' */ -#define SOAP_AP (soap_wchar)(-6) /* XML character ''' */ +#define SOAP_LT (soap_wchar)(-2) /* XML-specific '<' */ +#define SOAP_TT (soap_wchar)(-3) /* XML-specific '' */ +#define SOAP_QT (soap_wchar)(-5) /* XML-specific '"' */ +#define SOAP_AP (soap_wchar)(-6) /* XML-specific ''' */ -#define soap_blank(c) ((c) >= 0 && (c) <= 32) +#define soap_blank(c) ((c)+1 > 0 && (c) <= 32) #define soap_notblank(c) ((c) > 32) #if defined(WIN32) && !defined(UNDER_CE) @@ -138,8 +134,10 @@ static int soap_isxdigit(int); static void *fplugin(struct soap*, const char*); 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); +#ifdef WITH_NTLM +static int soap_ntlm_handshake(struct soap *soap, int command, const char *endpoint, const char *host, int port); +#endif #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*); @@ -152,7 +150,7 @@ static void soap_free_pht(struct soap*); 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); +static void soap_utilize_ns(struct soap *soap, const char *tag); #endif #ifndef WITH_LEANER @@ -208,9 +206,9 @@ static const char *soap_decode(char*, size_t, const char*, const char*); #ifndef PALM_1 static soap_wchar soap_getchunkchar(struct soap*); static const char *http_error(struct soap*, int); -static int http_put(struct soap*); static int http_get(struct soap*); static int http_405(struct soap*); +static int http_200(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*); @@ -262,6 +260,15 @@ static const char *soap_strerror(struct soap*); { u_long nonblocking = 1; \ ioctl(fd, FIONBIO, (int)(&nonblocking)); \ } +#elif defined(__VMS) + #define SOAP_SOCKBLOCK(fd) \ + { int blocking = 0; \ + ioctl(fd, FIONBIO, &blocking); \ + } + #define SOAP_SOCKNONBLOCK(fd) \ + { int nonblocking = 1; \ + ioctl(fd, FIONBIO, &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); @@ -294,9 +301,9 @@ 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"; +const union soap_double_nan soap_double_nan = {{0xFFFFFFFF, 0xFFFFFFFF}}; +const char soap_base64o[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +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 @@ -529,6 +536,7 @@ extern int h_errno; static int fsend(struct soap *soap, const char *s, size_t n) { register int nwritten, err; + SOAP_SOCKET sk; #if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT) if (soap->os) { soap->os->write(s, (std::streamsize)n); @@ -538,31 +546,34 @@ fsend(struct soap *soap, const char *s, size_t n) return SOAP_EOF; } #endif + sk = soap->sendsk; + if (!soap_valid_socket(sk)) + sk = soap->socket; while (n) - { if (soap_valid_socket(soap->socket)) + { if (soap_valid_socket(sk)) { 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); + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL, soap->send_timeout); else #endif #ifdef WITH_GNUTLS if (soap->session) - r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_ALL, soap->send_timeout); + r = tcp_select(soap, sk, 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); + r = tcp_select(soap, sk, 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) + err = soap->errnum; + if (!err) return soap->error; - if (err != SOAP_EINTR && err != SOAP_EAGAIN && err != SOAP_EWOULDBLOCK) + if (err != SOAP_EAGAIN && err != SOAP_EWOULDBLOCK) return SOAP_EOF; } } @@ -581,43 +592,51 @@ fsend(struct soap *soap, const char *s, size_t n) #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); + nwritten = sendto(sk, (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); + nwritten = send(sk, 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 */ + udp_repeat = 2; /* 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 */ + udp_delay = ((unsigned int)soap_random % 201) + 50; /* UDP_MIN_DELAY .. UDP_MAX_DELAY */ do - { tcp_select(soap, soap->socket, SOAP_TCP_SELECT_ERR, -1000 * udp_delay); + { tcp_select(soap, sk, 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); + nwritten = sendto(sk, (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); + nwritten = send(sk, 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); } + if (nwritten < 0) + { err = soap_socket_errno(sk); + if (err && err != SOAP_EINTR) + { soap->errnum = err; + return SOAP_EOF; + } + nwritten = 0; /* and call write() again */ + } } else #endif #if !defined(PALM) && !defined(AS400) - nwritten = send(soap->socket, s, (int)n, soap->socket_flags); + nwritten = send(sk, s, (int)n, soap->socket_flags); #else - nwritten = send(soap->socket, (void*)s, n, soap->socket_flags); + nwritten = send(sk, (void*)s, n, soap->socket_flags); #endif if (nwritten <= 0) { register int r = 0; - err = soap_socket_errno(soap->socket); + err = soap_socket_errno(sk); #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; @@ -625,28 +644,28 @@ fsend(struct soap *soap, const char *s, size_t n) } #endif #ifdef WITH_GNUTLS - if (soap->session) + if (soap->session) { if (nwritten == GNUTLS_E_INTERRUPTED) - err = SOAP_EINTR; - else if (nwritten == GNUTLS_E_AGAIN) - err = SOAP_EAGAIN; - } + err = SOAP_EINTR; + else if (nwritten == GNUTLS_E_AGAIN) + err = SOAP_EAGAIN; + } #endif if (err == SOAP_EWOULDBLOCK || err == SOAP_EAGAIN) { #if defined(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); + r = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000); else #elif defined(WITH_GNUTLS) if (soap->session && !gnutls_record_get_direction(soap->session)) - r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000); + r = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000); else #endif - r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000); - if (!r && soap->send_timeout) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000); + if (!r && soap->send_timeout) return SOAP_EOF; - if (r < 0 && soap->errnum != SOAP_EINTR) + if (r < 0) return SOAP_EOF; } else if (err && err != SOAP_EINTR) @@ -711,15 +730,15 @@ 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); + if (soap->fpreparesend && (soap->mode & SOAP_IO) != SOAP_IO_STORE && (soap->mode & SOAP_IO_LENGTH) && (soap->error = soap->fpreparesend(soap, s, n))) + return soap->error; + if (soap->ffiltersend && (soap->error = soap->ffiltersend(soap, &s, &n))) + return soap->error; #endif - return SOAP_OK; - } - if (soap->mode & SOAP_IO) + if (soap->mode & SOAP_IO_LENGTH) + soap->count += n; + else if (soap->mode & SOAP_IO) { register size_t i = SOAP_BUFLEN - soap->bufidx; while (n >= i) { memcpy(soap->buf + soap->bufidx, s, i); @@ -732,9 +751,10 @@ soap_send_raw(struct soap *soap, const char *s, size_t n) } memcpy(soap->buf + soap->bufidx, s, n); soap->bufidx += n; - return SOAP_OK; } - return soap_flush_raw(soap, s, n); + else + return soap_flush_raw(soap, s, n); + return SOAP_OK; } #endif @@ -765,7 +785,7 @@ soap_flush(struct soap *soap) 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)); + { 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) @@ -800,13 +820,18 @@ soap_flush_raw(struct soap *soap, const char *s, size_t n) #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); +#ifdef HAVE_SNPRINTF + soap_snprintf(t, sizeof(t), &"\r\n%lX\r\n"[soap->chunksize ? 0 : 2], (unsigned long)n); +#else + sprintf(t, &"\r\n%lX\r\n"[soap->chunksize ? 0 : 2], (unsigned long)n); +#endif DBGMSG(SENT, t, strlen(t)); if ((soap->error = soap->fsend(soap, t, strlen(t)))) return soap->error; soap->chunksize += n; } DBGMSG(SENT, s, n); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send %u bytes to socket=%d/fd=%d\n", (unsigned int)n, soap->socket, soap->sendfd)); #endif return soap->error = soap->fsend(soap, s, n); } @@ -860,6 +885,7 @@ 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_SOCKET sk; soap->errnum = 0; #if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT) if (soap->is) @@ -868,7 +894,10 @@ frecv(struct soap *soap, char *s, size_t n) return 0; } #endif - if (soap_valid_socket(soap->socket)) + sk = soap->recvsk; + if (!soap_valid_socket(sk)) + sk = soap->socket; + if (soap_valid_socket(sk)) { for (;;) { #ifdef WITH_OPENSSL @@ -880,13 +909,13 @@ frecv(struct soap *soap, char *s, size_t n) if (soap->recv_timeout) #endif { for (;;) - { r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->recv_timeout); + { r = tcp_select(soap, sk, 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) + r = soap->errnum; + if (r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK) return 0; } } @@ -911,7 +940,7 @@ frecv(struct soap *soap, char *s, size_t n) if (soap->session) { r = (int)gnutls_record_recv(soap->session, s, n); if (r >= 0) - return (size_t)r; + return (size_t)r; } else #endif @@ -920,7 +949,7 @@ frecv(struct soap *soap, char *s, size_t n) 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 */ + r = recvfrom(sk, 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); @@ -928,13 +957,13 @@ frecv(struct soap *soap, char *s, size_t n) } else #endif - r = recv(soap->socket, s, (int)n, soap->socket_flags); + r = recv(sk, s, (int)n, soap->socket_flags); #ifdef PALM /* CycleSyncDisplay(curStatusMsg); */ #endif if (r >= 0) return (size_t)r; - r = soap_socket_errno(soap->socket); + r = soap_socket_errno(sk); if (r != SOAP_EINTR && r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK) { soap->errnum = r; return 0; @@ -942,25 +971,25 @@ frecv(struct soap *soap, char *s, size_t n) } #if defined(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); + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5); else #elif defined(WITH_GNUTLS) if (soap->session && gnutls_record_get_direction(soap->session)) - r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5); + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5); else #endif - r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5); + r = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5); if (!r && soap->recv_timeout) return 0; if (r < 0) { r = soap->errnum; - if (r != SOAP_EINTR && r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK) + if (r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK) return 0; } if (retries-- <= 0) return 0; #ifdef PALM - r = soap_socket_errno(soap->socket); + r = soap_socket_errno(sk); if (r != SOAP_EINTR && retries-- <= 0) { soap->errnum = r; return 0; @@ -1003,7 +1032,7 @@ soap_getchunkchar(struct soap *soap) 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)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket=%d/fd=%d\n", (unsigned int)soap->buflen, soap->socket, soap->recvfd)); DBGMSG(RECV, soap->buf, soap->buflen); if (soap->buflen) return soap->buf[soap->bufidx++]; @@ -1033,14 +1062,16 @@ soap_recv_raw(struct soap *soap) #ifdef WITH_ZLIB if (soap->mode & SOAP_ENC_ZLIB) { if (soap->d_stream->next_out == Z_NULL) + { soap->bufidx = soap->buflen = 0; 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); + 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; @@ -1064,10 +1095,9 @@ soap_recv_raw(struct soap *soap) } } 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)); + { 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; + return soap->error = SOAP_ZLIB_ERROR; } } zlib_again: @@ -1082,7 +1112,7 @@ zlib_again: if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) /* read HTTP chunked transfer */ { for (;;) { register soap_wchar c; - char *t, tmp[8]; + char *t, tmp[17]; 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)); @@ -1094,11 +1124,13 @@ zlib_again: 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)); + 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; + { soap->ahead = EOF; + return EOF; + } } else soap->bufidx = soap->buflen; @@ -1106,26 +1138,30 @@ zlib_again: 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; + { soap->ahead = EOF; + return EOF; + } } do *t++ = (char)c; - while (soap_isxdigit((int)(c = soap_getchunkchar(soap))) && t - tmp < 7); + while (soap_isxdigit((int)(c = soap_getchunkchar(soap))) && (size_t)(t - tmp) < sizeof(tmp)-1); while ((int)c != EOF && c != '\n') c = soap_getchunkchar(soap); if ((int)c == EOF) - return soap->ahead = EOF; + { soap->ahead = EOF; + return EOF; + } *t = '\0'; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunk size = %s (hex)\n", tmp)); - soap->chunksize = soap_strtoul(tmp, &t, 16); + soap->chunksize = (size_t)soap_strtoul(tmp, &t, 16); if (!soap->chunksize) - { soap->chunkbuflen = 0; + { soap->bufidx = soap->buflen = 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; + 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)); @@ -1146,7 +1182,7 @@ zlib_again: #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)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket=%d/fd=%d\n", (unsigned int)ret, soap->socket, soap->recvfd)); DBGMSG(RECV, soap->buf, ret); } #ifdef WITH_ZLIB @@ -1182,10 +1218,9 @@ zlib_again: #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)); + { 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; + return soap->error = SOAP_ZLIB_ERROR; } } #endif @@ -1198,6 +1233,7 @@ zlib_again: return soap->error = r; #endif soap->count += ret; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read count=%lu (+%lu)\n", (unsigned long)soap->count, (unsigned long)ret)); return !ret; } #endif @@ -1266,9 +1302,27 @@ soap_recv(struct soap *soap) } 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)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%lu bytes remaining, count=%lu\n", (unsigned long)(soap->buflen-soap->bufidx), (unsigned long)soap->count)); + return SOAP_OK; + } + } + while (soap->ffilterrecv) + { int err, last = soap->filterstop; + if (last) + soap->bufidx = soap->buflen = 0; + if ((err = soap->ffilterrecv(soap, soap->buf, &soap->buflen, sizeof(soap->buf)))) + return soap->error = err; + if (soap->buflen) + { soap->bufidx = 0; + soap->filterstop = last; return SOAP_OK; } + if (last) + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Returning postponed error %d\n", last)); + soap->filterstop = SOAP_OK; + return last; + } + soap->filterstop = soap_recv_raw(soap); /* do not call again after EOF */ } #endif return soap_recv_raw(soap); @@ -1478,7 +1532,7 @@ soap_get(struct soap *soap) { c = soap_get0(soap); if (c == '>') { soap->cdata = 0; - soap_get1(soap); + c = soap_get1(soap); c = soap_get1(soap); } else @@ -1600,9 +1654,9 @@ soap_get_pi(struct soap *soap) 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--) +soap_move(struct soap *soap, size_t n) +{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving %lu bytes forward\n", (unsigned long)n)); + for (; n; n--) if ((int)soap_getchar(soap) == EOF) return SOAP_EOF; return SOAP_OK; @@ -1660,8 +1714,12 @@ soap_pututf8(struct soap *soap, register unsigned long c) *t++ = (char)(0x80 | (c & 0x3F)); *t = '\0'; } + else +#endif +#ifdef HAVE_SNPRINTF + soap_snprintf(tmp, sizeof(tmp), "&#%lu;", c); #else - sprintf(tmp, "&#%lu;", c); + sprintf(tmp, "&#%lu;", c); #endif return soap_send(soap, tmp); } @@ -1675,12 +1733,11 @@ 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)) + if (c >= 0x80) + soap->ahead = 0; + else + c = soap_get(soap); + if (c < 0x80 || c > 0xFF || (soap->mode & SOAP_ENC_LATIN)) return c; c1 = soap_get1(soap); if (c1 < 0x80) @@ -1777,7 +1834,7 @@ soap_gethex(struct soap *soap, int *n) 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'); + *s++ = (char)(((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0')); } } #else @@ -1869,7 +1926,7 @@ SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_getbase64(struct soap *soap, int *n, int malloc_flag) -{ +{ (void)malloc_flag; #ifdef WITH_DOM if ((soap->mode & SOAP_XML_DOM) && soap->dom) { soap->dom->data = soap_string_in(soap, 0, -1, -1); @@ -1894,6 +1951,8 @@ soap_getbase64(struct soap *soap, int *n, int malloc_flag) register int j = 0; do { register soap_wchar c = soap_get(soap); + if (c < SOAP_AP) + c &= 0x7FFFFFFF; if (c == '=' || c < 0) { unsigned char *p; switch (j) @@ -2010,14 +2069,13 @@ 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? */ + short 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)) + { if (!soap_element_begin_in(soap, "xop:Include", 0, NULL)) + { if (soap_dime_forward(soap, ptr, size, id, type, options) + || (soap->body && soap_element_end_in(soap, "xop:Include"))) return soap->error; } - if (soap->body && soap_element_end_in(soap, NULL)) - return soap->error; } soap->body = body; return SOAP_OK; @@ -2149,11 +2207,14 @@ soap_pop_block(struct soap *soap, struct soap_blist *b) #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; +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_update_pointers(struct soap *soap, char *start, char *end, char *p1, char *p2) +{ +#ifndef WITH_NOIDREF + int i; register struct soap_ilist *ip = NULL; register struct soap_flist *fp = NULL; #ifndef WITH_LEANER @@ -2191,7 +2252,7 @@ soap_update_ptrs(struct soap *soap, char *start, char *end, char *p1, char *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))); + { 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)); @@ -2199,8 +2260,10 @@ soap_update_ptrs(struct soap *soap, char *start, char *end, char *p1, char *p2) } } #endif -} +#else + (void)soap; (void)start; (void)end; (void)p1; (void)p2; #endif +} #endif /******************************************************************************/ @@ -2415,7 +2478,7 @@ soap_end_block(struct soap *soap, struct soap_blist *b) for (bp = soap->blist; bp; bp = bp->next) { if (bp->next == b) { bp->next = b->next; - break; + break; } } } @@ -2435,18 +2498,18 @@ soap_save_block(struct soap *soap, struct soap_blist *b, char *p, int flag) 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); + 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 (p) { for (s = p, q = soap_first_block(soap, b); q; q = soap_next_block(soap, b)) { n = soap_block_size(soap, b); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy %u bytes from %p to %p\n", (unsigned int)n, q, s)); #ifndef WITH_NOIDREF if (flag) - soap_update_ptrs(soap, q, q + n, s, q); + soap_update_pointers(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; } @@ -2485,27 +2548,70 @@ 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) +{ register int i; + register size_t l; + if (!type || strlen(type) + 13 > sizeof(soap->type)) /* prevent overruns */ return NULL; if (soap->version == 2) - { sprintf(soap->type, "%s[%d", type, size[0]); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->type, sizeof(soap->type) - 1, "%s[%d", type, size[0]); +#else + sprintf(soap->type, "%s[%d", type, size[0]); +#endif for (i = 1; i < dim; i++) - sprintf(soap->type + strlen(soap->type), " %d", size[i]); + { +#ifdef HAVE_SNPRINTF + l = strlen(soap->type); + soap_snprintf(soap->type + l, sizeof(soap->type) - l - 1, " %d", size[i]); +#else + if ((l = strlen(soap->type)) + 13 > sizeof(soap->type)) + return NULL; + sprintf(soap->type + l, " %d", size[i]); +#endif + } } else { if (offset) - { sprintf(soap->type, "%s[%d", type, size[0] + offset[0]); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->type, sizeof(soap->type) - 1, "%s[%d", type, size[0] + offset[0]); +#else + sprintf(soap->type, "%s[%d", type, size[0] + offset[0]); +#endif for (i = 1; i < dim; i++) - sprintf(soap->type + strlen(soap->type), ",%d", size[i] + offset[i]); + { +#ifdef HAVE_SNPRINTF + l = strlen(soap->type); + soap_snprintf(soap->type + l, sizeof(soap->type) - l - 1, ",%d", size[i] + offset[i]); +#else + if ((l = strlen(soap->type)) + 13 > sizeof(soap->type)) + return NULL; + sprintf(soap->type + l, ",%d", size[i] + offset[i]); +#endif + } } else - { sprintf(soap->type, "%s[%d", type, size[0]); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->type, sizeof(soap->type) - 1, "%s[%d", type, size[0]); +#else + sprintf(soap->type, "%s[%d", type, size[0]); +#endif for (i = 1; i < dim; i++) - sprintf(soap->type + strlen(soap->type), ",%d", size[i]); + { +#ifdef HAVE_SNPRINTF + l = strlen(soap->type); + soap_snprintf(soap->type + l, sizeof(soap->type) - l - 1, ",%d", size[i]); +#else + if ((l = strlen(soap->type)) + 13 > sizeof(soap->type)) + return NULL; + sprintf(soap->type + l, ",%d", size[i]); +#endif + } } - strcat(soap->type, "]"); } + strcat(soap->type, "]"); return soap->type; } #endif @@ -2527,9 +2633,25 @@ char * SOAP_FMAC2 soap_putoffsets(struct soap *soap, const int *offset, int dim) { register int i; + register size_t l; +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->arrayOffset, sizeof(soap->arrayOffset) - 1, "[%d", offset[0]); +#else + if (sizeof(soap->arrayOffset) < 13) /* prevent overruns */ + return NULL; sprintf(soap->arrayOffset, "[%d", offset[0]); +#endif for (i = 1; i < dim; i++) - sprintf(soap->arrayOffset + strlen(soap->arrayOffset), ",%d", offset[i]); + { +#ifdef HAVE_SNPRINTF + l = strlen(soap->arrayOffset); + soap_snprintf(soap->arrayOffset + l, sizeof(soap->arrayOffset) - l - 1, ",%d", offset[i]); +#else + if ((l = strlen(soap->arrayOffset)) + 13 > sizeof(soap->arrayOffset)) + return NULL; + sprintf(soap->arrayOffset + l, ",%d", offset[i]); +#endif + } strcat(soap->arrayOffset, "]"); return soap->arrayOffset; } @@ -2674,12 +2796,7 @@ soap_push_namespace(struct soap *soap, const char *id, const char *ns) 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; @@ -2706,10 +2823,10 @@ soap_push_namespace(struct soap *soap, const char *id, const char *ns) soap->nlist = np; np->level = soap->level; np->index = i; - strcpy(np->id, id); + strcpy((char*)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); + { np->ns = strcpy((char*)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 @@ -2864,6 +2981,11 @@ soap_match_tag(struct soap *soap, const char *tag1, const char *tag2) return err; } } + else if (!t[1]) + { err = soap_match_namespace(soap, tag1, tag2, 0, t - tag2); + if (err == SOAP_NAMESPACE) + return SOAP_TAG_MISMATCH; + } else if (SOAP_STRCMP(tag1, t + 1)) { return SOAP_TAG_MISMATCH; } @@ -2933,9 +3055,16 @@ soap_rand() SOAP_FMAC1 int SOAP_FMAC2 +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) +soap_ssl_server_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *keyid, const char *password, const char *cafile, const char *capath, const char *dhfile, const char *randfile, const char *sid) +#else 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) +#endif { int err; soap->keyfile = keyfile; +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) + soap->keyid = keyid; +#endif soap->password = password; soap->cafile = cafile; soap->capath = capath; @@ -3001,8 +3130,15 @@ soap_ssl_server_context(struct soap *soap, unsigned short flags, const char *key SOAP_FMAC1 int SOAP_FMAC2 +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) +soap_ssl_client_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *keyid, const char *password, const char *cafile, const char *capath, const char *randfile) +#else 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) +#endif { soap->keyfile = keyfile; +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) + soap->keyid = keyid; +#endif soap->password = password; soap->cafile = cafile; soap->capath = capath; @@ -3039,6 +3175,8 @@ soap_ssl_init() { soap_ssl_init_done = 1; #ifdef WITH_OPENSSL SSL_library_init(); + OpenSSL_add_all_algorithms(); /* 2.8.1 change (wsseapi.c) */ + OpenSSL_add_all_digests(); #ifndef WITH_LEAN SSL_load_error_strings(); #endif @@ -3091,10 +3229,17 @@ soap_ssl_error(struct soap *soap, int ret) else { switch (ret) { case 0: - strcpy(soap->msgbuf, "EOF was observed that violates the protocol. The client probably provided invalid authentication information."); + strcpy(soap->msgbuf, "EOF was observed that violates the SSL/TLS protocol. The client probably provided invalid authentication information."); break; case -1: - sprintf(soap->msgbuf, "Error observed by underlying BIO: %s", strerror(errno)); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "Error observed by underlying SSL/TLS BIO: %s", strerror(errno)); +#else + { const char *s = strerror(errno); + size_t l = strlen(s); + sprintf(soap->msgbuf, "Error observed by underlying SSL/TLS BIO: %s", l + 44 < sizeof(soap->msgbuf) ? s : SOAP_STR_EOS); + } +#endif break; } } @@ -3116,6 +3261,9 @@ ssl_auth_init(struct soap *soap) #ifdef WITH_OPENSSL long flags; int mode; +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) + EVP_PKEY* pkey; +#endif if (!soap_ssl_init_done) soap_ssl_init(); ERR_clear_error(); @@ -3151,7 +3299,17 @@ ssl_auth_init(struct soap *soap) } if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM)) return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read key file", SOAP_SSL_ERROR); +#ifndef WM_SECURE_KEY_STORAGE + if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read key file", SOAP_SSL_ERROR); +#endif } +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) + if (NULL == (pkey = ipcom_key_db_pkey_get(soap->keyid))) + return soap_set_receiver_error(soap, "SSL error", "Can't find key", SOAP_SSL_ERROR); + if (0 == SSL_CTX_use_PrivateKey(soap->ctx, pkey)) + return soap_set_receiver_error(soap, "SSL error", "Can't read key", SOAP_SSL_ERROR); +#endif /* Suggested alternative approach to check the key file for certs (cafile=NULL):*/ #if 0 if (soap->password) @@ -3182,7 +3340,11 @@ ssl_auth_init(struct soap *soap) 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(VXWORKS) + DH_generate_parameters_ex(dh, n, 2/*or 5*/, NULL); +#else dh = DH_generate_parameters(n, 2/*or 5*/, NULL, NULL); +#endif else { BIO *bio; bio = BIO_new_file(soap->dhfile, "r"); @@ -3198,7 +3360,7 @@ ssl_auth_init(struct soap *soap) } DH_free(dh); } - flags = (SSL_OP_ALL | SSL_OP_NO_SSLv2); + flags = (SSL_OP_ALL | SSL_OP_NO_SSLv2); /* disable SSL v2 */ if ((soap->ssl_flags & SOAP_SSLv3)) flags |= SSL_OP_NO_TLSv1; if ((soap->ssl_flags & SOAP_TLSv1)) @@ -3304,13 +3466,23 @@ ssl_verify_callback(int ok, X509_STORE_CTX *store) { #ifdef SOAP_DEBUG if (!ok) - { char data[256]; + { char buf[1024]; + int err = X509_STORE_CTX_get_error(store); 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); + 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(err)); + X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf)); + fprintf(stderr, "certificate issuer %s\n", buf); + X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf)); + fprintf(stderr, "certificate subject %s\n", buf); + /* accept self signed certificates and certificates out of date */ + switch (err) + { case X509_V_ERR_CERT_NOT_YET_VALID: + case X509_V_ERR_CERT_HAS_EXPIRED: + case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: + case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: + X509_STORE_CTX_set_error(store, X509_V_OK); + ok = 1; + } } #endif /* Note: return 1 to continue, but unsafe progress will be terminated by OpenSSL */ @@ -3325,13 +3497,16 @@ ssl_verify_callback(int ok, X509_STORE_CTX *store) 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; + if (!ok) + { /* accept self signed certificates and certificates out of date */ + switch (X509_STORE_CTX_get_error(store)) + { case X509_V_ERR_CERT_NOT_YET_VALID: + case X509_V_ERR_CERT_HAS_EXPIRED: + case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: + case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: + 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; @@ -3386,11 +3561,11 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept(struct soap *soap) -{ SOAP_SOCKET fd = soap->socket; +{ SOAP_SOCKET sk = soap->socket; #ifdef WITH_OPENSSL BIO *bio; int retries, r, s; - if (!soap_valid_socket(fd)) + if (!soap_valid_socket(sk)) return soap_set_receiver_error(soap, "SSL/TLS error", "No socket in soap_ssl_accept()", SOAP_SSL_ERROR); soap->ssl_flags &= ~SOAP_SSL_CLIENT; if (!soap->ctx && (soap->error = soap->fsslauth(soap))) @@ -3402,12 +3577,12 @@ soap_ssl_accept(struct soap *soap) } else SSL_clear(soap->ssl); - bio = BIO_new_socket((int)fd, BIO_NOCLOSE); + bio = BIO_new_socket((int)sk, BIO_NOCLOSE); SSL_set_bio(soap->ssl, bio, bio); /* Set SSL sockets to non-blocking */ retries = 0; if (soap->accept_timeout) - { SOAP_SOCKNONBLOCK(fd) + { SOAP_SOCKNONBLOCK(sk) retries = 10*soap->accept_timeout; } if (retries <= 0) @@ -3419,14 +3594,14 @@ soap_ssl_accept(struct soap *soap) 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, fd, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); else - s = tcp_select(soap, fd, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); - if (s < 0 && soap->errnum != SOAP_EINTR) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) break; } else - { soap->errnum = soap_socket_errno(fd); + { soap->errnum = soap_socket_errno(sk); break; } } @@ -3452,17 +3627,17 @@ soap_ssl_accept(struct soap *soap) #endif #ifdef WITH_GNUTLS int retries = 0, r; - if (!soap_valid_socket(fd)) + if (!soap_valid_socket(sk)) return soap_set_receiver_error(soap, "SSL/TLS error", "No socket in soap_ssl_accept()", SOAP_SSL_ERROR); soap->ssl_flags &= ~SOAP_SSL_CLIENT; if (!soap->session && (soap->error = soap->fsslauth(soap))) { soap_closesock(soap); return soap->error; } - gnutls_transport_set_ptr(soap->session, (gnutls_transport_ptr_t)(long)fd); + gnutls_transport_set_ptr(soap->session, (gnutls_transport_ptr_t)(long)sk); /* Set SSL sockets to non-blocking */ if (soap->accept_timeout) - { SOAP_SOCKNONBLOCK(fd) + { SOAP_SOCKNONBLOCK(sk) retries = 10*soap->accept_timeout; } if (retries <= 0) @@ -3474,14 +3649,14 @@ soap_ssl_accept(struct soap *soap) break; if (r == GNUTLS_E_AGAIN || r == GNUTLS_E_INTERRUPTED) { if (!gnutls_record_get_direction(soap->session)) - s = tcp_select(soap, fd, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); else - s = tcp_select(soap, fd, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); - if (s < 0 && soap->errnum != SOAP_EINTR) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) break; } else - { soap->errnum = soap_socket_errno(fd); + { soap->errnum = soap_socket_errno(sk); break; } } @@ -3498,9 +3673,9 @@ soap_ssl_accept(struct soap *soap) } #endif if (soap->recv_timeout || soap->send_timeout) - SOAP_SOCKNONBLOCK(fd) + SOAP_SOCKNONBLOCK(sk) else - SOAP_SOCKBLOCK(fd) + SOAP_SOCKBLOCK(sk) soap->imode |= SOAP_ENC_SSL; soap->omode |= SOAP_ENC_SSL; return SOAP_OK; @@ -3555,7 +3730,12 @@ tcp_error(struct soap *soap) msg = soap_code_str(h_error_codes, soap->errnum); if (!msg) #endif - { sprintf(soap->msgbuf, "TCP/UDP IP error %d", soap->errnum); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "TCP/UDP IP error %d", soap->errnum); +#else + sprintf(soap->msgbuf, "TCP/UDP IP error %d", soap->errnum); +#endif msg = soap->msgbuf; } } @@ -3591,7 +3771,7 @@ tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr) { memcpy(inaddr, &iadd, sizeof(iadd)); return SOAP_OK; } -#if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__))) +#if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__))) || defined(__ANDROID__) 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)) @@ -3644,10 +3824,10 @@ 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; + SOAP_SOCKET sk; int err = 0; #ifndef WITH_LEAN -#ifndef WITH_WIN32 +#ifndef WIN32 int len = SOAP_BUFLEN; #else int len = SOAP_BUFLEN + 1; /* speeds up windows xfer */ @@ -3686,7 +3866,7 @@ tcp_connect(struct soap *soap, const char *endpoint, const char *host, int port) } ressave = res; again: - fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol); soap->errmode = 0; #else #ifndef WITH_LEAN @@ -3694,12 +3874,12 @@ again: #endif #ifndef WITH_LEAN if ((soap->omode & SOAP_IO_UDP)) - fd = socket(AF_INET, SOCK_DGRAM, 0); + sk = socket(AF_INET, SOCK_DGRAM, 0); else #endif - fd = socket(AF_INET, SOCK_STREAM, 0); + sk = socket(AF_INET, SOCK_STREAM, 0); #endif - if (!soap_valid_socket(fd)) + if (!soap_valid_socket(sk)) { #ifdef WITH_IPV6 if (res->ai_next) @@ -3707,7 +3887,7 @@ again: goto again; } #endif - soap->errnum = soap_socket_errno(fd); + soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "socket failed in tcp_connect()", SOAP_TCP_ERROR); #ifdef WITH_IPV6 freeaddrinfo(ressave); @@ -3717,10 +3897,10 @@ again: #ifdef SOCKET_CLOSE_ON_EXEC #ifdef WIN32 #ifndef UNDER_CE - SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0); + SetHandleInformation((HANDLE)sk, HANDLE_FLAG_INHERIT, 0); #endif #else - fcntl(fd, F_SETFD, 1); + fcntl(sk, F_SETFD, 1); #endif #endif #ifndef WITH_LEAN @@ -3729,57 +3909,57 @@ again: 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); + if (setsockopt(sk, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); #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); + else if (soap->connect_flags && setsockopt(sk, SOL_SOCKET, soap->connect_flags, (char*)&set, sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); #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); + if ((soap->keep_alive || soap->tcp_keep_alive) && setsockopt(sk, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); #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); + if (setsockopt(sk, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); #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); + if (setsockopt(sk, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); #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); + if (soap->tcp_keep_idle && setsockopt((SOAP_SOCKET)sk, IPPROTO_TCP, TCP_KEEPIDLE, (char*)&(soap->tcp_keep_idle), sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_KEEPIDLE failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, (SOAP_SOCKET)fd); + soap->fclosesocket(soap, (SOAP_SOCKET)sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif @@ -3787,10 +3967,10 @@ again: } #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); + if (soap->tcp_keep_intvl && setsockopt((SOAP_SOCKET)sk, IPPROTO_TCP, TCP_KEEPINTVL, (char*)&(soap->tcp_keep_intvl), sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_KEEPINTVL failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, (SOAP_SOCKET)fd); + soap->fclosesocket(soap, (SOAP_SOCKET)sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif @@ -3798,10 +3978,10 @@ again: } #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); + if (soap->tcp_keep_cnt && setsockopt((SOAP_SOCKET)sk, IPPROTO_TCP, TCP_KEEPCNT, (char*)&(soap->tcp_keep_cnt), sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_KEEPCNT failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, (SOAP_SOCKET)fd); + soap->fclosesocket(soap, (SOAP_SOCKET)sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif @@ -3809,10 +3989,10 @@ again: } #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); + if (!(soap->omode & SOAP_IO_UDP) && setsockopt(sk, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif @@ -3826,38 +4006,40 @@ again: } #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); + if ((soap->omode & SOAP_IO_UDP)) + { if (soap->ipv4_multicast_ttl) + { unsigned char ttl = soap->ipv4_multicast_ttl; + if (setsockopt(sk, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl))) + { soap->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_TTL failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } } + if ((soap->omode & SOAP_IO_UDP) && soap->ipv4_multicast_if && !soap->ipv6_multicast_if) + { if (setsockopt(sk, IPPROTO_IP, IP_MULTICAST_IF, (char*)soap->ipv4_multicast_if, sizeof(struct in_addr))) #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; - } + { soap->errnum = soap_socket_errno(sk); + soap_set_sender_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_IF failed in tcp_connect()", SOAP_TCP_ERROR); + soap->fclosesocket(soap, sk); + 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; - } + if (setsockopt(sk, IPPROTO_IP, IP_MULTICAST_IF, (char*)soap->ipv4_multicast_if, sizeof(struct in_addr))) + { soap->errnum = soap_socket_errno(sk); + soap_set_sender_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_IF failed in tcp_connect()", SOAP_TCP_ERROR); + soap->fclosesocket(soap, sk); + return SOAP_INVALID_SOCKET; + } #endif + } } #endif #endif - DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Opening socket %d to host='%s' port=%d\n", fd, host, port)); + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Opening socket=%d to host='%s' port=%d\n", sk, host, port)); #ifndef WITH_IPV6 soap->peerlen = sizeof(soap->peer); memset((void*)&soap->peer, 0, sizeof(soap->peer)); @@ -3866,7 +4048,7 @@ again: 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); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } soap->peer.sin_port = htons((short)soap->proxy_port); @@ -3874,7 +4056,7 @@ again: 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); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } soap->peer.sin_port = htons((short)port); @@ -3882,34 +4064,34 @@ again: soap->errmode = 0; #ifndef WITH_LEAN if ((soap->omode & SOAP_IO_UDP)) - return fd; + return sk; #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; + return sk; } #endif #ifndef WITH_LEAN if (soap->connect_timeout) - SOAP_SOCKNONBLOCK(fd) + SOAP_SOCKNONBLOCK(sk) else - SOAP_SOCKBLOCK(fd) + SOAP_SOCKBLOCK(sk) retries = 10; #endif for (;;) { #ifdef WITH_IPV6 - if (connect(fd, res->ai_addr, (int)res->ai_addrlen)) + if (connect(sk, res->ai_addr, (int)res->ai_addrlen)) #else - if (connect(fd, (struct sockaddr*)&soap->peer, sizeof(soap->peer))) + if (connect(sk, (struct sockaddr*)&soap->peer, sizeof(soap->peer))) #endif - { err = soap_socket_errno(fd); + { err = soap_socket_errno(sk); #ifndef WITH_LEAN if (err == SOAP_EADDRINUSE) - { soap->fclosesocket(soap, fd); + { soap->fclosesocket(soap, sk); if (retries-- > 0) goto again; } @@ -3918,23 +4100,23 @@ again: SOAP_SOCKLEN_T k; for (;;) { register int r; - r = tcp_select(soap, fd, SOAP_TCP_SELECT_SND, soap->connect_timeout); + r = tcp_select(soap, sk, 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->fclosesocket(soap, sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif return SOAP_INVALID_SOCKET; } - r = soap->errnum; + r = soap->errnum = soap_socket_errno(sk); 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->fclosesocket(soap, sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif @@ -3942,13 +4124,13 @@ again: } } 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 */ + if (!getsockopt(sk, 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->errnum = soap_socket_errno(sk); soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif @@ -3958,7 +4140,7 @@ again: #ifdef WITH_IPV6 if (res->ai_next) { res = res->ai_next; - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); goto again; } #endif @@ -3966,7 +4148,7 @@ again: { 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); + soap->fclosesocket(soap, sk); #ifdef WITH_IPV6 freeaddrinfo(ressave); #endif @@ -3980,7 +4162,7 @@ again: soap->peerlen = 0; /* IPv6: already connected so use send() */ freeaddrinfo(ressave); #endif - soap->socket = fd; + soap->socket = sk; soap->imode &= ~SOAP_ENC_SSL; soap->omode &= ~SOAP_ENC_SSL; if (!soap_tag_cmp(endpoint, "https:*")) @@ -3995,62 +4177,65 @@ again: soap_mode om = soap->omode; /* make sure we only parse HTTP */ size_t n = soap->count; /* save the content length */ const char *userid, *passwd; + int status = soap->status; /* save the current status/command */ + short keep_alive = soap->keep_alive; /* save the KA status */ 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); - 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); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connecting to %s proxy server %s for destination endpoint %s\n", soap->proxy_http_version, soap->proxy_host, endpoint)); +#ifdef WITH_NTLM + if (soap->ntlm_challenge) + { if (soap_ntlm_handshake(soap, SOAP_CONNECT, endpoint, host, port)) return soap->error; - } } #endif - if ((soap->error = soap->fposthdr(soap, NULL, NULL)) - || soap_flush(soap)) - { soap->fclosesocket(soap, fd); + if (soap_begin_send(soap)) + { soap->fclosesocket(soap, sk); + return SOAP_INVALID_SOCKET; + } + soap->status = SOAP_CONNECT; + soap->keep_alive = 1; + if ((soap->error = soap->fpost(soap, endpoint, host, port, NULL, NULL, 0)) + || soap_end_send_flush(soap)) + { soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } + soap->keep_alive = keep_alive; 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->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } + soap->status = status; /* restore */ 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); + { soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } if (endpoint) - strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint)-1); /* restore */ + { strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint)); /* restore */ + soap->endpoint[sizeof(soap->endpoint) - 1] = '\0'; + } soap->mode = m; } #ifdef WITH_OPENSSL soap->ssl_flags |= SOAP_SSL_CLIENT; if (!soap->ctx && (soap->error = soap->fsslauth(soap))) - { soap->fclosesocket(soap, fd); + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL required, but no ctx set\n")); + soap->fclosesocket(soap, sk); + soap->error = SOAP_SSL_ERROR; return SOAP_INVALID_SOCKET; } if (!soap->ssl) { soap->ssl = SSL_new(soap->ctx); if (!soap->ssl) - { soap->fclosesocket(soap, fd); + { soap->fclosesocket(soap, sk); soap->error = SOAP_SSL_ERROR; return SOAP_INVALID_SOCKET; } @@ -4065,16 +4250,16 @@ again: } soap->imode |= SOAP_ENC_SSL; soap->omode |= SOAP_ENC_SSL; - bio = BIO_new_socket((int)fd, BIO_NOCLOSE); + bio = BIO_new_socket((int)sk, BIO_NOCLOSE); SSL_set_bio(soap->ssl, bio, bio); /* Connect timeout: set SSL sockets to non-blocking */ retries = 0; if (soap->connect_timeout) - { SOAP_SOCKNONBLOCK(fd) + { SOAP_SOCKNONBLOCK(sk) retries = 10*soap->connect_timeout; } else - SOAP_SOCKBLOCK(fd) + SOAP_SOCKBLOCK(sk) if (retries <= 0) retries = 100; /* timeout: 10 sec retries, 100 times 0.1 sec */ /* Try connecting until success or timeout (when nonblocking) */ @@ -4083,51 +4268,56 @@ again: { 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, fd, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + if (err == SSL_ERROR_WANT_READ) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); else - s = tcp_select(soap, fd, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); - if (s < 0 && soap->errnum != SOAP_EINTR) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) { 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->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } - if (s == 0 && retries-- <= 0) + if (s == 0 && retries-- <= 0) { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL/TLS connect timeout\n")); soap_set_sender_error(soap, "Timeout", "SSL_connect failed in tcp_connect()", SOAP_TCP_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } } - else + 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->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } } } while (!SSL_is_init_finished(soap->ssl)); /* Set SSL sockets to nonblocking */ - SOAP_SOCKNONBLOCK(fd) + SOAP_SOCKNONBLOCK(sk) /* 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/TLS certificate presented by peer cannot be verified in tcp_connect()", SOAP_SSL_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } if (!(soap->ssl_flags & SOAP_SSL_SKIP_HOST_CHECK)) { X509_NAME *subj; + STACK_OF(CONF_VALUE) *val = NULL; +#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) + GENERAL_NAMES *names = NULL; +#else int ext_count; +#endif int ok = 0; - X509 *peer; - peer = SSL_get_peer_certificate(soap->ssl); + X509 *peer = SSL_get_peer_certificate(soap->ssl); if (!peer) { soap_set_sender_error(soap, "SSL/TLS error", "No SSL/TLS certificate was presented by the peer in tcp_connect()", SOAP_SSL_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } +#if (OPENSSL_VERSION_NUMBER < 0x0090800fL) ext_count = X509_get_ext_count(peer); if (ext_count > 0) { int i; @@ -4136,36 +4326,42 @@ again: 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 (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); - } + void *ext_data; + if (meth->it) + ext_data = ASN1_item_d2i(NULL, &data, ext->value->length, ASN1_ITEM_ptr(meth->it)); + else + { /* OpenSSL is not 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); + } + if (ext_data) + val = meth->i2v(meth, ext_data, NULL); + else + val = NULL; + if (meth->it) + ASN1_item_free((ASN1_VALUE*)ext_data, ASN1_ITEM_ptr(meth->it)); + else + meth->ext_free(ext_data); #else - ext_data = meth->d2i(NULL, &data, ext->value->length); + void *ext_data = meth->d2i(NULL, &data, ext->value->length); + if (ext_data) + val = meth->i2v(meth, ext_data, NULL); + meth->ext_free(ext_data); #endif - if (ext_data) - { val = meth->i2v(meth, ext_data, NULL); - if (val) - { for (j = 0; j < sk_CONF_VALUE_num(val); j++) + if (val) + { int j; + 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; @@ -4174,20 +4370,30 @@ again: } 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; } } +#else + names = (GENERAL_NAMES*)X509_get_ext_d2i(peer, NID_subject_alt_name, NULL, NULL); + if (names) + { val = i2v_GENERAL_NAMES(NULL, names, val); + sk_GENERAL_NAME_pop_free(names, GENERAL_NAME_free); + } + if (val) + { int j; + 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); + } +#endif if (!ok && (subj = X509_get_subject_name(peer))) { int i = -1; do @@ -4205,6 +4411,11 @@ again: if (tmp) { if (!soap_tag_cmp(host, (const char*)tmp)) ok = 1; + else if (tmp[0] == '*') /* wildcard domain */ + { const char *t = strchr(host, '.'); + if (t && !soap_tag_cmp(t, (const char*)tmp+1)) + ok = 1; + } OPENSSL_free(tmp); } } @@ -4214,7 +4425,7 @@ again: X509_free(peer); if (!ok) { soap_set_sender_error(soap, "SSL/TLS error", "SSL/TLS certificate host name mismatch in tcp_connect()", SOAP_SSL_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } } @@ -4223,17 +4434,17 @@ again: #ifdef WITH_GNUTLS soap->ssl_flags |= SOAP_SSL_CLIENT; if (!soap->session && (soap->error = soap->fsslauth(soap))) - { soap->fclosesocket(soap, fd); + { soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } - gnutls_transport_set_ptr(soap->session, (gnutls_transport_ptr_t)(long)fd); + gnutls_transport_set_ptr(soap->session, (gnutls_transport_ptr_t)(long)sk); /* Set SSL sockets to non-blocking */ if (soap->connect_timeout) - { SOAP_SOCKNONBLOCK(fd) + { SOAP_SOCKNONBLOCK(sk) retries = 10*soap->connect_timeout; } else - SOAP_SOCKBLOCK(fd) + SOAP_SOCKBLOCK(sk) if (retries <= 0) retries = 100; /* timeout: 10 sec retries, 100 times 0.1 sec */ while ((r = gnutls_handshake(soap->session))) @@ -4243,42 +4454,42 @@ again: break; if (r == GNUTLS_E_AGAIN || r == GNUTLS_E_INTERRUPTED) { if (!gnutls_record_get_direction(soap->session)) - s = tcp_select(soap, fd, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); else - s = tcp_select(soap, fd, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); - if (s < 0 && soap->errnum != SOAP_EINTR) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) break; } else - { soap->errnum = soap_socket_errno(fd); + { soap->errnum = soap_socket_errno(sk); break; } } if (r) { soap_set_sender_error(soap, soap_ssl_error(soap, r), "SSL/TLS handshake failed", SOAP_SSL_ERROR); - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); return SOAP_INVALID_SOCKET; } if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION)) { const char *err = ssl_verify(soap, host); if (err) - { soap->fclosesocket(soap, fd); + { soap->fclosesocket(soap, sk); soap->error = soap_set_sender_error(soap, "SSL/TLS error", err, SOAP_SSL_ERROR); return SOAP_INVALID_SOCKET; } } #endif #else - soap->fclosesocket(soap, fd); + soap->fclosesocket(soap, sk); soap->error = SOAP_SSL_ERROR; return SOAP_INVALID_SOCKET; #endif } if (soap->recv_timeout || soap->send_timeout) - SOAP_SOCKNONBLOCK(fd) + SOAP_SOCKNONBLOCK(sk) else - SOAP_SOCKBLOCK(fd) - return fd; + SOAP_SOCKBLOCK(sk) + return sk; } #endif #endif @@ -4287,22 +4498,24 @@ again: #ifndef WITH_NOIO #ifndef PALM_1 static int -tcp_select(struct soap *soap, SOAP_SOCKET s, int flags, int timeout) -{ register int r; +tcp_select(struct soap *soap, SOAP_SOCKET sk, int flags, int timeout) +{ int r; struct timeval tv; fd_set fd[3], *rfd, *sfd, *efd; + int retries = 0; + int eintr = SOAP_MAXEINTR; 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 !defined(FD_SETSIZE) || defined(__QNX__) || defined(QNX) + /* no FD_SETSIZE or select() is not MT safe on some QNX: always poll */ if (1) #else - if ((int)s >= (int)FD_SETSIZE) + /* if fd max set size exceeded, use poll() */ + if ((int)sk >= (int)FD_SETSIZE) #endif #ifdef HAVE_POLL { struct pollfd pollfd; - int retries = 0; - pollfd.fd = (int)s; + pollfd.fd = (int)sk; pollfd.events = 0; if (flags & SOAP_TCP_SELECT_RCV) pollfd.events |= POLLIN; @@ -4310,16 +4523,17 @@ tcp_select(struct soap *soap, SOAP_SOCKET s, int flags, int timeout) pollfd.events |= POLLOUT; if (flags & SOAP_TCP_SELECT_ERR) pollfd.events |= POLLERR; - if (timeout < 0) + if (timeout <= 0) timeout /= -1000; /* -usec -> ms */ - else if (timeout <= 1000000) /* avoid overflow */ - timeout *= 1000; /* sec -> ms */ else - { retries = timeout / 1000000; - timeout = 1000000000; + { retries = timeout - 1; + timeout = 1000; } - do r = poll(&pollfd, 1, timeout); - while (r == 0 && retries--); + do + { r = poll(&pollfd, 1, timeout); + if (r < 0 && (soap->errnum = soap_socket_errno(sk)) == SOAP_EINTR && eintr--) + continue; + } while (r == 0 && retries--); if (r > 0) { r = 0; if ((flags & SOAP_TCP_SELECT_RCV) && (pollfd.revents & POLLIN)) @@ -4329,8 +4543,6 @@ tcp_select(struct soap *soap, SOAP_SOCKET s, int flags, int timeout) 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 @@ -4339,42 +4551,46 @@ tcp_select(struct soap *soap, SOAP_SOCKET s, int flags, int timeout) } #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 (timeout > 0) + retries = timeout - 1; + do + { rfd = sfd = efd = NULL; + if (flags & SOAP_TCP_SELECT_RCV) + { rfd = &fd[0]; + FD_ZERO(rfd); + FD_SET(sk, rfd); + } + if (flags & SOAP_TCP_SELECT_SND) + { sfd = &fd[1]; + FD_ZERO(sfd); + FD_SET(sk, sfd); + } + if (flags & SOAP_TCP_SELECT_ERR) + { efd = &fd[2]; + FD_ZERO(efd); + FD_SET(sk, efd); + } + if (timeout <= 0) + { tv.tv_sec = -timeout / 1000000; + tv.tv_usec = -timeout % 1000000; + } + else + { tv.tv_sec = 1; + tv.tv_usec = 0; + } + r = select((int)sk + 1, rfd, sfd, efd, &tv); + if (r < 0 && (soap->errnum = soap_socket_errno(sk)) == SOAP_EINTR && eintr--) + continue; + } while (r == 0 && retries--); if (r > 0) { r = 0; - if ((flags & SOAP_TCP_SELECT_RCV) && FD_ISSET(s, rfd)) + if ((flags & SOAP_TCP_SELECT_RCV) && FD_ISSET(sk, rfd)) r |= SOAP_TCP_SELECT_RCV; - if ((flags & SOAP_TCP_SELECT_SND) && FD_ISSET(s, sfd)) + if ((flags & SOAP_TCP_SELECT_SND) && FD_ISSET(sk, sfd)) r |= SOAP_TCP_SELECT_SND; - if ((flags & SOAP_TCP_SELECT_ERR) && FD_ISSET(s, efd)) + if ((flags & SOAP_TCP_SELECT_ERR) && FD_ISSET(sk, efd)) r |= SOAP_TCP_SELECT_ERR; } - else if (r < 0) - soap->errnum = soap_socket_errno(s); return r; } #endif @@ -4385,18 +4601,19 @@ tcp_select(struct soap *soap, SOAP_SOCKET s, int flags, int timeout) #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 */ +{ SOAP_SOCKET sk; + (void)soap; + sk = 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); + SetHandleInformation((HANDLE)sk, HANDLE_FLAG_INHERIT, 0); #endif #else - fcntl(fd, F_SETFD, FD_CLOEXEC); + fcntl(sk, F_SETFD, FD_CLOEXEC); #endif #endif - return fd; + return sk; } #endif #endif @@ -4422,31 +4639,35 @@ tcp_disconnect(struct soap *soap) } } 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; + /* SSL shutdown does not work when reads are pending, non-blocking */ + if (r == 0) + { while (SSL_want_read(soap->ssl)) + { if (SSL_read(soap->ssl, NULL, 0) + || 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, SOAP_SHUT_WR)) { -#ifndef WITH_LEAN - /* - wait up to 10 seconds for close_notify to be sent by peer (if peer not +#if !defined(WITH_LEAN) && !defined(WIN32) + /* + wait up to 5 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) + r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, 5); + if (r <= 0) { 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); + SSL_free(soap->ssl); + soap->ssl = NULL; return SOAP_OK; } #else @@ -4493,9 +4714,10 @@ tcp_disconnect(struct soap *soap) #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); +tcp_closesocket(struct soap *soap, SOAP_SOCKET sk) +{ (void)soap; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Close socket=%d\n", (int)sk)); + return soap_closesocket(sk); } #endif #endif @@ -4504,9 +4726,10 @@ tcp_closesocket(struct soap *soap, SOAP_SOCKET fd) #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); +tcp_shutdownsocket(struct soap *soap, SOAP_SOCKET sk, int how) +{ (void)soap; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shutdown socket=%d how=%d\n", (int)sk, how)); + return shutdown(sk, how); } #endif #endif @@ -4529,7 +4752,7 @@ soap_bind(struct soap *soap, const char *host, int port, int backlog) #endif #endif #ifndef WITH_LEAN -#ifndef WITH_WIN32 +#ifndef WIN32 int len = SOAP_BUFLEN; #else int len = SOAP_BUFLEN + 1; /* speeds up windows xfer */ @@ -4583,6 +4806,7 @@ soap_bind(struct soap *soap, const char *host, int port, int backlog) soap_set_receiver_error(soap, tcp_error(soap), "socket failed in soap_bind()", SOAP_TCP_ERROR); return SOAP_INVALID_SOCKET; } + soap->port = port; #ifndef WITH_LEAN if ((soap->omode & SOAP_IO_UDP)) soap->socket = soap->master; @@ -4602,7 +4826,7 @@ soap_bind(struct soap *soap, const char *host, int port, int backlog) 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))) + if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && (!((soap->imode | soap->omode) & SOAP_IO_UDP)) && 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; @@ -4629,14 +4853,14 @@ soap_bind(struct soap *soap, const char *host, int port, int backlog) #ifdef WITH_IPV6_V6ONLY if (setsockopt(soap->master, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&set, 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); + soap_set_receiver_error(soap, tcp_error(soap), "setsockopt set IPV6_V6ONLY failed in soap_bind()", SOAP_TCP_ERROR); return SOAP_INVALID_SOCKET; } #endif #ifdef WITH_NO_IPV6_V6ONLY if (setsockopt(soap->master, IPPROTO_IPV6, 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); + soap_set_receiver_error(soap, tcp_error(soap), "setsockopt unset IPV6_V6ONLY failed in soap_bind()", SOAP_TCP_ERROR); return SOAP_INVALID_SOCKET; } #endif @@ -4715,11 +4939,13 @@ soap_poll(struct soap *soap) } else #endif + { int t; 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)) + || recv(soap->socket, (char*)&t, 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) @@ -4744,8 +4970,9 @@ SOAP_SOCKET SOAP_FMAC2 soap_accept(struct soap *soap) { int n = (int)sizeof(soap->peer); + register int err; #ifndef WITH_LEAN -#ifndef WITH_WIN32 +#ifndef WIN32 int len = SOAP_BUFLEN; #else int len = SOAP_BUFLEN + 1; /* speeds up windows xfer */ @@ -4753,124 +4980,127 @@ soap_accept(struct soap *soap) 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_valid_socket(soap->master)) + { soap->errnum = 0; + soap_set_receiver_error(soap, tcp_error(soap), "no master socket in soap_accept()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + return soap->socket = soap->master; +#endif + 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_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)) - { + } + if (soap->accept_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)); - soap->ip = 0; /* info stored in soap->peer and soap->host */ - soap->port = 0; /* info stored in soap->peer and soap->host */ + unsigned int ip1, ip2, ip3, ip4; + char port[16]; + getnameinfo((struct sockaddr*)&soap->peer, n, soap->host, sizeof(soap->host), port, 16, NI_NUMERICHOST | NI_NUMERICSERV); + sscanf(soap->host, "%u.%u.%u.%u", &ip1, &ip2, &ip3, &ip4); + soap->ip = (unsigned long)ip1 << 24 | (unsigned long)ip2 << 16 | (unsigned long)ip3 << 8 | (unsigned long)ip4; + soap->port = soap_strtol(port, NULL, 10); +#else + soap->ip = ntohl(soap->peer.sin_addr.s_addr); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->host, sizeof(soap->host), "%u.%u.%u.%u", (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF); #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)); + sprintf(soap->host, "%u.%u.%u.%u", (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF); #endif + soap->port = (int)ntohs(soap->peer.sin_port); /* does not return port number on some systems */ +#endif + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket=%d at port=%d from IP='%s'\n", soap->socket, soap->port, soap->host)); #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))) + 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_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_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); - if (soap->send_timeout || soap->recv_timeout) - SOAP_SOCKNONBLOCK(soap->socket) - else - SOAP_SOCKBLOCK(soap->socket) - 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); + if (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); + if (soap->send_timeout || soap->recv_timeout) + SOAP_SOCKNONBLOCK(soap->socket) + else + SOAP_SOCKBLOCK(soap->socket) + 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 @@ -4898,11 +5128,13 @@ soap_closesock(struct soap *soap) 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; + if (!(soap->mode & SOAP_MIME_POSTCHECK)) + { 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; } @@ -4910,6 +5142,21 @@ soap_closesock(struct soap *soap) /******************************************************************************/ #ifndef WITH_NOIO +#ifndef PALM_1 +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_force_closesock(struct soap *soap) +{ soap->keep_alive = 0; + if (soap_valid_socket(soap->socket)) + return soap_closesocket(soap->socket); + return SOAP_OK; +} +#endif +#endif + +/******************************************************************************/ +#ifndef WITH_NOIO #ifndef PALM_2 SOAP_FMAC1 void @@ -4938,7 +5185,7 @@ soap_done(struct soap *soap) #endif if (soap_check_state(soap)) return; - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Done with context\n")); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Done with context%s\n", soap->state == SOAP_COPY ? " copy" : "")); soap_free_temp(soap); while (soap->clist) { struct soap_clist *p = soap->clist->next; @@ -4948,6 +5195,8 @@ soap_done(struct soap *soap) if (soap->state == SOAP_INIT) soap->omode &= ~SOAP_IO_UDP; /* to force close the socket */ soap->keep_alive = 0; /* to force close the socket */ + if (soap->master == soap->socket) /* do not close twice */ + soap->master = SOAP_INVALID_SOCKET; soap_closesock(soap); #ifdef WITH_COOKIES soap_free_cookies(soap); @@ -4964,11 +5213,11 @@ soap_done(struct soap *soap) soap->fmalloc = NULL; #ifndef WITH_NOHTTP soap->fpost = http_post; - soap->fput = http_put; soap->fget = http_get; + soap->fput = http_405; soap->fdel = http_405; - soap->fopt = http_405; - soap->fhead = http_405; + soap->fopt = http_200; + soap->fhead = http_200; soap->fform = NULL; soap->fposthdr = http_post_header; soap->fresponse = http_response; @@ -4996,12 +5245,18 @@ soap_done(struct soap *soap) soap->fpoll = NULL; #endif #ifndef WITH_LEANER + soap->feltbegin = NULL; + soap->feltendin = NULL; + soap->feltbegout = NULL; + soap->feltendout = NULL; soap->fprepareinitsend = NULL; soap->fprepareinitrecv = NULL; soap->fpreparesend = NULL; soap->fpreparerecv = NULL; soap->fpreparefinalsend = NULL; soap->fpreparefinalrecv = NULL; + soap->ffiltersend = NULL; + soap->ffilterrecv = NULL; #endif soap->fseterror = NULL; soap->fignore = NULL; @@ -5060,7 +5315,11 @@ soap_done(struct soap *soap) } #endif #ifdef WITH_C_LOCALE +# ifdef WIN32 + _free_locale(soap->c_locale); +# else freelocale(soap->c_locale); +# endif #endif #ifdef WITH_ZLIB if (soap->d_stream) @@ -5098,22 +5357,31 @@ soap_done(struct soap *soap) /******************************************************************************/ #ifndef WITH_NOHTTP #ifndef PALM_1 -int +static int http_parse(struct soap *soap) { char header[SOAP_HDRLEN], *s; - unsigned short httpcmd = 0, status = 0; + unsigned short httpcmd = 0; + int 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; +#ifdef WITH_NTLM + if (!soap->ntlm_challenge) +#endif + { soap->userid = NULL; + soap->passwd = NULL; + soap->authrealm = NULL; + } +#ifdef WITH_NTLM + soap->ntlm_challenge = NULL; +#endif soap->proxy_from = NULL; - soap->http_content = NULL; - soap->status = 0; do - { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf))) + { soap->length = 0; + soap->http_content = NULL; + soap->action = NULL; + soap->status = 0; + soap->body = 1; + if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf))) { if (soap->error == SOAP_EOF) return SOAP_EOF; return soap->error = 414; @@ -5167,9 +5435,7 @@ http_parse(struct soap *soap) { 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; - } + soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE; /* HTTP 1.0 does not support chunked transfers */ } if (soap->keep_alive < 0) soap->keep_alive = 1; @@ -5193,12 +5459,18 @@ http_parse(struct soap *soap) if (s && httpcmd) { size_t m = strlen(soap->endpoint); size_t n = m + (s - soap->msgbuf) - l - 1; - if (m > n) - m = n; + size_t k; if (n >= sizeof(soap->endpoint)) n = sizeof(soap->endpoint) - 1; - strncpy(soap->path, soap->msgbuf + l, n - m); - soap->path[n - m] = '\0'; + if (m > n) + m = n; + k = n - m + 1; + if (k > sizeof(soap->path)) + k = sizeof(soap->path); + strncpy(soap->path, soap->msgbuf + l, k); + soap->path[k - 1] = '\0'; + if (*soap->path && *soap->path != '/') + *soap->endpoint = '\0'; strcat(soap->endpoint, soap->path); DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Target endpoint='%s'\n", soap->endpoint)); if (httpcmd > 1) @@ -5209,8 +5481,8 @@ http_parse(struct soap *soap) case 4: soap->error = soap->fdel(soap); break; case 5: soap->error = soap->fopt(soap); break; case 6: soap->error = soap->fhead(soap); break; - default: soap->error = 405; break; - } + default: soap->error = 405; break; + } DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP handler return = %d\n", soap->error)); if (soap->error == SOAP_OK) soap->error = SOAP_STOP; /* prevents further processing */ @@ -5223,26 +5495,27 @@ http_parse(struct soap *soap) 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. - */ - if (soap->length > 0 || (soap->http_content && soap->recv_timeout) || (soap->imode & SOAP_IO) == SOAP_IO_CHUNK) - { if (((soap->status > 200 && soap->status <= 299) || soap->status == 400 || soap->status == 500)) + } +#if 0 + if (soap->length > 0 || (soap->http_content && (!soap->keep_alive || soap->recv_timeout)) || (soap->imode & SOAP_IO) == SOAP_IO_CHUNK) +#endif + if (soap->body) + { if ((soap->status >= 200 && soap->status <= 299) /* OK, Accepted, etc */ + || soap->status == 400 /* Bad Request */ + || soap->status == 500) /* Internal Server Error */ return SOAP_OK; /* force close afterwards in soap_closesock() */ soap->keep_alive = 0; #ifndef WITH_LEAN /* read HTTP body for error details */ - s = soap_get_http_body(soap); + s = soap_get_http_body(soap, NULL); if (s) return soap_set_receiver_error(soap, soap->msgbuf, s, soap->status); #endif } + else if (soap->status >= 200 && soap->status <= 299) + return soap->error = 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); } @@ -5263,7 +5536,6 @@ http_parse_header(struct soap *soap, const char *key, const char *val) #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")) @@ -5281,7 +5553,8 @@ http_parse_header(struct soap *soap, const char *key, const char *val) if (action) { if (*action == '"') { soap->action = soap_strdup(soap, action + 1); - soap->action[strlen(soap->action) - 1] = '\0'; + if (*soap->action) + soap->action[strlen(soap->action) - 1] = '\0'; } else soap->action = soap_strdup(soap, action); @@ -5290,6 +5563,8 @@ http_parse_header(struct soap *soap, const char *key, const char *val) #endif else if (!soap_tag_cmp(key, "Content-Length")) { soap->length = soap_strtoul(val, NULL, 10); + if (!soap->length) + soap->body = 0; } else if (!soap_tag_cmp(key, "Content-Encoding")) { if (!soap_tag_cmp(val, "deflate")) @@ -5331,8 +5606,14 @@ http_parse_header(struct soap *soap, const char *key, const char *val) soap->keep_alive = 0; } #ifndef WITH_LEAN - else if (!soap_tag_cmp(key, "Authorization")) - { if (!soap_tag_cmp(val, "Basic *")) + else if (!soap_tag_cmp(key, "Authorization") || !soap_tag_cmp(key, "Proxy-Authorization")) + { +#ifdef WITH_NTLM + if (!soap_tag_cmp(val, "NTLM*")) + soap->ntlm_challenge = soap_strdup(soap, val + 4); + else +#endif + if (!soap_tag_cmp(val, "Basic *")) { int n; char *s; soap_base642s(soap, val + 6, soap->tmpbuf, sizeof(soap->tmpbuf) - 1, &n); @@ -5344,8 +5625,14 @@ http_parse_header(struct soap *soap, const char *key, const char *val) } } } - 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, "WWW-Authenticate") || !soap_tag_cmp(key, "Proxy-Authenticate")) + { +#ifdef WITH_NTLM + if (!soap_tag_cmp(val, "NTLM*")) + soap->ntlm_challenge = soap_strdup(soap, val + 4); + else +#endif + 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")) @@ -5358,7 +5645,8 @@ http_parse_header(struct soap *soap, const char *key, const char *val) else if (!soap_tag_cmp(key, "SOAPAction")) { if (*val == '"') { soap->action = soap_strdup(soap, val + 1); - soap->action[strlen(soap->action) - 1] = '\0'; + if (*soap->action) + soap->action[strlen(soap->action) - 1] = '\0'; } else soap->action = soap_strdup(soap, val); @@ -5441,24 +5729,28 @@ static const char* soap_decode(char *buf, size_t len, const char *val, const char *sep) { const char *s; char *t = buf; + size_t i = len; 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((soap_wchar)*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 + if (len > 0) + { if (*s == '"') + { s++; + while (*s && *s != '"' && --i) *t++ = *s++; } + else + { while (*s && !soap_blank((soap_wchar)*s) && !strchr(sep, *s) && --i) + { if (*s == '%' && s[1] && s[2]) + { *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++; + } + } + buf[len - 1] = '\0'; /* appease */ } *t = '\0'; while (*s && !strchr(sep, *s)) @@ -5474,6 +5766,7 @@ soap_decode(char *buf, size_t len, const char *val, const char *sep) static const char* http_error(struct soap *soap, int status) { register const char *msg = SOAP_STR_EOS; + (void)soap; #ifndef WITH_LEAN msg = soap_code_str(h_http_error_codes, status); if (!msg) @@ -5485,21 +5778,25 @@ http_error(struct soap *soap, int status) #endif /******************************************************************************/ + #ifndef WITH_NOHTTP #ifndef PALM_1 static int -http_put(struct soap *soap) -{ return http_parse(soap); +http_get(struct soap *soap) +{ (void)soap; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP GET request\n")); + return SOAP_GET_METHOD; } #endif #endif -/******************************************************************************/ +/******************************************************************************/ #ifndef WITH_NOHTTP #ifndef PALM_1 static int -http_get(struct soap *soap) -{ return SOAP_GET_METHOD; +http_405(struct soap *soap) +{ (void)soap; + return 405; } #endif #endif @@ -5508,8 +5805,8 @@ http_get(struct soap *soap) #ifndef WITH_NOHTTP #ifndef PALM_1 static int -http_405(struct soap *soap) -{ return 405; +http_200(struct soap *soap) +{ return soap_send_empty_response(soap, 200); } #endif #endif @@ -5521,38 +5818,103 @@ 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"; + switch (soap->status) + { case SOAP_GET: + s = "GET"; + break; + case SOAP_PUT: + s = "PUT"; + break; + case SOAP_DEL: + s = "DELETE"; + break; + case SOAP_CONNECT: + s = "CONNECT"; + break; + default: + s = "POST"; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP %s to %s\n", s, endpoint ? endpoint : "(null)")); #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:*")) + if (strlen(endpoint) + strlen(soap->http_version) > sizeof(soap->tmpbuf) - 80 + || strlen(host) + strlen(soap->http_version) > sizeof(soap->tmpbuf) - 80) + return soap->error = SOAP_EOM; /* prevent overrun (note that 'host' and 'soap->host' are substrings of 'endpoint') */ + if (soap->status == SOAP_CONNECT) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%s %s:%d HTTP/%s", s, soap->host, soap->port, soap->http_version); +#else + sprintf(soap->tmpbuf, "%s %s:%d HTTP/%s", s, soap->host, soap->port, soap->http_version); +#endif + } + else if (soap->proxy_host && endpoint) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%s %s HTTP/%s", s, endpoint, soap->http_version); +#else sprintf(soap->tmpbuf, "%s %s HTTP/%s", s, endpoint, soap->http_version); +#endif + } else + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%s /%s HTTP/%s", s, (*path == '/' ? path + 1 : path), soap->http_version); +#else sprintf(soap->tmpbuf, "%s /%s HTTP/%s", s, (*path == '/' ? path + 1 : path), soap->http_version); +#endif + } 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); + if ((soap->ssl && port != 443) || (!soap->ssl && port != 80)) #else if (port != 80) - sprintf(soap->tmpbuf, "%s:%d", host, port); +#endif + { +#ifdef WITH_IPV6 + if (*host != '[' && strchr(host, ':')) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "[%s]:%d", host, port); /* RFC 2732 */ +#else + sprintf(soap->tmpbuf, "[%s]:%d", host, port); /* RFC 2732 */ +#endif + } + else +#endif + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%s:%d", host, port); +#else + sprintf(soap->tmpbuf, "%s:%d", host, port); +#endif + } + } else - strcpy(soap->tmpbuf, host); + { +#ifdef WITH_IPV6 + if (*host != '[' && strchr(host, ':')) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "[%s]", host); /* RFC 2732 */ +#else + sprintf(soap->tmpbuf, "[%s]", host); /* RFC 2732 */ +#endif + } + else #endif - if ((err = soap->fposthdr(soap, "Host", soap->tmpbuf)) - || (err = soap->fposthdr(soap, "User-Agent", "gSOAP/2.7")) - || (err = soap_puthttphdr(soap, SOAP_OK, count))) + strcpy(soap->tmpbuf, host); + } + if ((err = soap->fposthdr(soap, "Host", soap->tmpbuf))) + return err; + if ((err = soap->fposthdr(soap, "User-Agent", "gSOAP/2.8"))) + return err; + if ((err = soap_puthttphdr(soap, SOAP_OK, count))) return err; #ifdef WITH_ZLIB #ifdef WITH_GZIP @@ -5563,20 +5925,51 @@ http_post(struct soap *soap, const char *endpoint, const char *host, int port, c return err; #endif #ifndef WITH_LEAN +#ifdef WITH_NTLM + if (soap->ntlm_challenge && strlen(soap->ntlm_challenge) + 6 < sizeof(soap->tmpbuf)) + { if (*soap->ntlm_challenge) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "NTLM %s", soap->ntlm_challenge); +#else + sprintf(soap->tmpbuf, "NTLM %s", soap->ntlm_challenge); +#endif + if (soap->proxy_host) + { if ((err = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf))) + return err; + } + else if ((err = soap->fposthdr(soap, "Authorization", soap->tmpbuf))) + return err; + } + } + else + { +#endif 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 "); + { strcpy(soap->tmpbuf, "Basic "); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf + 262, sizeof(soap->tmpbuf) - 262, "%s:%s", soap->userid, soap->passwd); +#else + sprintf(soap->tmpbuf + 262, "%s:%s", soap->userid, soap->passwd); +#endif 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 "); + { strcpy(soap->tmpbuf, "Basic "); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf + 262, sizeof(soap->tmpbuf) - 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd); +#else + sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd); +#endif 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; } +#ifdef WITH_NTLM + } +#endif #endif #ifdef WITH_COOKIES #ifdef WITH_OPENSSL @@ -5587,8 +5980,13 @@ http_post(struct soap *soap, const char *endpoint, const char *host, int port, c 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 (action && soap->status != SOAP_GET && soap->status != SOAP_DEL) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "\"%s\"", action); +#else + sprintf(soap->tmpbuf, "\"%s\"", strlen(action) < sizeof(soap->tmpbuf) - 3 ? action : SOAP_STR_EOS); +#endif if ((err = soap->fposthdr(soap, "SOAPAction", soap->tmpbuf))) return err; } @@ -5638,69 +6036,70 @@ http_post_header(struct soap *soap, const char *key, const char *val) static int http_response(struct soap *soap, int status, size_t count) { register int err; + char http[10]; + int code = status; + const char *line; #ifdef WMW_RPM_IO if (soap->rpmreqid) httpOutputEnable(soap->rpmreqid); #endif - if (strlen(soap->http_version) > 4) + if (!soap->http_version || 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 */ + 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)? */ + 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; - } + { +#ifdef HAVE_SNPRINTF + soap_snprintf(http, sizeof(http), "HTTP/%s", soap->http_version); +#else + sprintf(http, "HTTP/%s", soap->http_version); #endif } else + strcpy(http, "Status:"); + if (!status || status == SOAP_HTML || status == SOAP_FILE) + { if (count || ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK)) + code = 200; + else + code = 202; + } + else if (status < 200 || status >= 600) { const char *s = *soap_faultcode(soap); if (status >= SOAP_GET_METHOD && status <= SOAP_HTTP_METHOD) - s = "405 Method Not Allowed"; + code = 405; else if (soap->version == 2 && (!s || !strcmp(s, "SOAP-ENV:Sender"))) - s = "400 Bad Request"; + code = 400; 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 */ + code = 500; + } + line = http_error(soap, code); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP Status = %d %s\n", code, line)); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%s %d %s", http, code, line); #else - if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */ + sprintf(soap->tmpbuf, "%s %d %s", http, code, line); #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 */ + if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL))) + return err; +#ifndef WITH_LEAN + if (status == 401) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "Basic realm=\"%s\"", (soap->authrealm && strlen(soap->authrealm) < sizeof(soap->tmpbuf) - 14) ? soap->authrealm : "gSOAP Web Service"); +#else + sprintf(soap->tmpbuf, "Basic realm=\"%s\"", (soap->authrealm && strlen(soap->authrealm) < sizeof(soap->tmpbuf) - 14) ? soap->authrealm : "gSOAP Web Service"); +#endif + 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; } - if ((err = soap->fposthdr(soap, "Server", "gSOAP/2.7")) +#endif + if ((err = soap->fposthdr(soap, "Server", "gSOAP/2.8")) || (err = soap_puthttphdr(soap, status, count))) return err; #ifdef WITH_COOKIES @@ -5747,18 +6146,26 @@ soap_response(struct soap *soap, int status) } #endif -/******************************************************************************\ - * - * HTTP Cookies - * -\******************************************************************************/ +/******************************************************************************/ +#ifndef PALM_1 +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_url(struct soap *soap, const char *s, const char *t) +{ if (!t || (*t != '/' && *t != '?') || strlen(s) + strlen(t) >= sizeof(soap->msgbuf)) + return s; + strcpy(soap->msgbuf, s); + strcat(soap->msgbuf, t); + return soap->msgbuf; +} +#endif -#ifdef WITH_COOKIES /******************************************************************************/ +#ifndef PALM_1 SOAP_FMAC1 size_t SOAP_FMAC2 -soap_encode_cookie(const char *s, char *t, size_t len) +soap_encode_url(const char *s, char *t, size_t len) { register int c; register size_t n = len; while ((c = *s++) && --n > 0) @@ -5777,7 +6184,33 @@ soap_encode_cookie(const char *s, char *t, size_t len) *t = '\0'; return len - n; } +#endif + +/******************************************************************************/ +#ifndef PALM_1 +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_encode_url_string(struct soap *soap, const char *s) +{ if (s) + { size_t n = 3*strlen(s)+1; + char *t = (char*)soap_malloc(soap, n); + if (t) + { soap_encode_url(s, t, n); + return t; + } + } + return SOAP_STR_EOS; +} +#endif + +/******************************************************************************\ + * + * HTTP Cookies + * +\******************************************************************************/ +#ifdef WITH_COOKIES /******************************************************************************/ SOAP_FMAC1 struct soap_cookie* @@ -5792,9 +6225,9 @@ soap_cookie(struct soap *soap, const char *name, const char *domain, const char 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)")); + 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)); + { 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 @@ -5821,7 +6254,7 @@ soap_set_cookie(struct soap *soap, const char *name, const char *value, const ch 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)")); + 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))) @@ -5890,13 +6323,13 @@ soap_clr_cookie(struct soap *soap, const char *name, const char *domain, const c 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)")); + { 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)")); + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error in clear cookie='%s': cookie path not set\n", name ? name : "(null)")); return; } if (*path == '/') @@ -5956,7 +6389,7 @@ 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)")); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie expiration max-age=%ld: cookie='%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; @@ -6010,10 +6443,10 @@ soap_putsetcookies(struct soap *soap) ) { s = tmp; if (p->name) - s += soap_encode_cookie(p->name, s, tmp-s+4064); + s += soap_encode_url(p->name, s, tmp-s+4064); if (p->value && *p->value) { *s++ = '='; - s += soap_encode_cookie(p->value, s, tmp-s+4064); + s += soap_encode_url(p->value, s, tmp-s+4064); } if (p->domain && (int)strlen(p->domain) < tmp-s+4064) { strcpy(s, ";Domain="); @@ -6038,15 +6471,25 @@ soap_putsetcookies(struct soap *soap) s += strlen(s); } else - s += soap_encode_cookie(t, s, tmp-s+4064); + s += soap_encode_url(t, s, tmp-s+4064); } } if (p->version > 0 && s-tmp < 4060) - { sprintf(s, ";Version=%u", p->version); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(s, 4096 - (s-tmp), ";Version=%u", p->version); +#else + sprintf(s, ";Version=%u", p->version); +#endif s += strlen(s); } if (p->maxage >= 0 && s-tmp < 4060) - { sprintf(s, ";Max-Age=%ld", p->maxage); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(s, 4096 - (s-tmp), ";Max-Age=%ld", p->maxage); +#else + sprintf(s, ";Max-Age=%ld", p->maxage); +#endif s += strlen(s); } if (s-tmp < 4073 @@ -6073,8 +6516,11 @@ soap_putcookies(struct soap *soap, const char *domain, const char *path, int sec unsigned int version = 0; time_t now = time(NULL); char *s, tmp[4096]; + if (!domain || !path) + return SOAP_OK; + s = tmp; p = &soap->cookies; - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending cookies for domain=%s path=%s\n", domain, path)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending cookies for domain='%s' path='%s'\n", domain, path)); if (*path == '/') path++; while ((q = *p)) @@ -6119,30 +6565,68 @@ soap_putcookies(struct soap *soap, const char *domain, const char *path, int sec 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); + { size_t n = 12; + if (q->name) + n += 3*strlen(q->name); + if (q->value && *q->value) + n += 3*strlen(q->value) + 1; + if (q->path && *q->path) + n += strlen(q->path) + 9; + if (q->domain) + n += strlen(q->domain) + 11; + if (tmp - s + n > sizeof(tmp)) + { if (s == tmp) + return SOAP_OK; /* HTTP header size overflow */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie: %s\n", tmp)); + if ((soap->error = soap->fposthdr(soap, "Cookie", tmp))) + return soap->error; + s = tmp; + } + else if (s != tmp) + { strcat(s, " "); + s++; + } + if (q->version != version && s-tmp < 4060) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(s, 4096 - (s-tmp), "$Version=%u;", q->version); +#else + sprintf(s, "$Version=%u;", q->version); +#endif version = q->version; + s += strlen(s); } if (q->name) - s += soap_encode_cookie(q->name, s, tmp-s+4080); + s += soap_encode_url(q->name, s, tmp+sizeof(tmp)-s-16); if (q->value && *q->value) { *s++ = '='; - s += soap_encode_cookie(q->value, s, tmp-s+4080); + s += soap_encode_url(q->value, s, tmp+sizeof(tmp)-s-16); } - if (q->path && *q->path && (int)strlen(q->path) < tmp-s+4080) - { sprintf(s, ";$Path=\"/%s\"", (*q->path == '/' ? q->path + 1 : q->path)); + if (q->path && (s-tmp) + strlen(q->path) < 4060) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(s, 4096 - (s-tmp), ";$Path=\"/%s\"", (*q->path == '/' ? q->path + 1 : q->path)); +#else + sprintf(s, ";$Path=\"/%s\"", (*q->path == '/' ? q->path + 1 : q->path)); +#endif s += strlen(s); } - if (q->domain && (int)strlen(q->domain) < tmp-s+4080) + if (q->domain && (s-tmp) + strlen(q->domain) < 4060) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(s, 4096 - (s-tmp), ";$Domain=\"%s\"", q->domain); +#else 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; +#endif + s += strlen(s); + } } p = &q->next; } } + if (s != tmp) + if ((soap->error = soap->fposthdr(soap, "Cookie", tmp))) + return soap->error; return SOAP_OK; } @@ -6166,9 +6650,9 @@ soap_getcookies(struct soap *soap, const char *val) 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); + p->version = (int)soap_strtol(tmp, NULL, 10); + else + version = (int)soap_strtol(tmp, NULL, 10); } } else if (!soap_tag_cmp(tmp, "$Path")) @@ -6272,7 +6756,7 @@ soap_getcookies(struct soap *soap, const char *val) 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)); + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie='%s' value='%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; @@ -6324,7 +6808,7 @@ soap_getcookies(struct soap *soap, const char *val) } } 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)); + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie='%s' value='%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; @@ -6456,30 +6940,10 @@ soap_init_pht(struct soap *soap) 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) +soap_versioning(soap_new)(soap_mode imode, soap_mode omode) { struct soap *soap = (struct soap*)malloc(sizeof(struct soap)); if (soap) - soap_init2(soap, imode, omode); + soap_versioning(soap_init)(soap, imode, omode); return soap; } #endif @@ -6534,6 +6998,7 @@ 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; + (void)soap; if (soap->version == 2) soap->encoding = 1; if (a) @@ -6584,6 +7049,7 @@ 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; + (void)n; if (!soap->pblk || soap->pidx >= SOAP_PTRBLK) { register struct soap_pblk *pb = (struct soap_pblk*)SOAP_MALLOC(soap, sizeof(struct soap_pblk)); if (!pb) @@ -6599,7 +7065,7 @@ soap_pointer_enter(struct soap *soap, const void *p, const struct soap_array *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)); + 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; @@ -6678,8 +7144,6 @@ soap_begin_count(struct soap *soap) 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; @@ -6696,16 +7160,18 @@ soap_begin_count(struct soap *soap) soap->mustUnderstand = 0; soap->encoding = 0; soap->part = SOAP_BEGIN; + soap->event = 0; + soap->evlev = 0; 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); + if (soap->fprepareinitsend && (soap->mode & SOAP_IO) != SOAP_IO_STORE && (soap->error = soap->fprepareinitsend(soap))) + return soap->error; #endif + 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)); return SOAP_OK; } #endif @@ -6718,8 +7184,10 @@ 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); + if ((soap->mode & SOAP_IO_LENGTH)) + { if (soap->fpreparefinalsend && (soap->error = soap->fpreparefinalsend(soap))) + return soap->error; + } #endif return SOAP_OK; } @@ -6731,7 +7199,7 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_begin_send(struct soap *soap) -{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for output\n")); +{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for output to socket=%d/fd=%d\n", soap->socket, soap->sendfd)); soap_free_ns(soap); soap->error = SOAP_OK; soap->mode = soap->omode | (soap->mode & (SOAP_IO_LENGTH | SOAP_ENC_DIME)); @@ -6762,8 +7230,6 @@ soap_begin_send(struct soap *soap) 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; @@ -6776,7 +7242,7 @@ soap_begin_send(struct soap *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 */ + if (!soap_valid_socket(soap->socket) && !soap->os) /* Set win32 stdout or soap->sendfd to BINARY, e.g. to support DIME */ #ifdef __BORLANDC__ setmode(soap->sendfd, _O_BINARY); #else @@ -6838,8 +7304,8 @@ soap_begin_send(struct soap *soap) 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); + if (soap->fprepareinitsend && (soap->mode & SOAP_IO) == SOAP_IO_STORE && (soap->error = soap->fprepareinitsend(soap))) + return soap->error; #endif return SOAP_OK; } @@ -6870,7 +7336,7 @@ int SOAP_FMAC2 soap_reference(struct soap *soap, const void *p, int t) { struct soap_plist *pp; - if (!p || (soap->mode & SOAP_XML_TREE)) + if (!p || (!soap->encodingStyle && !(soap->omode & (SOAP_ENC_DIME|SOAP_ENC_MIME|SOAP_ENC_MTOM|SOAP_XML_GRAPH))) || (soap->omode & SOAP_XML_TREE)) return 1; if (soap_pointer_lookup(soap, p, t, &pp)) { if (pp->mark1 == 0) @@ -6878,11 +7344,7 @@ soap_reference(struct soap *soap, const void *p, int t) pp->mark2 = 2; } } - else if (soap_pointer_enter(soap, p, NULL, 0, t, &pp)) - { pp->mark1 = 0; - pp->mark2 = 0; - } - else + else if (!soap_pointer_enter(soap, p, NULL, 0, t, &pp)) 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; @@ -6897,12 +7359,10 @@ 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) +{ struct soap_plist *pp; + if (!p || !a->__ptr || (!soap->encodingStyle && !(soap->omode & (SOAP_ENC_DIME|SOAP_ENC_MIME|SOAP_ENC_MTOM|SOAP_XML_GRAPH))) || (soap->omode & SOAP_XML_TREE)) return 1; - i = soap_array_pointer_lookup(soap, p, a, n, t, &pp); - if (i) + if (soap_array_pointer_lookup(soap, p, a, n, t, &pp)) { if (pp->mark1 == 0) { pp->mark1 = 2; pp->mark2 = 2; @@ -6910,10 +7370,6 @@ soap_array_reference(struct soap *soap, const void *p, const struct soap_array * } 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; } @@ -6928,10 +7384,10 @@ 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) + if (!id || (!soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH)) || (soap->omode & 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 (soap->version == 1 && soap->part != SOAP_IN_HEADER) { if (id < 0) { id = soap_pointer_lookup(soap, p, t, &pp); if (id) @@ -7031,7 +7487,7 @@ soap_attachment(struct soap *soap, const char *tag, int id, const void *p, const 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)); + 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); @@ -7043,7 +7499,12 @@ soap_attachment(struct soap *soap, const char *tag, int id, const void *p, const if (id <= 0) id = i; if (!aid) - { sprintf(soap->tmpbuf, soap->dime_id_format, id); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), soap->dime_id_format, id); +#else + sprintf(soap->tmpbuf, soap->dime_id_format, id); +#endif aid = soap_strdup(soap, soap->tmpbuf); } /* Add MTOM xop:Include element when necessary */ @@ -7159,8 +7620,8 @@ soap_enter(struct soap *soap, const char *id) 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); + { strcpy((char*)ip->id, id); + h = soap_hash(id); /* h = (HASH(id) % SOAP_IDHASH) so soap->iht[h] is safe */ ip->next = soap->iht[h]; soap->iht[h] = ip; } @@ -7239,7 +7700,9 @@ soap_track_malloc(struct soap *soap, const char *file, int line, size_t 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)); + if (soap->fdebug[SOAP_INDEX_TEST]) + { 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; @@ -7345,13 +7808,16 @@ soap_dealloc(struct soap *soap, void *p) SOAP_FREE(soap, q); } /* we must assume these were deallocated: */ + soap->http_content = NULL; soap->action = NULL; soap->fault = NULL; soap->header = NULL; soap->userid = NULL; soap->passwd = NULL; soap->authrealm = NULL; - soap->http_content = NULL; +#ifdef WITH_NTLM + soap->ntlm_challenge = NULL; +#endif #ifndef WITH_LEANER soap_clr_mime(soap); #endif @@ -7438,7 +7904,7 @@ soap_delegate_deletion(struct soap *soap, struct soap *soap_to) { if ((*mp)->ptr == p) { mq = *mp; *mp = mq->next; - mq->next = soap_to->mht[h]; + mq->next = soap_to->mht[h]; soap_to->mht[h] = mq; break; } @@ -7448,6 +7914,22 @@ soap_delegate_deletion(struct soap *soap, struct soap *soap_to) *q = (char*)soap_to->alist; soap_to->alist = soap->alist; soap->alist = NULL; +#ifdef SOAP_MEM_DEBUG + cp = soap->clist; + while (cp) + { h = soap_hash_ptr(cp); + for (mp = &soap->mht[h]; *mp; mp = &(*mp)->next) + { if ((*mp)->ptr == cp) + { mq = *mp; + *mp = mq->next; + mq->next = soap_to->mht[h]; + soap_to->mht[h] = mq; + break; + } + } + cp = cp->next; + } +#endif cp = soap_to->clist; if (cp) { while (cp->next) @@ -7482,32 +7964,33 @@ soap_link(struct soap *soap, void *p, int t, int n, int (*fdelete)(struct soap_c /******************************************************************************/ #ifndef PALM_2 SOAP_FMAC1 -void +int 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)); + if (soap && p) + { 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); + soap_track_unlink(soap, p); #endif - return; + return SOAP_OK; /* found and removed from dealloc chain */ + } } - } - 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; + 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 SOAP_OK; /* found and removed from dealloc chain */ + } } } + return SOAP_ERR; } #endif @@ -7584,7 +8067,7 @@ soap_id_lookup(struct soap *soap, const char *id, void **p, int t, size_t n, uns while (q) { *r = (void*)soap_malloc(soap, sizeof(void*)); if (!*r) - return NULL; + return NULL; s = *q; *q = *r; r = (void**)*r; @@ -7747,6 +8230,7 @@ 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); + (void)soap; (void)st; (void)tt; (void)len; } #endif @@ -7777,7 +8261,17 @@ soap_end_send(struct soap *soap) if (err) return err; #endif - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End send\n")); + return soap_end_send_flush(soap); +} +#endif + +/******************************************************************************/ +#ifndef PALM_1 +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_end_send_flush(struct soap *soap) +{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End send mode=0x%x\n", soap->mode)); if (soap->mode & SOAP_IO) /* need to flush the remaining data in buffer */ { if (soap_flush(soap)) #ifdef WITH_ZLIB @@ -7812,7 +8306,7 @@ soap_end_send(struct soap *soap) 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)); + { 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 @@ -7849,16 +8343,20 @@ soap_end_send(struct soap *soap) #endif for (p = soap_first_block(soap, NULL); p; p = soap_next_block(soap, NULL)) { DBGMSG(SENT, p, soap_block_size(soap, NULL)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send %u bytes to socket=%d/fd=%d\n", (unsigned int)soap_block_size(soap, NULL), soap->socket, soap->sendfd)); 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); + if (soap->fpreparefinalsend && (soap->error = soap->fpreparefinalsend(soap))) + return soap->error; } #ifndef WITH_LEANER else if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) { DBGMSG(SENT, "\r\n0\r\n\r\n", 7); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send 7 bytes to socket=%d/fd=%d\n", soap->socket, soap->sendfd)); if ((soap->error = soap->fsend(soap, "\r\n0\r\n\r\n", 7))) return soap->error; } @@ -7874,7 +8372,7 @@ soap_end_send(struct soap *soap) #endif #endif DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of send phase\n")); - soap->omode &= ~SOAP_XML_SEC; + soap->omode &= ~SOAP_SEC_WSUID; soap->count = 0; soap->part = SOAP_END; return SOAP_OK; @@ -7893,6 +8391,7 @@ soap_end_recv(struct soap *soap) soap->c14nexclude = NULL; /* reset before next send */ #endif #ifndef WITH_LEANER + soap->ffilterrecv = NULL; if ((soap->mode & SOAP_ENC_DIME) && soap_getdime(soap)) { soap->dime.first = NULL; soap->dime.last = NULL; @@ -7903,8 +8402,7 @@ soap_end_recv(struct soap *soap) soap->dime.last = NULL; /* Check if MIME attachments and mime-post-check flag is set, if so call soap_resolve() and return */ if (soap->mode & SOAP_ENC_MIME) - { - if (soap->mode & SOAP_MIME_POSTCHECK) + { if (soap->mode & SOAP_MIME_POSTCHECK) { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Post checking MIME attachments\n")); if (!soap->keep_alive) soap->keep_alive = -1; @@ -7948,15 +8446,17 @@ soap_end_recv(struct soap *soap) 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; + { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: unable to read crc value\n")); + return soap->error = SOAP_ZLIB_ERROR; + } 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)); + { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip inflate 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")); + { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip inflate error: incorrect message length\n")); return soap->error = SOAP_ZLIB_ERROR; } } @@ -7965,7 +8465,7 @@ soap_end_recv(struct soap *soap) } #endif if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) - while ((int)soap_getchar(soap) != EOF) /* advance to last chunk */ + while (soap->ahead != EOF && !soap_recv_raw(soap)) ; #ifndef WITH_NOIDREF if (soap_resolve(soap)) @@ -8018,13 +8518,9 @@ soap_free_temp(struct soap *soap) if (ns) { for (; ns->id; ns++) { if (ns->out) - { if (soap->encodingStyle == ns->out) - soap->encodingStyle = SOAP_STR_EOS; - SOAP_FREE(soap, ns->out); + { 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; @@ -8124,34 +8620,37 @@ soap_set_logfile(struct soap *soap, int i, const char *logfile) #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); -} +{ +#ifdef SOAP_DEBUG + 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); -} +{ +#ifdef SOAP_DEBUG + 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); -} +{ +#ifdef SOAP_DEBUG + soap_set_logfile(soap, SOAP_INDEX_TEST, logfile); #endif +} /******************************************************************************/ #ifndef PALM_1 @@ -8169,10 +8668,13 @@ SOAP_FMAC1 struct soap* SOAP_FMAC2 soap_copy_context(struct soap *copy, const struct soap *soap) -{ if (soap_check_state(soap)) +{ if (copy == soap) + return copy; + if (soap_check_state(soap)) return NULL; if (copy) { register struct soap_plugin *p = NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying context\n")); #ifdef __cplusplus *copy = *soap; #else @@ -8182,6 +8684,9 @@ soap_copy_context(struct soap *copy, const struct soap *soap) copy->error = SOAP_OK; copy->userid = NULL; copy->passwd = NULL; +#ifdef WITH_NTLM + copy->ntlm_challenge = NULL; +#endif copy->nlist = NULL; copy->blist = NULL; copy->clist = NULL; @@ -8201,8 +8706,16 @@ soap_copy_context(struct soap *copy, const struct soap *soap) soap_set_sent_logfile(copy, soap->logfile[SOAP_INDEX_SENT]); soap_set_recv_logfile(copy, soap->logfile[SOAP_INDEX_RECV]); #endif + copy->namespaces = soap->local_namespaces; + copy->local_namespaces = NULL; + soap_set_local_namespaces(copy); /* copy content of soap->local_namespaces */ + copy->namespaces = soap->namespaces; /* point to shared read-only namespaces table */ #ifdef WITH_C_LOCALE +# ifdef WIN32 + copy->c_locale = _create_locale(LC_ALL, "C"); +# else copy->c_locale = duplocale(soap->c_locale); +# endif #else copy->c_locale = NULL; #endif @@ -8221,7 +8734,6 @@ soap_copy_context(struct soap *copy, const struct soap *soap) 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); @@ -8262,10 +8774,17 @@ SOAP_FMAC1 void SOAP_FMAC2 soap_copy_stream(struct soap *copy, struct soap *soap) -{ copy->mode = soap->mode; +{ struct soap_attribute *tp = NULL, *tq; + if (copy == soap) + return; + copy->header = soap->header; + copy->mode = soap->mode; copy->imode = soap->imode; copy->omode = soap->omode; + copy->master = soap->master; copy->socket = soap->socket; + copy->sendsk = soap->sendsk; + copy->recvsk = soap->recvsk; copy->recv_timeout = soap->recv_timeout; copy->send_timeout = soap->send_timeout; #if defined(__cplusplus) && !defined(WITH_LEAN) @@ -8289,21 +8808,27 @@ soap_copy_stream(struct soap *copy, struct soap *soap) #ifndef WITH_NOIO copy->peer = soap->peer; copy->peerlen = soap->peerlen; + copy->ip = soap->ip; + copy->port = soap->port; + memcpy(copy->host, soap->host, sizeof(soap->host)); + memcpy(copy->endpoint, soap->endpoint, sizeof(soap->endpoint)); #endif #ifdef WITH_OPENSSL copy->bio = soap->bio; - copy->ssl = soap->ssl; copy->ctx = soap->ctx; + copy->ssl = soap->ssl; #endif #ifdef WITH_GNUTLS - copy->session = soap->session; /* TODO: GNUTLS provides a dup? */ + copy->session = soap->session; #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)); + if (!copy->d_stream) + copy->d_stream = (z_stream*)SOAP_MALLOC(copy, sizeof(z_stream)); + if (copy->d_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; @@ -8312,12 +8837,71 @@ soap_copy_stream(struct soap *copy, struct soap *soap) 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)); + if (copy->z_buf) + memcpy(copy->z_buf, soap->z_buf, SOAP_BUFLEN); } copy->z_dict = soap->z_dict; copy->z_dict_len = soap->z_dict_len; #endif memcpy(copy->buf, soap->buf, sizeof(soap->buf)); + /* copy XML parser state */ + soap_free_ns(copy); + soap_set_local_namespaces(copy); + copy->version = soap->version; + if (soap->nlist && soap->local_namespaces) + { register struct soap_nlist *np = NULL, *nq; + /* copy reversed nlist */ + for (nq = soap->nlist; nq; nq = nq->next) + { register struct soap_nlist *nr = np; + size_t n = sizeof(struct soap_nlist) + strlen(nq->id); + np = (struct soap_nlist*)SOAP_MALLOC(copy, n); + if (!np) + break; + memcpy(np, nq, n); + np->next = nr; + } + while (np) + { register const char *s = np->ns; + copy->level = np->level; /* preserve element nesting level */ + if (!s && np->index >= 0) + { s = soap->local_namespaces[np->index].out; + if (!s) + s = soap->local_namespaces[np->index].ns; + } + if (s && soap_push_namespace(copy, np->id, s) == NULL) + break; + nq = np; + np = np->next; + SOAP_FREE(copy, nq); + } + } + memcpy(copy->tag, soap->tag, sizeof(copy->tag)); + memcpy(copy->id, soap->id, sizeof(copy->id)); + memcpy(copy->href, soap->href, sizeof(copy->href)); + memcpy(copy->type, soap->type, sizeof(copy->type)); + copy->other = soap->other; + copy->root = soap->root; + copy->null = soap->null; + copy->body = soap->body; + copy->part = soap->part; + copy->mustUnderstand = soap->mustUnderstand; + copy->level = soap->level; + copy->peeked = soap->peeked; + /* copy attributes */ + for (tq = soap->attributes; tq; tq = tq->next) + { struct soap_attribute *tr = tp; + size_t n = sizeof(struct soap_attribute) + strlen(tq->name); + tp = (struct soap_attribute*)SOAP_MALLOC(copy, n); + memcpy(tp, tq, n); + if (tp->size) + { tp->value = (char*)SOAP_MALLOC(copy, tp->size); + if (tp->value) + strcpy(tp->value, tq->value); + } + tp->ns = NULL; + tp->next = tr; + } + copy->attributes = tp; } #endif @@ -8328,22 +8912,22 @@ void SOAP_FMAC2 soap_free_stream(struct soap *soap) { soap->socket = SOAP_INVALID_SOCKET; + soap->sendsk = SOAP_INVALID_SOCKET; + soap->recvsk = SOAP_INVALID_SOCKET; #ifdef WITH_OPENSSL soap->bio = NULL; + soap->ctx = NULL; soap->ssl = NULL; #endif #ifdef WITH_GNUTLS soap->xcred = NULL; soap->acred = NULL; soap->cache = NULL; - soap->session = NULL; /* TODO: GNUTLS free (when dupped)? */ + soap->session = NULL; soap->dh_params = NULL; soap->rsa_params = 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; @@ -8356,8 +8940,19 @@ soap_free_stream(struct soap *soap) SOAP_FMAC1 void SOAP_FMAC2 -soap_init(struct soap *soap) -{ soap->state = SOAP_INIT; +soap_initialize(struct soap *soap) +{ soap_versioning(soap_init)(soap, SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); +} +#endif + +/******************************************************************************/ +#ifndef PALM_1 +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_versioning(soap_init)(struct soap *soap, soap_mode imode, soap_mode omode) +{ size_t i; + soap->state = SOAP_INIT; #ifdef SOAP_MEM_DEBUG soap_init_mht(soap); #endif @@ -8365,24 +8960,37 @@ soap_init(struct soap *soap) soap_init_logs(soap); #endif #ifdef SOAP_DEBUG +#ifdef TANDEM_NONSTOP + soap_set_test_logfile(soap, "TESTLOG"); + soap_set_sent_logfile(soap, "SENTLOG"); + soap_set_recv_logfile(soap, "RECVLOG"); +#else soap_set_test_logfile(soap, "TEST.log"); soap_set_sent_logfile(soap, "SENT.log"); soap_set_recv_logfile(soap, "RECV.log"); #endif +#endif soap->version = 0; - soap_imode(soap, SOAP_IO_DEFAULT); - soap_omode(soap, SOAP_IO_DEFAULT); + soap_mode(soap, imode); + soap_imode(soap, imode); + soap_omode(soap, omode); soap->plugins = NULL; soap->user = NULL; + for (i = 0; i < sizeof(soap->data)/sizeof(*soap->data); i++) + soap->data[i] = NULL; soap->userid = NULL; soap->passwd = NULL; + soap->authrealm = NULL; +#ifdef WITH_NTLM + soap->ntlm_challenge = NULL; +#endif #ifndef WITH_NOHTTP soap->fpost = http_post; - soap->fput = http_put; soap->fget = http_get; + soap->fput = http_405; soap->fdel = http_405; - soap->fopt = http_405; - soap->fhead = http_405; + soap->fopt = http_200; + soap->fhead = http_200; soap->fform = NULL; soap->fposthdr = http_post_header; soap->fresponse = http_response; @@ -8393,8 +9001,9 @@ soap_init(struct soap *soap) soap->fconnect = NULL; soap->fdisconnect = NULL; #ifndef WITH_NOIO - soap->ipv6_multicast_if = 0; - soap->ipv4_multicast_if = NULL; + soap->ipv6_multicast_if = 0; /* in_addr_t value */ + soap->ipv4_multicast_if = NULL; /* points to struct in_addr or in_addr_t */ + soap->ipv4_multicast_ttl = 0; /* 0: use default */ #ifndef WITH_IPV6 soap->fresolve = tcp_gethost; #else @@ -8419,12 +9028,18 @@ soap_init(struct soap *soap) soap->fplugin = fplugin; soap->fmalloc = NULL; #ifndef WITH_LEANER + soap->feltbegin = NULL; + soap->feltendin = NULL; + soap->feltbegout = NULL; + soap->feltendout = NULL; soap->fprepareinitsend = NULL; soap->fprepareinitrecv = NULL; soap->fpreparesend = NULL; soap->fpreparerecv = NULL; soap->fpreparefinalsend = NULL; soap->fpreparefinalrecv = NULL; + soap->ffiltersend = NULL; + soap->ffilterrecv = NULL; soap->fdimereadopen = NULL; soap->fdimewriteopen = NULL; soap->fdimereadclose = NULL; @@ -8465,7 +9080,7 @@ soap_init(struct soap *soap) soap->labbuf = NULL; soap->lablen = 0; soap->labidx = 0; - soap->encodingStyle = SOAP_STR_EOS; + soap->encodingStyle = NULL; #ifndef WITH_NONAMESPACES soap->namespaces = namespaces; #else @@ -8481,6 +9096,8 @@ soap_init(struct soap *soap) soap->fault = NULL; soap->master = SOAP_INVALID_SOCKET; soap->socket = SOAP_INVALID_SOCKET; + soap->sendsk = SOAP_INVALID_SOCKET; + soap->recvsk = SOAP_INVALID_SOCKET; soap->os = NULL; soap->is = NULL; #ifndef WITH_LEANER @@ -8509,7 +9126,6 @@ soap_init(struct soap *soap) 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; @@ -8553,6 +9169,7 @@ soap_init(struct soap *soap) soap->session = NULL; soap->ssl_flags = SOAP_SSL_DEFAULT; soap->keyfile = NULL; + soap->keyid = NULL; soap->password = NULL; soap->cafile = NULL; soap->capath = NULL; @@ -8571,6 +9188,7 @@ soap_init(struct soap *soap) soap->session = NULL; soap->ssl_flags = SOAP_SSL_DEFAULT; soap->keyfile = NULL; + soap->keyid = NULL; soap->password = NULL; soap->cafile = NULL; soap->capath = NULL; @@ -8579,7 +9197,11 @@ soap_init(struct soap *soap) soap->rsa_params = NULL; #endif #ifdef WITH_C_LOCALE +# ifdef WIN32 + soap->c_locale = _create_locale(LC_ALL, "C"); +# else soap->c_locale = newlocale(LC_ALL_MASK, "C", NULL); +# endif #else soap->c_locale = NULL; #endif @@ -8595,6 +9217,8 @@ soap_init(struct soap *soap) soap->mustUnderstand = 0; soap->ns = 0; soap->part = SOAP_END; + soap->event = 0; + soap->evlev = 0; soap->alloced = 0; soap->count = 0; soap->length = 0; @@ -8609,28 +9233,6 @@ soap_init(struct soap *soap) #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 @@ -8641,7 +9243,6 @@ soap_begin(struct soap *soap) { 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; @@ -8649,6 +9250,8 @@ soap_begin(struct soap *soap) soap->mode = 0; soap->ns = 0; soap->part = SOAP_END; + soap->event = 0; + soap->evlev = 0; soap->alloced = 0; soap->count = 0; soap->length = 0; @@ -8659,6 +9262,7 @@ soap_begin(struct soap *soap) soap->idnum = 0; soap->level = 0; soap->endpoint[0] = '\0'; + soap->encodingStyle = SOAP_STR_EOS; #ifndef WITH_LEANER soap->dime.chunksize = 0; soap->dime.buflen = 0; @@ -8695,6 +9299,27 @@ soap_end(struct soap *soap) /******************************************************************************/ #ifndef PALM_1 SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_version(struct soap *soap, short version) +{ soap_set_local_namespaces(soap); + if (soap->version != version) + { if (version == 1) + { soap->local_namespaces[0].ns = soap_env1; + soap->local_namespaces[1].ns = soap_enc1; + } + else if (version == 2) + { soap->local_namespaces[0].ns = soap_env2; + soap->local_namespaces[1].ns = soap_enc2; + } + soap->version = version; + } +} +#endif + +/******************************************************************************/ +#ifndef PALM_1 +SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces(struct soap *soap, const struct Namespace *p) @@ -8767,10 +9392,12 @@ soap_set_local_namespaces(struct soap *soap) if (ns2[0].ns) { if (!strcmp(ns2[0].ns, soap_env1)) soap->version = 1; - else + else if (!strcmp(ns2[0].ns, soap_env2)) soap->version = 2; } soap->local_namespaces = ns2; + for (; ns2->id; ns2++) + ns2->out = NULL; } } } @@ -8844,7 +9471,7 @@ soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized) return NULL; } } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Adding namespace binding (level=%u) '%s' '%s' utilized=%d\n", soap->level, id, ns?ns:"(null)", utilized)); + 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); @@ -8857,9 +9484,9 @@ soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized) } np->next = soap->nlist; soap->nlist = np; - strcpy(np->id, id); + strcpy((char*)np->id, id); if (ns) - np->ns = strcpy(np->id + n + 1, ns); + np->ns = strcpy((char*)np->id + n + 1, ns); else np->ns = NULL; np->level = soap->level; @@ -8871,11 +9498,19 @@ soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized) /******************************************************************************/ #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); +soap_utilize_ns(struct soap *soap, const char *tag) +{ register struct soap_nlist *np; + size_t n = 0; + const char *t = strchr(tag, ':'); + if (t) + { n = t - tag; + if (n >= sizeof(soap->tmpbuf)) + n = sizeof(soap->tmpbuf) - 1; + } + np = soap_lookup_ns(soap, tag, n); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Utilizing namespace of '%s'\n", tag)); if (np) - { if (np->index == 0) + { if (np->index <= 0) soap_push_ns(soap, np->id, np->ns, 1); } else if (strncmp(tag, "xml", 3)) @@ -8896,26 +9531,35 @@ 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)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element begin tag='%s' level='%u' id='%d' type='%s'\n", tag, soap->level, id, type ? type : SOAP_STR_EOS)); + soap->level++; #ifdef WITH_DOM #ifndef WITH_LEAN if (soap->wsuid && soap_tagsearch(soap->wsuid, tag)) { size_t i; - for (s = tag, i = 0; *s && i < sizeof(soap->tag); s++, i++) + for (s = tag, i = 0; *s && i < sizeof(soap->tag) - 1; s++, i++) soap->tag[i] = *s == ':' ? '-' : *s; - soap->tag[sizeof(soap->tag) - 1] = '\0'; + soap->tag[i] = '\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_CANONICAL) && !(soap->mode & SOAP_DOM_ASIS)) + { if (soap->evlev >= soap->level) + soap->evlev = 0; + if (soap->event == SOAP_SEC_BEGIN && !soap->evlev) + { register struct soap_nlist *np; + /* non-nested wsu:Id found: clear xmlns, re-emit them for exc-c14n */ + for (np = soap->nlist; np; np = np->next) + { if (np->index == 2) + { struct soap_nlist *np1 = soap_push_ns(soap, np->id, np->ns, 1); + if (np1) + np1->index = 0; + } + } + soap->evlev = soap->level; } } +#endif 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) @@ -8948,7 +9592,6 @@ soap_element(struct soap *soap, const char *tag, int id, const char *type) else { #endif - soap->level++; #ifndef WITH_LEAN if (!soap->ns) { if (!(soap->mode & SOAP_XML_CANONICAL) @@ -8986,49 +9629,90 @@ soap_element(struct soap *soap, const char *tag, int id, const char *type) } #endif if (!soap->ns) - { struct Namespace *ns; + { struct Namespace *ns = soap->local_namespaces; int k = -1; + if (ns) + { #ifndef WITH_LEAN - if ((soap->mode & SOAP_XML_DEFAULTNS)) - k = 4; /* only produce the first four required entries */ + if ((soap->mode & SOAP_XML_DEFAULTNS)) + { if (soap->version) + k = 4; /* first four required entries */ + else if (!(soap->mode & SOAP_XML_NOTYPE) || (soap->mode & SOAP_XML_NIL)) + { ns += 2; + k = 2; /* next two entries */ + } + else + k = 0; /* no 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; + while (k-- && ns->id) + { if (*ns->id && (ns->out || ns->ns)) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "xmlns:%s", ns->id); +#else + sprintf(soap->tmpbuf, "xmlns:%s", ns->id); +#endif + if (soap_attribute(soap, soap->tmpbuf, ns->out ? ns->out : ns->ns)) + return soap->error; + } + ns++; } } } 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); - } + soap_utilize_ns(soap, tag); #endif if (id > 0) - { sprintf(soap->tmpbuf, "_%d", id); - if (soap_attribute(soap, "id", soap->tmpbuf)) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "_%d", id); +#else + sprintf(soap->tmpbuf, "_%d", id); +#endif + if (soap->version == 2) + { if (soap_attribute(soap, "SOAP-ENC:id", soap->tmpbuf)) + return soap->error; + } + else 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; + if (type && *type && !(soap->mode & SOAP_XML_NOTYPE) && soap->part != SOAP_IN_HEADER) + { const char *t = type; #ifndef WITH_LEAN - if (soap->mode & SOAP_XML_CANONICAL) - { const char *t = strchr(type, ':'); + if (soap->mode & SOAP_XML_DEFAULTNS) + { t = strchr(type, ':'); if (t) - soap_utilize_ns(soap, type, t - type); + t++; + else + t = type; } #endif + if (soap->attributes ? soap_set_attr(soap, "xsi:type", t, 1) : soap_attribute(soap, "xsi:type", t)) + return soap->error; +#ifndef WITH_LEAN + if (soap->mode & SOAP_XML_CANONICAL) + soap_utilize_ns(soap, type); +#endif } if (soap->null && soap->position > 0) { register int i; +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf) - 1, "[%d", soap->positions[0]); +#else sprintf(soap->tmpbuf, "[%d", soap->positions[0]); +#endif for (i = 1; i < soap->position; i++) - sprintf(soap->tmpbuf + strlen(soap->tmpbuf), ",%d", soap->positions[i]); + { register size_t l = strlen(soap->tmpbuf); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf + l, sizeof(soap->tmpbuf)-l-1, ",%d", soap->positions[i]); +#else + if (l + 13 < sizeof(soap->tmpbuf)) + sprintf(soap->tmpbuf + l, ",%d", soap->positions[i]); +#endif + } strcat(soap->tmpbuf, "]"); if (soap_attribute(soap, "SOAP-ENC:position", soap->tmpbuf)) return soap->error; @@ -9043,7 +9727,7 @@ soap_element(struct soap *soap, const char *tag, int id, const char *type) soap->mustUnderstand = 0; } if (soap->encoding) - { if (soap->encodingStyle && soap->local_namespaces) + { if (soap->encodingStyle && soap->local_namespaces && soap->local_namespaces[0].id && soap->local_namespaces[1].id) { if (!*soap->encodingStyle) { if (soap->local_namespaces[1].out) soap->encodingStyle = soap->local_namespaces[1].out; @@ -9053,12 +9737,14 @@ soap_element(struct soap *soap, const char *tag, int id, const char *type) if (soap->encodingStyle && soap_attribute(soap, "SOAP-ENV:encodingStyle", soap->encodingStyle)) return soap->error; } + else + soap->encodingStyle = NULL; 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; + if (soap->event == SOAP_SEC_BEGIN) + soap->event = 0; return SOAP_OK; } #endif @@ -9073,7 +9759,15 @@ soap_element_begin_out(struct soap *soap, const char *tag, int id, const char *t return SOAP_OK; if (soap_element(soap, tag, id, type)) return soap->error; +#ifdef WITH_DOM + if (soap_element_start_end_out(soap, NULL)) + return soap->error; + if (soap->feltbegout) + return soap->error = soap->feltbegout(soap, tag); + return SOAP_OK; +#else return soap_element_start_end_out(soap, NULL); +#endif } #endif @@ -9201,13 +9895,19 @@ soap_array_begin_out(struct soap *soap, const char *tag, int id, const char *typ if (soap->version == 2) { const char *s; s = soap_strrchr(type, '['); - if ((size_t)(s - type) < sizeof(soap->tmpbuf)) + if (s && (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; + s++; + if (*s) + { strncpy(soap->tmpbuf, s, sizeof(soap->tmpbuf)); + soap->tmpbuf[sizeof(soap->tmpbuf) - 1] = '\0'; + soap->tmpbuf[strlen(soap->tmpbuf) - 1] = '\0'; + if (soap_attribute(soap, "SOAP-ENC:arraySize", soap->tmpbuf)) + return soap->error; + } } } else @@ -9218,10 +9918,7 @@ soap_array_begin_out(struct soap *soap, const char *tag, int id, const char *typ } #ifndef WITH_LEAN if ((soap->mode & SOAP_XML_CANONICAL)) - { const char *s = strchr(type, ':'); - if (s) - soap_utilize_ns(soap, type, s - type); - } + soap_utilize_ns(soap, type); #endif return soap_element_start_end_out(soap, NULL); } @@ -9239,14 +9936,20 @@ soap_element_start_end_out(struct soap *soap, const char *tag) { 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); - } + soap_utilize_ns(soap, tp->name); } for (np = soap->nlist; np; np = np->next) { if (np->index == 1 && np->ns) - { sprintf(soap->tmpbuf, "xmlns:%s", np->id); + { if (*(np->id)) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "xmlns:%s", np->id); +#else + sprintf(soap->tmpbuf, "xmlns:%s", np->id); +#endif + } + else + strcpy(soap->tmpbuf, "xmlns"); 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; @@ -9333,6 +10036,8 @@ soap_element_end_out(struct soap *soap, const char *tag) return SOAP_OK; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element ending tag='%s'\n", tag)); #ifdef WITH_DOM + if (soap->feltendout && (soap->error = soap->feltendout(soap, tag))) + return soap->error; if ((soap->mode & SOAP_XML_DOM) && soap->dom) { if (soap->dom->prnt) soap->dom = soap->dom->prnt; @@ -9368,13 +10073,19 @@ 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; +{ register const char *s = "ref"; + register int n = 1; + if (soap->version == 1) + { s = "href"; + n = 0; } + else if (soap->version == 2) + s = "SOAP-ENC:ref"; +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->href, sizeof(soap->href), "#_%d", href); +#else sprintf(soap->href, "#_%d", href); +#endif return soap_element_href(soap, tag, id, s, soap->href + n); } #endif @@ -9424,7 +10135,7 @@ int SOAP_FMAC2 soap_element_nil(struct soap *soap, const char *tag) { if (soap_element(soap, tag, -1, NULL) - || soap_attribute(soap, "xsi:nil", "true")) + || ((soap->mode & SOAP_XML_NIL) && soap_attribute(soap, "xsi:nil", "true"))) return soap->error; return soap_element_start_end_out(soap, tag); } @@ -9437,11 +10148,11 @@ 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); + { soap->error = soap_element_null(soap, tag, id, type); return -1; } #ifndef WITH_NOIDREF - if (soap->mode & SOAP_XML_TREE) + if ((!soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH)) || (soap->omode & SOAP_XML_TREE)) return 0; if (id < 0) { struct soap_plist *pp; @@ -9494,6 +10205,7 @@ soap_check_result(struct soap *soap, const char *tag) { 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? */ } + (void)tag; } #endif @@ -9522,16 +10234,9 @@ soap_attribute(struct soap *soap, const char *name, const char *value) #endif #ifndef WITH_LEAN if (soap->mode & SOAP_XML_CANONICAL) - { /* TODO: consider using this code to handle default namespace bindings + { /* push namespace */ 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); + soap_push_ns(soap, name + 5 + (name[5] == ':'), value, 0); else if (soap_set_attr(soap, name, value, 1)) return soap->error; } @@ -9568,7 +10273,8 @@ soap_element_begin_in(struct soap *soap, const char *tag, int nillable, const ch 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 )); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag ? tag : SOAP_STR_EOS )); + soap->error = SOAP_OK; } } else if (soap->error == SOAP_NO_TAG && tag && *tag == '-') @@ -9607,7 +10313,7 @@ soap_element_end_in(struct soap *soap, const char *tag) do { while (((c = soap_get(soap)) != SOAP_TT)) { if ((int)c == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_EOF; if (c == SOAP_LT) n++; else if (c == '/') @@ -9627,21 +10333,27 @@ soap_element_end_in(struct soap *soap, const char *tag) } *s = '\0'; if ((int)c == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_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 +#ifdef WITH_DOM + if (soap->feltendin) + { soap->level--; + return soap->error = soap->feltendin(soap, soap->tag, tag); + } +#endif 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")); + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element tag '%s' does not match '%s'\n", soap->tag, tag ? tag : SOAP_STR_EOS)); return soap->error = SOAP_SYNTAX_ERROR; } } #endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag ? tag : SOAP_STR_EOS)); soap->level--; return SOAP_OK; } @@ -9683,7 +10395,7 @@ 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)); + 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; @@ -9697,7 +10409,7 @@ soap_set_attr(struct soap *soap, const char *name, const char *value, int flag) 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)) + 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) @@ -9709,15 +10421,21 @@ soap_set_attr(struct soap *soap, const char *name, const char *value, int flag) 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; + { struct soap_nlist *np = soap_lookup_ns(soap, name, s - name); + if (np) + tp->ns = np->ns; + else + { struct soap_attribute *tq; + for (tq = soap->attributes; tq; tq = tq->next) + { if (!strncmp(tq->name, "xmlns:", 6) && !strncmp(tq->name + 6, name, s - name) && !tq->name[6 + s - name]) + { tp->ns = tq->ns; + break; } } - else if (strncmp((*tpp)->name, "xmlns", 5) && (*tpp)->ns && tp->ns && ((k = strcmp((*tpp)->ns, tp->ns)) > 0 || (!k && strcmp((*tpp)->name, name) > 0))) + } + for (; *tpp; tpp = &(*tpp)->next) + { int k; + if (strncmp((*tpp)->name, "xmlns", 5) && (*tpp)->ns && tp->ns && ((k = strcmp((*tpp)->ns, tp->ns)) > 0 || (!k && strcmp((*tpp)->name, name) > 0))) break; } } @@ -9729,7 +10447,7 @@ soap_set_attr(struct soap *soap, const char *name, const char *value, int flag) { tp->next = soap->attributes; soap->attributes = tp; } - strcpy(tp->name, name); + strcpy((char*)tp->name, name); tp->value = NULL; } else if (tp->visible) @@ -9752,12 +10470,12 @@ soap_set_attr(struct soap *soap, const char *name, const char *value, int flag) if (!strncmp(tp->name, "xmlns:", 6)) tp->ns = tp->value; tp->visible = 2; - tp->flag = flag; + tp->flag = (short)flag; #ifndef WITH_LEAN - if (soap->part != SOAP_IN_SECURITY && !strcmp(name, "wsu:Id")) - { soap->part = SOAP_BEGIN_SECURITY; + if (!strcmp(name, "wsu:Id")) + { soap->event = SOAP_SEC_BEGIN; strncpy(soap->id, value, sizeof(soap->id)); - soap->id[sizeof(soap->id)-1] = '\0'; + soap->id[sizeof(soap->id) - 1] = '\0'; } #endif } @@ -9842,7 +10560,9 @@ soap_getattrval(struct soap *soap, char *s, size_t n, soap_wchar d) } default: if ((int)c == EOF) - return soap->error = SOAP_EOF; + { *s = '\0'; + return soap->error = SOAP_CHK_EOF; + } *s++ = (char)c; } } @@ -9872,12 +10592,12 @@ 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)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enlarging look-aside buffer to append data, size=%lu\n", (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)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New look-aside buffer size=%lu\n", (unsigned long)soap->lablen)); soap->labbuf = (char*)SOAP_MALLOC(soap, soap->lablen); if (!soap->labbuf) { if (t) @@ -9931,8 +10651,19 @@ soap_peek_element(struct soap *soap) 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) + /* UTF-8 BOM? */ + c = soap_getchar(soap); + if (c == 0xEF && soap_get0(soap) == 0xBB) + { c = soap_get1(soap); + if ((c = soap_get1(soap)) == 0xBF) + soap->mode &= ~SOAP_ENC_LATIN; + else + soap_unget(soap, (0x0F << 12) | (0xBB << 6) | (c & 0x3F)); /* UTF-8 */ + } + else if ((c == 0xFE && soap_get0(soap) == 0xFF) /* UTF-16 BE */ + || (c == 0xFF && soap_get0(soap) == 0xFE)) /* UTF-16 LE */ + return soap->error = SOAP_UTF_ERROR; + else soap_unget(soap, c); c = soap_get(soap); #ifdef WITH_DOM @@ -9962,7 +10693,7 @@ soap_peek_element(struct soap *soap) if (c != SOAP_LT) { *soap->tag = '\0'; if ((int)c == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_EOF; soap_unget(soap, c); #ifdef WITH_DOM /* whitespace leading to end tag is significant for DOM */ @@ -9975,18 +10706,18 @@ soap_peek_element(struct soap *soap) #endif return soap->error = SOAP_NO_TAG; } - s = soap->tag; do c = soap_get1(soap); while (soap_blank(c)); + s = soap->tag; i = sizeof(soap->tag); while (c != '>' && c != '/' && soap_notblank(c) && (int)c != EOF) { if (--i > 0) *s++ = (char)c; c = soap_get1(soap); } + *s = '\0'; 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; @@ -10067,9 +10798,10 @@ soap_peek_element(struct soap *soap) { 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); + strcpy((char*)tp->name, soap->tmpbuf); tp->value = NULL; tp->size = 0; + tp->ns = NULL; /* if attribute name is qualified, append it to the end of the list */ if (tq && strchr(soap->tmpbuf, ':')) { tq->next = tp; @@ -10099,6 +10831,7 @@ soap_peek_element(struct soap *soap) return soap->error; if (tp->value) SOAP_FREE(soap, tp->value); + tp->value = NULL; for (;;) { if (soap_getattrval(soap, soap->labbuf + soap->labidx, soap->lablen - soap->labidx, c)) { if (soap->error != SOAP_EOM) @@ -10178,7 +10911,7 @@ soap_peek_element(struct soap *soap) } #endif if ((int)c == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_EOF; if (!(soap->body = (c != '/'))) do c = soap_get1(soap); while (soap_blank(c)); @@ -10193,27 +10926,35 @@ soap_peek_element(struct soap *soap) { #ifndef WITH_NOIDREF if (!strcmp(tp->name, "id")) - { if ((soap->version > 0 && !(soap->mode & SOAP_XML_TREE)) + { if ((soap->version > 0 && !(soap->imode & 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'; + soap->id[sizeof(soap->id) - 1] = '\0'; } } else if (!strcmp(tp->name, "href")) - { if (soap->version == 1 + { if ((soap->version == 1 && !(soap->imode & SOAP_XML_TREE)) || (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'; + soap->href[sizeof(soap->href) - 1] = '\0'; + } + } + else if (!strcmp(tp->name, "ref")) + { if ((soap->version == 2 && !(soap->imode & SOAP_XML_TREE)) + || (soap->mode & SOAP_XML_GRAPH)) + { *soap->href = '#'; + strncpy(soap->href + (*tp->value != '#'), tp->value, sizeof(soap->href) - 2); + 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'; + 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")) @@ -10227,12 +10968,12 @@ soap_peek_element(struct soap *soap) 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); + strncpy(soap->arraySize, s, sizeof(soap->arraySize)); } else - strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1); - soap->arraySize[sizeof(soap->arrayType)-1] = '\0'; - soap->arrayType[sizeof(soap->arrayType)-1] = '\0'; + strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType)); + soap->arraySize[sizeof(soap->arraySize) - 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)); @@ -10252,15 +10993,19 @@ soap_peek_element(struct soap *soap) else if (soap->version == 2) { #ifndef WITH_NOIDREF - if (!strcmp(tp->name, "ref") - || !soap_match_tag(soap, tp->name, "SOAP-ENC:ref")) + if (!soap_match_tag(soap, tp->name, "SOAP-ENC:id")) + { *soap->id = '#'; + strncpy(soap->id + 1, tp->value, sizeof(soap->id) - 2); + soap->id[sizeof(soap->id) - 1] = '\0'; + } + else if (!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'; + strncpy(soap->href + (*tp->value != '#'), 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")) + 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); @@ -10279,6 +11024,10 @@ soap_peek_element(struct soap *soap) } } } +#ifdef WITH_DOM + if (soap->feltbegin) + return soap->error = soap->feltbegin(soap, soap->tag); +#endif return soap->error = SOAP_OK; } #endif @@ -10379,8 +11128,8 @@ soap_string_out(struct soap *soap, const char *s, int flag) 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)) + if (m > 0 && !((soap_wchar)wc == c && m == 1 && c < 0x80)) + { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned long)wc)) return soap->error; s = t += m - 1; continue; @@ -10426,8 +11175,8 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) 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[sizeof(soap->tmpbuf) - 1] = '\0'; t += strlen(t); for (tp = soap->attributes; tp; tp = tp->next) { if (tp->visible) @@ -10491,10 +11240,12 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) 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) + if ((c >= 0x80 || c < SOAP_AP) && state != 1 && !(soap->mode & SOAP_ENC_LATIN)) + { if ((c & 0x7FFFFFFF) >= 0x80) + { soap_unget(soap, c); + c = soap_getutf8(soap); + } + if ((c & 0x7FFFFFFF) >= 0x80 && (!flag || (soap->mode & SOAP_C_UTFSTRING))) { c &= 0x7FFFFFFF; t = buf; if (c < 0x0800) @@ -10529,17 +11280,17 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) { case 1: if (c == ']') state = 4; - *s++ = c; + *s++ = (char)c; continue; case 2: if (c == '-') state = 6; - *s++ = c; + *s++ = (char)c; continue; case 3: if (c == '?') state = 8; - *s++ = c; + *s++ = (char)c; continue; /* CDATA */ case 4: @@ -10547,14 +11298,14 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) state = 5; else state = 1; - *s++ = c; + *s++ = (char)c; continue; case 5: if (c == '>') state = 0; - else + else if (c != ']') state = 1; - *s++ = c; + *s++ = (char)c; continue; /* comment */ case 6: @@ -10562,22 +11313,22 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) state = 7; else state = 2; - *s++ = c; + *s++ = (char)c; continue; case 7: if (c == '>') state = 0; - else + else if (c != '-') state = 2; - *s++ = c; + *s++ = (char)c; continue; /* PI */ case 8: if (c == '>') state = 0; - else + else if (c != '?') state = 3; - *s++ = c; + *s++ = (char)c; continue; } switch (c) @@ -10591,11 +11342,20 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) m = 1; break; case SOAP_LT: - if (f && n == 0) - goto end; + 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_getchar(soap); @@ -10643,11 +11403,11 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) else if (c == '?') state = 3; else if (f && n == 0) - { soap_revget1(soap); - c = '<'; - goto end; - } - else + { soap_revget1(soap); + c = '<'; + goto end; + } + else n++; soap_unget(soap, c); *s++ = '<'; @@ -10662,7 +11422,7 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) #ifndef WITH_LEANER #ifdef HAVE_WCTOMB if (soap->mode & SOAP_C_MBSTRING) - { m = wctomb(buf, c & 0x7FFFFFFF); + { m = wctomb(buf, (wchar_t)(c & 0x7FFFFFFF)); if (m >= 1 && m <= (int)MB_CUR_MAX) { t = buf; *s++ = *t++; @@ -10714,7 +11474,12 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) m--; continue; } - if (soap->mode & SOAP_C_UTFSTRING) +#ifndef WITH_CDATA + if (!flag) + c = soap_getchar(soap); + else +#endif + if ((soap->mode & SOAP_C_UTFSTRING)) { if (((c = soap_get(soap)) & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP) { c &= 0x7FFFFFFF; t = buf; @@ -10759,8 +11524,8 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) m = 1; break; case SOAP_LT: - if (f && n == 0) - goto end; + if (f && n == 0) + goto end; n++; *s++ = '<'; break; @@ -10775,9 +11540,16 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) break; case '/': if (n > 0) - { c = soap_get(soap); - if (c == SOAP_GT) - n--; + { if (!flag) + { c = soap_getchar(soap); + if (c == '>') + n--; + } + else + { c = soap_get(soap); + if (c == SOAP_GT) + n--; + } soap_unget(soap, c); } *s++ = '/'; @@ -10830,10 +11602,29 @@ soap_string_in(struct soap *soap, int flag, long minlen, long maxlen) default: if ((int)c == EOF) goto end; +#ifndef WITH_CDATA + if (c == '<' && !flag) + { if (f && n == 0) + goto end; + c = soap_getchar(soap); + soap_unget(soap, c); + if (c == '/') + { c = SOAP_TT; + if (n == 0) + goto end; + n--; + } + else + n++; + *s++ = '<'; + break; + } + else +#endif #ifndef WITH_LEANER #ifdef HAVE_WCTOMB if (soap->mode & SOAP_C_MBSTRING) - { m = wctomb(buf, c & 0x7FFFFFFF); + { m = wctomb(buf, (wchar_t)(c & 0x7FFFFFFF)); if (m >= 1 && m <= (int)MB_CUR_MAX) { t = buf; *s++ = *t++; @@ -10863,7 +11654,7 @@ end: #ifdef WITH_FAST t = soap_strdup(soap, soap->labbuf); #else - soap_size_block(soap, NULL, i+1); + soap_size_block(soap, NULL, i + 1); t = soap_save_block(soap, NULL, 0); #endif if (l < minlen) @@ -10950,13 +11741,14 @@ soap_wstring_out(struct soap *soap, const wchar_t *s, int flag) if (soap_send_raw(soap, &tmp, 1)) return soap->error; } - else /* check UTF16 encoding when wchar_t is too small to hold UCS */ - { if (sizeof(wchar_t) < 4 && (c & 0xD800) == 0xD800) - { /* http://unicode.org/faq/utf_bom.html#utf16-2 */ - if ((*s & 0xD800) == 0xD800) - c = (c << 10) + *s++ + 0x10000 - (0xD800 << 10) - 0xDC00; else - c = 0xFFFD; /* Malformed */ + { /* check for UTF16 encoding when wchar_t is too small to hold UCS */ + if (sizeof(wchar_t) < 4 && (c & 0xFC00) == 0xD800) + { register soap_wchar d = *s++; + if ((d & 0xFC00) == 0xDC00) + c = ((c - 0xD800) << 10) + (d - 0xDC00) + 0x10000; + else + c = 0xFFFD; /* Malformed */ } if (soap_pututf8(soap, (unsigned long)c)) return soap->error; @@ -10991,8 +11783,8 @@ soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen) struct soap_attribute *tp; t = soap->tmpbuf; *t = '<'; - t[sizeof(soap->tmpbuf)-1] = '\0'; strncpy(t + 1, soap->tag, sizeof(soap->tmpbuf) - 2); + t[sizeof(soap->tmpbuf) - 1] = '\0'; t += strlen(t); for (tp = soap->attributes; tp; tp = tp->next) { if (tp->visible) @@ -11048,7 +11840,7 @@ soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen) break; case SOAP_LT: if (f && n == 0) - goto end; + goto end; n++; *s++ = '<'; break; @@ -11097,14 +11889,14 @@ soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen) default: if ((int)c == EOF) goto end; - if (sizeof(wchar_t) < 4 && c > 0xFFFF) - { wchar_t c1, c2; - /* http://unicode.org/faq/utf_bom.html#utf16-2 */ - c1 = 0xD800 - (0x10000 >> 10) + (c >> 10); - c2 = 0xDC00 + (c & 0x3FF); - c = c1; - soap_unget(soap, c2); - } + /* use UTF16 encoding when wchar_t is too small to hold UCS */ + if (sizeof(wchar_t) < 4 && c > 0xFFFF) + { register soap_wchar c1, c2; + c1 = 0xD800 - (0x10000 >> 10) + (c >> 10); + c2 = 0xDC00 + (c & 0x3FF); + c = c1; + soap_unget(soap, c2); + } *s++ = (wchar_t)c & 0x7FFFFFFF; } l++; @@ -11164,14 +11956,18 @@ int SOAP_FMAC2 soap_s2int(struct soap *soap, const char *s, int *p) { if (s) - { char *r; + { long n; + 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 + n = soap_strtol(s, &r, 10); + if (s == r || *r +#ifndef WITH_LEAN + || n != (int)n +#endif #ifndef WITH_NOIO #ifndef WITH_LEAN || soap_errno == SOAP_ERANGE @@ -11179,6 +11975,7 @@ soap_s2int(struct soap *soap, const char *s, int *p) #endif ) soap->error = SOAP_TYPE; + *p = (int)n; } return soap->error; } @@ -11222,7 +12019,12 @@ SOAP_FMAC1 const char* SOAP_FMAC2 soap_long2s(struct soap *soap, long n) -{ sprintf(soap->tmpbuf, "%ld", n); +{ +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%ld", n); +#else + sprintf(soap->tmpbuf, "%ld", n); +#endif return soap->tmpbuf; } #endif @@ -11254,7 +12056,7 @@ soap_s2long(struct soap *soap, const char *s, long *p) #endif #endif *p = soap_strtol(s, &r, 10); - if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r + if (s == r || *r #ifndef WITH_NOIO #ifndef WITH_LEAN || soap_errno == SOAP_ERANGE @@ -11305,7 +12107,12 @@ SOAP_FMAC1 const char* SOAP_FMAC2 soap_LONG642s(struct soap *soap, LONG64 n) -{ sprintf(soap->tmpbuf, SOAP_LONG_FORMAT, n); +{ +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), SOAP_LONG_FORMAT, n); +#else + sprintf(soap->tmpbuf, SOAP_LONG_FORMAT, n); +#endif return soap->tmpbuf; } #endif @@ -11338,8 +12145,8 @@ soap_s2LONG64(struct soap *soap, const char *s, LONG64 *p) soap_reset_errno; #endif #endif - *p = strtoll(s, &r, 10); - if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r + *p = soap_strtoll(s, &r, 10); + if (s == r || *r #ifndef WITH_NOIO #ifndef WITH_LEAN || soap_errno == SOAP_ERANGE @@ -11551,12 +12358,19 @@ soap_float2s(struct soap *soap, float 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); +# ifdef WIN32 + _sprintf_s_l(soap->tmpbuf, _countof(soap->tmpbuf), soap->float_format, soap->c_locale, n); +# else + sprintf_l(soap->tmpbuf, soap->c_locale, soap->float_format, n); +# endif #else - sprintf(s, soap->float_format, n); - s = strchr(s, ','); /* convert decimal comma to DP */ +# ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), soap->float_format, n); +# else + sprintf(soap->tmpbuf, soap->float_format, n); +# endif + s = strchr(soap->tmpbuf, ','); /* convert decimal comma to DP */ if (s) *s = '.'; #endif @@ -11599,7 +12413,11 @@ soap_s2float(struct soap *soap, const char *s, float *p) /* 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; +# ifdef WIN32 + *p = (float)_strtod_l(s, &r, soap->c_locale); +# else *p = (float)strtod_l(s, &r, soap->c_locale); +# endif if (*r) #elif defined(HAVE_STRTOD) char *r; @@ -11616,10 +12434,10 @@ soap_s2float(struct soap *soap, const char *s, float *p) #endif { #if defined(HAVE_SSCANF_L) && !defined(HAVE_STRTOF_L) && !defined(HAVE_STRTOD_L) - if (sscanf_l(s, soap->c_locale, "%g", p) != 1) + if (sscanf_l(s, soap->c_locale, "%f", p) != 1) soap->error = SOAP_TYPE; #elif defined(HAVE_SSCANF) - if (sscanf(s, "%g", p) != 1) + if (sscanf(s, "%f", p) != 1) soap->error = SOAP_TYPE; #else soap->error = SOAP_TYPE; @@ -11697,12 +12515,19 @@ soap_double2s(struct soap *soap, double 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); +# ifdef WIN32 + _sprintf_s_l(soap->tmpbuf, _countof(soap->tmpbuf), soap->double_format, soap->c_locale, n); +# else + sprintf_l(soap->tmpbuf, soap->c_locale, soap->double_format, n); +# endif +#else +# ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), soap->double_format, n); #else - sprintf(s, soap->double_format, n); - s = strchr(s, ','); /* convert decimal comma to DP */ + sprintf(soap->tmpbuf, soap->double_format, n); +#endif + s = strchr(soap->tmpbuf, ','); /* convert decimal comma to DP */ if (s) *s = '.'; #endif @@ -11744,7 +12569,11 @@ soap_s2double(struct soap *soap, const char *s, double *p) { #if defined(HAVE_STRTOD_L) char *r; +# ifdef WIN32 + *p = _strtod_l(s, &r, soap->c_locale); +# else *p = strtod_l(s, &r, soap->c_locale); +# endif if (*r) #elif defined(HAVE_STRTOD) char *r; @@ -11753,10 +12582,10 @@ soap_s2double(struct soap *soap, const char *s, double *p) #endif { #if defined(HAVE_SSCANF_L) && !defined(HAVE_STRTOF_L) && !defined(HAVE_STRTOD_L) - if (sscanf_l(s, soap->c_locale, "%lg", p) != 1) + if (sscanf_l(s, soap->c_locale, "%lf", p) != 1) soap->error = SOAP_TYPE; #elif defined(HAVE_SSCANF) - if (sscanf(s, "%lg", p) != 1) + if (sscanf(s, "%lf", p) != 1) soap->error = SOAP_TYPE; #else soap->error = SOAP_TYPE; @@ -12024,7 +12853,12 @@ SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedLong2s(struct soap *soap, unsigned long n) -{ sprintf(soap->tmpbuf, "%lu", n); +{ +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%lu", n); +#else + sprintf(soap->tmpbuf, "%lu", n); +#endif return soap->tmpbuf; } #endif @@ -12107,7 +12941,12 @@ SOAP_FMAC1 const char* SOAP_FMAC2 soap_ULONG642s(struct soap *soap, ULONG64 n) -{ sprintf(soap->tmpbuf, SOAP_ULONG_FORMAT, n); +{ +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), SOAP_ULONG_FORMAT, n); +#else + sprintf(soap->tmpbuf, SOAP_ULONG_FORMAT, n); +#endif return soap->tmpbuf; } #endif @@ -12140,7 +12979,7 @@ soap_s2ULONG64(struct soap *soap, const char *s, ULONG64 *p) soap_reset_errno; #endif #endif - *p = strtoull(s, &r, 10); + *p = soap_strtoull(s, &r, 10); if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r #ifndef WITH_NOIO #ifndef WITH_LEAN @@ -12209,7 +13048,7 @@ soap_s2string(struct soap *soap, const char *s, char **t, long minlen, long maxl /* remove non-ASCII chars */ for (s = *t; *s; s++) if (!(*s & 0x80)) - *r++ = *s; + *r++ = *s; *r = '\0'; } } @@ -12241,18 +13080,18 @@ soap_s2QName(struct soap *soap, const char *s, char **t, long minlen, long maxle break; /* find next QName */ n = 1; - while (s[n] && !soap_blank(s[n])) + while (s[n] && !soap_blank((soap_wchar)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)) + /* if there is no namespace stack, or prefix is "#" or "xml" then copy string */ + if (!np || *s == '#' || !strncmp(s, "xml:", 4)) { soap_append_lab(soap, s, n); } else /* we normalize the QName by replacing its prefix */ { const char *q; for (p = s; *p && p < s + n; p++) if (*p == ':') - break; + break; if (*p == ':') { size_t k = p - s; while (np && (strncmp(np->id, s, k) || np->id[k])) @@ -12268,30 +13107,30 @@ soap_s2QName(struct soap *soap, const char *s, char **t, long minlen, long maxle if (np) { if (np->index >= 0 && soap->local_namespaces && (q = soap->local_namespaces[np->index].id)) { size_t k = strlen(q); - if (q[k-1] != '_') - soap_append_lab(soap, q, k); - else + if (q[k-1] != '_') + soap_append_lab(soap, q, k); + else { soap_append_lab(soap, "\"", 1); soap_append_lab(soap, soap->local_namespaces[np->index].ns, strlen(soap->local_namespaces[np->index].ns)); soap_append_lab(soap, "\"", 1); - } - } + } + } 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)); + { 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 */ + else /* no namespace: assume "" namespace */ { soap_append_lab(soap, "\"\"", 2); - } + } soap_append_lab(soap, ":", 1); soap_append_lab(soap, p, n - (p-s)); } @@ -12330,14 +13169,19 @@ soap_QName2s(struct soap *soap, const char *s) n++; /* normal prefix: pass string as is */ if (*s != '"') - { soap_append_lab(soap, s, n); + { #ifndef WITH_LEAN if ((soap->mode & SOAP_XML_CANONICAL)) + soap_utilize_ns(soap, s); + if ((soap->mode & SOAP_XML_DEFAULTNS)) { const char *r = strchr(s, ':'); - if (r) - soap_utilize_ns(soap, s, r - s); + if (r && soap->nlist && !strncmp(soap->nlist->id, s, r-s) && !soap->nlist->id[r-s]) + { n -= r-s + 1; + s = r + 1; + } } #endif + soap_append_lab(soap, s, n); } else /* URL-based string prefix */ { const char *q; @@ -12357,12 +13201,22 @@ soap_QName2s(struct soap *soap, const char *s) } /* URL is in the namespace table? */ if (p && p->id) - { soap_append_lab(soap, p->id, strlen(p->id)); + { const char *r = p->id; +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_DEFAULTNS) && soap->nlist && !strcmp(soap->nlist->id, r)) + q++; + else +#endif + soap_append_lab(soap, r, strlen(r)); } else /* not in namespace table: create xmlns binding */ { char *r = soap_strdup(soap, s); r[q-s] = '\0'; +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "xmlns:_%d", soap->idnum++); +#else sprintf(soap->tmpbuf, "xmlns:_%d", soap->idnum++); +#endif soap_set_attr(soap, soap->tmpbuf, r, 1); soap_append_lab(soap, soap->tmpbuf + 6, strlen(soap->tmpbuf + 6)); } @@ -12515,7 +13369,8 @@ 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)) +{ (void)type; + if (soap_element_begin_in(soap, tag, 1, NULL)) { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG) return NULL; soap->error = SOAP_OK; @@ -12581,7 +13436,8 @@ 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)) +{ (void)type; + if (soap_element_begin_in(soap, tag, 1, NULL)) { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG) return NULL; soap->error = SOAP_OK; @@ -12659,6 +13515,20 @@ soap_dateTime2s(struct soap *soap, time_t n) #elif defined(HAVE_GMTIME) if ((pT = gmtime(&n))) strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT); +#elif defined(HAVE_TM_GMTOFF) || defined(HAVE_STRUCT_TM_TM_GMTOFF) || defined(HAVE_STRUCT_TM___TM_GMTOFF) +#if defined(HAVE_LOCALTIME_R) + if (localtime_r(&n, pT)) + { strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S%z", pT); + memmove(soap->tmpbuf + 23, soap->tmpbuf + 22, 3); /* 2000-03-01T02:00:00+0300 */ + soap->tmpbuf[22] = ':'; /* 2000-03-01T02:00:00+03:00 */ + } +#else + if ((pT = localtime(&n))) + { strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S%z", pT); + memmove(soap->tmpbuf + 23, soap->tmpbuf + 22, 3); /* 2000-03-01T02:00:00+0300 */ + soap->tmpbuf[22] = ':'; /* 2000-03-01T02:00:00+03:00 */ + } +#endif #elif defined(HAVE_GETTIMEOFDAY) struct timezone tz; memset((void*)&tz, 0, sizeof(tz)); @@ -12667,14 +13537,22 @@ soap_dateTime2s(struct soap *soap, time_t n) { struct timeval tv; gettimeofday(&tv, &tz); strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf + strlen(soap->tmpbuf), sizeof(soap->tmpbuf) - strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60); +#else sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60); +#endif } #else if ((pT = localtime(&n))) { struct timeval tv; gettimeofday(&tv, &tz); strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf + strlen(soap->tmpbuf), sizeof(soap->tmpbuf) - strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60); +#else sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60); +#endif } #endif #elif defined(HAVE_FTIME) @@ -12689,7 +13567,11 @@ soap_dateTime2s(struct soap *soap, time_t n) ftime(&t); #endif strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf + strlen(soap->tmpbuf), sizeof(soap->tmpbuf) - strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60); +#else sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60); +#endif } #else if ((pT = localtime(&n))) @@ -12700,7 +13582,11 @@ soap_dateTime2s(struct soap *soap, time_t n) ftime(&t); #endif strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf + strlen(soap->tmpbuf), sizeof(soap->tmpbuf) - strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60); +#else sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60); +#endif } #endif #elif defined(HAVE_LOCALTIME_R) @@ -12768,7 +13654,7 @@ soap_s2dateTime(struct soap *soap, const char *s, time_t *p) { int h = 0, m = 0; if (s[3] == ':') { /* +hh:mm */ - sscanf(s, "%d:%d", &h, &m); + sscanf(s, "%d:%d", &h, &m); if (h < 0) m = -m; } @@ -12777,22 +13663,22 @@ soap_s2dateTime(struct soap *soap, const char *s, time_t *p) h = m / 100; m = m % 100; } - T.tm_min -= m; - T.tm_hour -= h; - /* put hour and min in range */ + 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_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 */ + } + /* note: day of the month may be out of range, timegm() handles it */ } #endif *p = soap_timegm(&T); @@ -12844,8 +13730,11 @@ soap_outliteral(struct soap *soap, const char *tag, char *const*p, const char *t 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'; + { size_t n = t - tag; + if (n >= sizeof(soap->tmpbuf)) + n = sizeof(soap->tmpbuf) - 1; + strncpy(soap->tmpbuf, tag, n); + soap->tmpbuf[n] = '\0'; for (i = 0; soap->local_namespaces[i].id; i++) if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id)) break; @@ -12862,7 +13751,7 @@ soap_outliteral(struct soap *soap, const char *tag, char *const*p, const char *t } } if (p && *p) - { if (soap_send(soap, *p)) + { if (soap_send(soap, *p)) /* send as-is */ return soap->error; } if (t) @@ -12916,8 +13805,11 @@ soap_outwliteral(struct soap *soap, const char *tag, wchar_t *const*p, const cha 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'; + { size_t n = t - tag; + if (n >= sizeof(soap->tmpbuf)) + n = sizeof(soap->tmpbuf) - 1; + strncpy(soap->tmpbuf, tag, n); + soap->tmpbuf[n] = '\0'; for (i = 0; soap->local_namespaces[i].id; i++) if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id)) break; @@ -12932,14 +13824,12 @@ soap_outwliteral(struct soap *soap, const char *tag, wchar_t *const*p, const cha 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)) + { if (soap_pututf8(soap, (unsigned long)c)) /* send as-is in UTF8 */ return soap->error; } } @@ -13014,6 +13904,7 @@ soap_value(struct soap *soap) break; } s[1] = '\0'; + soap->tmpbuf[sizeof(soap->tmpbuf) - 1] = '\0'; /* appease */ 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); @@ -13044,22 +13935,22 @@ soap_getline(struct soap *soap, char *s, int len) if (c == '\r' || c == '\n') break; if ((int)c == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_EOF; *s++ = (char)c; } + *s = '\0'; 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 */ + { 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_CHK_EOF; + if (i <= 0) return soap->error = SOAP_HDR; } return SOAP_OK; @@ -13119,7 +14010,7 @@ soap_count_attachments(struct soap *soap) /* count \r\n--boundary-- */ count += 6 + n; } - DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New count is %lu bytes\n", (unsigned long)count)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New count=%lu\n", (unsigned long)count)); return count; #else return soap->count; @@ -13173,7 +14064,7 @@ 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)); + 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) @@ -13269,7 +14160,7 @@ soap_putdime(struct soap *soap) 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; + soap->error = SOAP_CHK_EOF; break; } if (soap_send_raw(soap, soap->tmpbuf, bufsize)) @@ -13311,13 +14202,13 @@ soap_getdimefield(struct soap *soap, size_t n) { s = p; for (i = n; i > 0; i--) { if ((int)(c = soap_get1(soap)) == EOF) - { soap->error = SOAP_EOF; + { soap->error = SOAP_CHK_EOF; return NULL; } *s++ = (char)c; } *s = '\0'; - if ((soap->error = soap_move(soap, -(long)n&3))) + if ((soap->error = soap_move(soap, (size_t)(-(long)n&3)))) return NULL; } else @@ -13344,8 +14235,8 @@ soap_getdimehdr(struct soap *soap) 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; + { if (soap_move(soap, soap->dime.size - soap_tell(soap))) + return soap->error = SOAP_CHK_EOF; soap_unget(soap, soap_getchar(soap)); /* skip padding and get hdr */ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... From chunked\n")); return SOAP_OK; @@ -13353,7 +14244,7 @@ soap_getdimehdr(struct soap *soap) s = (char*)tmp; for (i = 12; i > 0; i--) { if ((int)(c = soap_getchar(soap)) == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_EOF; *s++ = (char)c; } if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION) @@ -13362,7 +14253,7 @@ soap_getdimehdr(struct soap *soap) 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]; + 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, "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; @@ -13370,7 +14261,7 @@ soap_getdimehdr(struct soap *soap) 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)); + 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; @@ -13388,10 +14279,10 @@ 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)) + if (soap_move(soap, soap->dime.size)) return soap->error = SOAP_EOF; } - if (soap_move(soap, (long)(((soap->dime.size+3)&(~3))-soap_tell(soap)))) + if (soap_move(soap, (size_t)(((soap->dime.size+3)&(~3)) - soap_tell(soap)))) return soap->error = SOAP_EOF; for (;;) { register struct soap_multipart *content; @@ -13423,7 +14314,7 @@ soap_getdime(struct soap *soap) goto end; } } - if (soap_move(soap, -(long)soap->dime.size&3)) + if (soap_move(soap, (size_t)(-(long)soap->dime.size&3))) { soap->error = SOAP_EOF; break; } @@ -13451,6 +14342,10 @@ end: { register soap_wchar c; register size_t i; register char *s; + if (soap->dime.size > SOAP_MAXDIMESIZE) + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME size=%lu exceeds SOAP_MAXDIMESIZE=%lu\n", (unsigned long)soap->dime.size, (unsigned long)SOAP_MAXDIMESIZE)); + return soap->error = SOAP_DIME_ERROR; + } s = (char*)soap_push_block(soap, NULL, soap->dime.size); if (!s) return soap->error = SOAP_EOM; @@ -13459,17 +14354,17 @@ end: return soap->error = SOAP_EOF; *s++ = (char)c; } - if (soap_move(soap, -(long)soap->dime.size&3)) + if (soap_move(soap, (size_t)(-(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' */ + soap->dime.size = soap->blist->size++; /* allocate one more byte in blist for the terminating '\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.ptr[soap->dime.size] = '\0'; /* make 0-terminated */ soap->dime.id = id; soap->dime.type = type; soap->dime.options = options; @@ -13622,7 +14517,7 @@ soap_get_mime_attachment(struct soap *soap, void *handle) 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)); + 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; @@ -13643,7 +14538,9 @@ soap_get_mime_attachment(struct soap *soap, void *handle) { if (!flag) { c = soap_get1(soap); if ((int)c == EOF) - { soap->error = SOAP_EOF; + { if (content->ptr && soap->fmimewriteclose) + soap->fmimewriteclose(soap, (void*)content->ptr); + soap->error = SOAP_CHK_EOF; return NULL; } } @@ -13656,7 +14553,9 @@ soap_get_mime_attachment(struct soap *soap, void *handle) do c = soap_getchar(soap); while (c == *t++); if ((int)c == EOF) - { soap->error = SOAP_EOF; + { if (content->ptr && soap->fmimewriteclose) + soap->fmimewriteclose(soap, (void*)content->ptr); + soap->error = SOAP_CHK_EOF; return NULL; } if (!*--t) @@ -13676,7 +14575,7 @@ soap_get_mime_attachment(struct soap *soap, void *handle) } } end: - *s = '\0'; /* force 0-terminated */ + *s = '\0'; /* make 0-terminated */ if (content->ptr) { if (!soap->error && soap->fmimewrite) soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i); @@ -13686,7 +14585,7 @@ end: return NULL; } else - { content->size = soap_size_block(soap, NULL, i+1)-1; + { content->size = soap_size_block(soap, NULL, i+1) - 1; /* last block with '\0' */ content->ptr = soap_save_block(soap, NULL, NULL, 0); } soap_resolve_attachment(soap, content); @@ -13750,11 +14649,11 @@ 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)); + 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)); + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Found matching attachment id='%s' for content id='%s'\n", xq->id, content->id)); *xp = xq->next; *xq->ptr = (unsigned char*)content->ptr; *xq->size = (int)content->size; @@ -13781,7 +14680,7 @@ 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)); + 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")) @@ -14072,7 +14971,7 @@ soap_getgziphdr(struct soap *soap) 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; + return soap->error = SOAP_ZLIB_ERROR; if (i == 1 && c == 8) soap->z_dict = 0; if (i == 2) @@ -14081,7 +14980,7 @@ soap_getgziphdr(struct soap *soap) 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; + return soap->error = SOAP_ZLIB_ERROR; } } if (f & 0x08) /* skip FNAME */ @@ -14099,7 +14998,7 @@ soap_getgziphdr(struct soap *soap) c = soap_get1(soap); } if ((int)c == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_ZLIB_ERROR; return SOAP_OK; } #endif @@ -14110,10 +15009,43 @@ soap_getgziphdr(struct soap *soap) SOAP_FMAC1 int SOAP_FMAC2 +soap_begin_serve(struct soap *soap) +{ +#ifdef WITH_FASTCGI + if (FCGI_Accept() < 0) + { soap->error = SOAP_EOF; + return soap_send_fault(soap); + } +#endif + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + { if (soap->error < SOAP_STOP) + { +#ifdef WITH_FASTCGI + soap_send_fault(soap); +#else + return soap_send_fault(soap); +#endif + } + return soap_closesock(soap); + } + return SOAP_OK; +} +#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")); +{ register soap_wchar c; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for input from socket=%d/fd=%d\n", soap->socket, soap->recvfd)); soap->error = SOAP_OK; + soap->filterstop = SOAP_OK; soap_free_temp(soap); soap_set_local_namespaces(soap); soap->version = 0; /* don't assume we're parsing SOAP content by default */ @@ -14135,6 +15067,7 @@ soap_begin_recv(struct soap *soap) soap->level = 0; soap->part = SOAP_BEGIN; soap->alloced = 0; + soap->body = 1; soap->count = 0; soap->length = 0; soap->cdata = 0; @@ -14143,6 +15076,7 @@ soap_begin_recv(struct soap *soap) soap->header = NULL; soap->fault = NULL; soap->status = 0; + soap->fform = NULL; #ifndef WITH_LEANER soap->dom = NULL; soap->dime.chunksize = 0; @@ -14159,7 +15093,7 @@ soap_begin_recv(struct soap *soap) #ifdef WIN32 #ifndef UNDER_CE #ifndef WITH_FASTCGI - if (!soap_valid_socket(soap->socket)) + if (!soap_valid_socket(soap->socket) && !soap->is) /* Set win32 stdout or soap->sendfd to BINARY, e.g. to support DIME */ #ifdef __BORLANDC__ setmode(soap->recvfd, _O_BINARY); #else @@ -14210,7 +15144,7 @@ soap_begin_recv(struct soap *soap) /* 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->d_stream->avail_in = (unsigned int)(soap->buflen - soap->bufidx); soap->z_buflen = soap->buflen; soap->buflen = soap->bufidx; c = ' '; @@ -14226,18 +15160,28 @@ soap_begin_recv(struct soap *soap) else #endif { /* skip BOM */ - if (c == 0xEF && (c = soap_getchar(soap)) == 0xBB && (c = soap_getchar(soap)) == 0xBF) - c = soap_getchar(soap); + if (c == 0xEF && soap_get0(soap) == 0xBB) + { c = soap_get1(soap); + if ((c = soap_get1(soap)) == 0xBF) + { soap->mode &= ~SOAP_ENC_LATIN; + c = soap_getchar(soap); + } + else + c = (0x0F << 12) | (0xBB << 6) | (c & 0x3F); /* UTF-8 */ + } + else if ((c == 0xFE && soap_get0(soap) == 0xFF) /* UTF-16 BE */ + || (c == 0xFF && soap_get0(soap) == 0xFE)) /* UTF-16 LE */ + return soap->error = SOAP_UTF_ERROR; /* skip space */ while (soap_blank(c)) c = soap_getchar(soap); } if ((int)c == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_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))) + /* if not XML/MIME/DIME/ZLIB, assume HTTP method or status line */ + if (((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) && !(soap->mode & (SOAP_ENC_MIME | SOAP_ENC_DIME | SOAP_ENC_ZLIB | SOAP_ENC_XML))) { soap_mode m = soap->imode; soap->mode &= ~SOAP_IO; soap->error = soap->fparse(soap); @@ -14246,7 +15190,13 @@ soap_begin_recv(struct soap *soap) return soap->error; } if (soap->error == SOAP_STOP) + { if (soap->fform) + { soap->error = soap->fform(soap); + if (soap->error == SOAP_OK) + soap->error = SOAP_STOP; /* prevents further processing */ + } return soap->error; + } soap->mode = soap->imode; /* if imode is changed, effectuate */ soap->imode = m; /* restore imode */ #ifdef WITH_ZLIB @@ -14258,17 +15208,19 @@ soap_begin_recv(struct soap *soap) 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 */ +#if 0 + if (soap->status > 200 && soap->length == 0 && !(soap->http_content && (!soap->keep_alive || soap->recv_timeout)) && (soap->imode & SOAP_IO) != SOAP_IO_CHUNK) +#endif + if (soap->status && !soap->body) 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 == (int)EOF) + return soap->error = SOAP_EOF; if (c == 0x1F) { if (soap_getgziphdr(soap)) return soap->error; @@ -14299,7 +15251,7 @@ soap_begin_recv(struct soap *soap) 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->d_stream->avail_in = (unsigned int)(soap->buflen - soap->bufidx); soap->z_buflen = soap->buflen; soap->buflen = soap->bufidx; } @@ -14307,10 +15259,16 @@ soap_begin_recv(struct soap *soap) #ifndef WITH_LEANER if (soap->fpreparerecv && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK && soap->buflen > soap->bufidx) { int r; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking fpreparerecv\n")); if ((r = soap->fpreparerecv(soap, soap->buf + soap->bufidx, soap->buflen - soap->bufidx))) return soap->error = r; } #endif + if (soap_get0(soap) == (int)EOF) + { if (soap->status == 0 || soap->status == 200) + return soap->error = SOAP_NO_DATA; /* HTTP OK: always expect data */ + return soap->error = soap->status; + } if (soap->error) { if (soap->error == SOAP_FORM && soap->fform) { soap->error = soap->fform(soap); @@ -14325,7 +15283,7 @@ soap_begin_recv(struct soap *soap) if (soap->mode & SOAP_ENC_MIME) { do /* skip preamble */ { if ((int)(c = soap_getchar(soap)) == EOF) - return soap->error = SOAP_EOF; + return soap->error = SOAP_CHK_EOF; } while (c != '-' || soap_get0(soap) != '-'); soap_unget(soap, c); if (soap_getmimehdr(soap)) @@ -14384,7 +15342,11 @@ soap_envelope_begin_out(struct soap *soap) s = "application/xop+xml; charset=utf-8; type=\"text/xml\""; else s = "text/xml; charset=utf-8"; +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(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); +#else 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); +#endif n = strlen(soap->tmpbuf); if (soap_send_raw(soap, soap->tmpbuf, n)) return soap->error; @@ -14396,6 +15358,8 @@ soap_envelope_begin_out(struct soap *soap) return soap->error; } #endif + if (soap->version == 0) + return SOAP_OK; soap->part = SOAP_IN_ENVELOPE; return soap_element_begin_out(soap, "SOAP-ENV:Envelope", 0, NULL); } @@ -14407,12 +15371,19 @@ 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))) +{ if (soap->version == 0) + return SOAP_OK; + if (soap_element_end_out(soap, "SOAP-ENV:Envelope") + || soap_send_raw(soap, "\r\n", 2)) /* 2.8: always emit \r\n */ 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 */ +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->id, sizeof(soap->id), soap->dime_id_format, 0); +#else sprintf(soap->id, soap->dime_id_format, 0); +#endif soap->dime.id = soap->id; if (soap->local_namespaces) { if (soap->local_namespaces[0].out) @@ -14440,17 +15411,19 @@ soap_envelope_end_out(struct soap *soap) SOAP_FMAC1 char* SOAP_FMAC2 -soap_get_http_body(struct soap *soap) -{ +soap_get_http_body(struct soap *soap, size_t *len) +{ if (len) + *len = 0; #ifndef WITH_LEAN register size_t l = 0, n = 0; register char *s; - /* get HTML body of HTTP error content */ + /* get HTTP body length */ if (!(soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK) { n = soap->length; if (!n) return NULL; } + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Parsing HTTP body (mode=0x%x,len=%lu)\n", soap->mode, (unsigned long)n)); #ifdef WITH_FAST soap->labidx = 0; /* use look-aside buffer */ #else @@ -14472,19 +15445,23 @@ soap_get_http_body(struct soap *soap) return NULL; #endif for (i = 0; i < k; i++) - { register soap_wchar c = soap_getchar(soap); + { register soap_wchar c; + l++; + if (n > 0 && l > n) + goto end; + c = soap_get1(soap); if ((int)c == EOF) goto end; *s++ = (char)(c & 0xFF); - l++; - if (n > 0 && l >= n) - goto end; } } end: *s = '\0'; + if (len) + *len = l - 1; /* len excludes terminating \0 */ #ifdef WITH_FAST - s = soap_strdup(soap, soap->labbuf); + if ((s = (char*)soap_malloc(soap, l))) + memcpy(s, soap->labbuf, l); #else soap_size_block(soap, NULL, i+1); s = soap_save_block(soap, NULL, 0); @@ -14506,9 +15483,13 @@ 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; + { if (soap->error == SOAP_TAG_MISMATCH) + { if (!soap_element_begin_in(soap, "Envelope", 0, NULL)) + soap->error = SOAP_VERSIONMISMATCH; + else if (soap->status == 0 || (soap->status >= 200 && soap->status <= 299)) + return SOAP_OK; /* allow non-SOAP XML content to be captured */ + soap->error = soap->status; + } else if (soap->status) soap->error = soap->status; return soap->error; @@ -14543,7 +15524,9 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap *soap) -{ soap->part = SOAP_END_ENVELOPE; +{ if (soap->version == 0) + return SOAP_OK; + soap->part = SOAP_END_ENVELOPE; return soap_element_end_in(soap, "SOAP-ENV:Envelope"); } #endif @@ -14554,16 +15537,16 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out(struct soap *soap) -{ soap->part = SOAP_IN_BODY; - if (soap->version == 1) +{ if (soap->version == 1) soap->encoding = 1; #ifndef WITH_LEAN - if ((soap->mode & SOAP_XML_SEC) && soap_set_attr(soap, "wsu:Id", "Body", 1)) + if ((soap->mode & SOAP_SEC_WSUID) && 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); + if (soap->version == 0) + return SOAP_OK; + soap->part = SOAP_IN_BODY; + return soap_element_begin_out(soap, "SOAP-ENV:Body", 0, NULL); } #endif @@ -14573,7 +15556,9 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out(struct soap *soap) -{ if (soap_element_end_out(soap, "SOAP-ENV:Body")) +{ if (soap->version == 0) + return SOAP_OK; + if (soap_element_end_out(soap, "SOAP-ENV:Body")) return soap->error; soap->part = SOAP_END_BODY; return SOAP_OK; @@ -14586,7 +15571,9 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in(struct soap *soap) -{ soap->part = SOAP_IN_BODY; +{ if (soap->version == 0) + return SOAP_OK; + soap->part = SOAP_IN_BODY; if (soap_element_begin_in(soap, "SOAP-ENV:Body", 0, NULL)) return soap->error; if (!soap->body) @@ -14601,7 +15588,9 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in(struct soap *soap) -{ if (soap->part == SOAP_NO_BODY) +{ if (soap->version == 0) + return SOAP_OK; + 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"); @@ -14641,7 +15630,7 @@ soap_set_endpoint(struct soap *soap, const char *endpoint) if (!soap_tag_cmp(endpoint, "https:*")) soap->port = 443; #endif - strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint) - 1); + strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint)); soap->endpoint[sizeof(soap->endpoint) - 1] = '\0'; s = strchr(endpoint, ':'); if (s && s[1] == '/' && s[2] == '/') @@ -14753,22 +15742,32 @@ soap_try_connect_command(struct soap *soap, int http_command, const char *endpoi } else #endif + soap->action = soap_strdup(soap, action); 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)); + { soap->error = SOAP_OK; #ifndef WITH_LEAN if (!strncmp(endpoint, "soap.udp:", 9)) soap->omode |= SOAP_IO_UDP; + else #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); + { 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 '%s' host='%s' path='%s' port=%d\n", endpoint?endpoint:"(null)", soap->host, soap->path, soap->port)); + if (!soap->keep_alive || !soap_valid_socket(soap->socket)) + { 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); + } } } +#ifdef WITH_NTLM + if (soap_ntlm_handshake(soap, SOAP_GET, endpoint, soap->host, soap->port)) + return soap->error; +#endif count = soap_count_attachments(soap); if (soap_begin_send(soap)) return soap->error; @@ -14777,7 +15776,6 @@ soap_try_connect_command(struct soap *soap, int http_command, const char *endpoi 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); @@ -14793,12 +15791,94 @@ soap_try_connect_command(struct soap *soap, int http_command, const char *endpoi #endif soap->mode = k; } - if (http_command == SOAP_GET) - return soap_end_send(soap); + if (http_command == SOAP_GET || http_command == SOAP_DEL) + return soap_end_send_flush(soap); +#endif + return SOAP_OK; +} #endif + +/******************************************************************************/ +#ifdef WITH_NTLM +#ifndef PALM_1 +static int +soap_ntlm_handshake(struct soap *soap, int command, const char *endpoint, const char *host, int port) +{ /* requires libntlm from http://www.nongnu.org/libntlm/ */ + const char *userid = (soap->proxy_userid ? soap->proxy_userid : soap->userid); + const char *passwd = (soap->proxy_passwd ? soap->proxy_passwd : soap->passwd); + struct SOAP_ENV__Header *oldheader; + if (soap->ntlm_challenge && userid && passwd && soap->authrealm) + { tSmbNtlmAuthRequest req; + tSmbNtlmAuthResponse res; + tSmbNtlmAuthChallenge ch; + short k = soap->keep_alive; + size_t l = soap->length; + size_t c = soap->count; + soap_mode m = soap->mode, o = soap->omode; + int s = soap->status; + char *a = soap->action; + short v = soap->version; + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "NTLM '%s'\n", soap->ntlm_challenge)); + if (!*soap->ntlm_challenge) + { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "NTLM S->C Type 1: received NTLM authentication challenge from server\n")); + /* S -> C 401 Unauthorized + WWW-Authenticate: NTLM + */ + buildSmbNtlmAuthRequest(&req, userid, soap->authrealm); + soap->ntlm_challenge = soap_s2base64(soap, (unsigned char*)&req, NULL, SmbLength(&req)); + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "NTLM C->S Type 2: sending NTLM authorization to server\nAuthorization: NTLM %s\n", soap->ntlm_challenge)); + /* C -> S GET ... + Authorization: NTLM TlRMTVNTUAABAAAAA7IAAAoACgApAAAACQAJACAAAABMSUdIVENJVFlVUlNBLU1JTk9S + */ + soap->omode = SOAP_IO_BUFFER; + if (soap_begin_send(soap)) + return soap->error; + soap->keep_alive = 1; + soap->status = command; + if (soap->fpost(soap, endpoint, host, port, soap->path, soap->action, 0) + || soap_end_send_flush(soap)) + return soap->error; + soap->mode = m; + soap->keep_alive = k; + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "NTLM S->C Type 2: waiting on server NTLM response\n")); + oldheader = soap->header; + if (soap_begin_recv(soap)) + if (soap->error == SOAP_EOF) + return soap->error; + soap_end_recv(soap); + soap->header = oldheader; + soap->length = l; + if (soap->status != 401 && soap->status != 407) + return soap->error = SOAP_NTLM_ERROR; + soap->error = SOAP_OK; + } + /* S -> C 401 Unauthorized + WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAAAAACgAAAABggAAU3J2Tm9uY2UAAAAAAAAAAA== + */ + soap_base642s(soap, soap->ntlm_challenge, (char*)&ch, sizeof(tSmbNtlmAuthChallenge), NULL); + buildSmbNtlmAuthResponse(&ch, &res, userid, passwd); + soap->ntlm_challenge = soap_s2base64(soap, (unsigned char*)&res, NULL, SmbLength(&res)); + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "NTLM C->S Type 3: sending NTLM authorization to server\nAuthorization: NTLM %s\n", soap->ntlm_challenge)); + /* C -> S GET ... + Authorization: NTLM TlRMTVNTUAADAAAAGAAYAHIAAAAYABgAigAAABQAFABAAAAADAAMAFQAAAASABIAYAAAAAAAAACiAAAAAYIAAFUAUgBTAEEALQBNAEkATgBPAFIAWgBhAHAAaABvAGQATABJAEcASABUAEMASQBUAFkArYfKbe/jRoW5xDxHeoxC1gBmfWiS5+iX4OAN4xBKG/IFPwfH3agtPEia6YnhsADT + */ + soap->userid = NULL; + soap->passwd = NULL; + soap->proxy_userid = NULL; + soap->proxy_passwd = NULL; + soap->keep_alive = k; + soap->length = l; + soap->count = c; + soap->mode = m; + soap->omode = o; + soap->status = s; + soap->action = a; + soap->version = v; + } return SOAP_OK; } #endif +#endif /******************************************************************************/ #ifndef WITH_LEAN @@ -14826,13 +15906,13 @@ soap_s2base64(struct soap *soap, const unsigned char *s, char *t, int n) t += 4; } t[0] = '\0'; - if (n > 0) + if (n > 0) /* 0 < n <= 2 implies that t[0..4] is allocated (base64 scaling formula) */ { m = 0; for (i = 0; i < n; i++) m = (m << 8) | *s++; for (; i < 3; i++) m <<= 8; - for (i++; i > 0; m >>= 6) + for (i = 4; i > 0; m >>= 6) t[--i] = soap_base64o[m & 0x3F]; for (i = 3; i > n; i--) t[i] = '='; @@ -14848,7 +15928,8 @@ 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 size_t i, j; + register soap_wchar c; register unsigned long m; register const char *p; if (!s || !*s) @@ -14859,7 +15940,7 @@ soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n) return SOAP_NON_NULL; } if (!t) - { l = (strlen(s) + 3) / 4 * 3; + { l = (strlen(s) + 3) / 4 * 3 + 1; /* make sure enough space for \0 */ t = (char*)soap_malloc(soap, l); } if (!t) @@ -14867,55 +15948,57 @@ soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n) 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) + for (i = 0; ; i += 3, l -= 3) + { m = 0; + j = 0; + while (j < 4) + { c = *s++; + if (c == '=' || !c) + { if (l >= j - 1) + { switch (j) { case 2: *t++ = (char)((m >> 4) & 0xFF); i++; + l--; break; case 3: *t++ = (char)((m >> 10) & 0xFF); *t++ = (char)((m >> 2) & 0xFF); i += 2; + l -= 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 + '+')) + if (n) + *n = (int)i; + if (l) + *t = '\0'; + 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++; } - *t++ = (char)((m >> 16) & 0xFF); - *t++ = (char)((m >> 8) & 0xFF); - *t++ = (char)(m & 0xFF); - if (l < 3) - { if (n) - *n += i; - return p; + else if (!soap_blank(c + '+')) + { soap->error = SOAP_TYPE; + return NULL; } - l -= 3; } - if (n) - *n += 3 * SOAP_BLKLEN; + if (l < 3) + { if (n) + *n = (int)i; + if (l) + *t = '\0'; + return p; + } + *t++ = (char)((m >> 16) & 0xFF); + *t++ = (char)((m >> 8) & 0xFF); + *t++ = (char)(m & 0xFF); } } #endif @@ -14961,7 +16044,7 @@ soap_hex2s(struct soap *soap, const char *s, char *t, size_t l, int *n) return SOAP_NON_NULL; } if (!t) - { l = strlen(s) / 2; + { l = strlen(s) / 2 + 1; /* make sure enough space for \0 */ t = (char*)soap_malloc(soap, l); } if (!t) @@ -14975,11 +16058,13 @@ soap_hex2s(struct soap *soap, const char *s, char *t, size_t l, int *n) d2 = *s++; if (!d2) break; - *t++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0'); + *t++ = (char)(((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0')); l--; } if (n) *n = (int)(t - p); + if (l) + *t = '\0'; return p; } #endif @@ -14991,13 +16076,13 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap *soap, int status, size_t count) -{ if (soap->status != SOAP_GET) +{ if (soap->status != SOAP_GET && soap->status != SOAP_DEL && soap->status != SOAP_CONNECT) { 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) + if ((status == SOAP_FILE || soap->status == SOAP_PUT || soap->status == SOAP_POST_FILE) && soap->http_content && !strchr(s, 10) && !strchr(s, 13)) s = soap->http_content; else if (status == SOAP_HTML) s = "text/html; charset=utf-8"; @@ -15010,7 +16095,7 @@ soap_puthttphdr(struct soap *soap, int status, size_t count) { if (soap->mode & SOAP_ENC_MTOM) { if (soap->version == 2) r = "application/soap+xml"; - else + else r = "text/xml"; s = "application/xop+xml"; } @@ -15018,32 +16103,43 @@ soap_puthttphdr(struct soap *soap, int status, size_t count) 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, ';'); + { register const char *t; +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "multipart/related; charset=utf-8; boundary=\"%s\"; type=\"", soap->mime.boundary); +#else sprintf(soap->tmpbuf, "multipart/related; charset=utf-8; boundary=\"%s\"; type=\"", soap->mime.boundary); +#endif + t = strchr(s, ';'); if (t) - { strncat(soap->tmpbuf, s, t - s); - soap->tmpbuf[sizeof(soap->tmpbuf)-1] = '\0'; - } + strncat(soap->tmpbuf, s, t - s); else strcat(soap->tmpbuf, s); - if (soap->mime.start) + if (soap->mime.start && strlen(soap->tmpbuf) + strlen(soap->mime.start) + 11 < sizeof(soap->tmpbuf)) { strcat(soap->tmpbuf, "\"; start=\""); strcat(soap->tmpbuf, soap->mime.start); } strcat(soap->tmpbuf, "\""); - if (r) + if (r && strlen(soap->tmpbuf) + strlen(r) + 15 < sizeof(soap->tmpbuf)) { strcat(soap->tmpbuf, "; start-info=\""); strcat(soap->tmpbuf, r); strcat(soap->tmpbuf, "\""); } - s = soap->tmpbuf; } - else if (status == SOAP_OK && soap->action && strlen(soap->action) < sizeof(soap->tmpbuf) - 80) - { sprintf(soap->tmpbuf, "%s; action=\"%s\"", s, soap->action); - s = soap->tmpbuf; + else + strncpy(soap->tmpbuf, s, sizeof(soap->tmpbuf)); + soap->tmpbuf[sizeof(soap->tmpbuf) - 1] = '\0'; + s = soap->tmpbuf; + if (status == SOAP_OK && soap->version == 2 && soap->action && strlen(soap->action) + strlen(s) < sizeof(soap->tmpbuf) - 80) + { +#ifdef HAVE_SNPRINTF + size_t l = strlen(s); + soap_snprintf(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, "; action=\"%s\"", soap->action); +#else + sprintf(soap->tmpbuf + strlen(s), "; action=\"%s\"", soap->action); +#endif } #endif - if (s && (err = soap->fposthdr(soap, "Content-Type", s))) + if ((err = soap->fposthdr(soap, "Content-Type", s))) return err; #ifdef WITH_ZLIB if ((soap->omode & SOAP_ENC_ZLIB)) @@ -15063,7 +16159,12 @@ soap_puthttphdr(struct soap *soap, int status, size_t count) else #endif if (s) - { sprintf(soap->tmpbuf, "%lu", (unsigned long)count); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->tmpbuf, sizeof(soap->tmpbuf), "%lu", (unsigned long)count); +#else + sprintf(soap->tmpbuf, "%lu", (unsigned long)count); +#endif err = soap->fposthdr(soap, "Content-Length", soap->tmpbuf); } if (err) @@ -15078,10 +16179,30 @@ soap_puthttphdr(struct soap *soap, int status, size_t count) #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); +{ if (!t) + t = SOAP_STR_EOS; + if (*soap->tag) + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "Validation constraint violation: %s%s in element '%s'", s, t ? t : SOAP_STR_EOS, soap->tag); +#else + if (strlen(soap->tag) + strlen(t) < sizeof(soap->msgbuf) - 100) + sprintf(soap->msgbuf, "Validation constraint violation: %s%s in element '%s'", s, t, soap->tag); + else + sprintf(soap->msgbuf, "Validation constraint violation: %s", s); +#endif + } else - sprintf(soap->msgbuf, "Validation constraint violation: %s%s", s, t?t:SOAP_STR_EOS); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "Validation constraint violation: %s%s", s, t ? t : SOAP_STR_EOS); +#else + if (strlen(soap->tag) + strlen(t) < sizeof(soap->msgbuf) - 100) + sprintf(soap->msgbuf, "Validation constraint violation: %s%s", s, t); + else + sprintf(soap->msgbuf, "Validation constraint violation: %s", s); +#endif + } return soap->msgbuf; } #endif @@ -15123,11 +16244,16 @@ soap_set_fault(struct soap *soap) *s = "Well-formedness violation"; break; case SOAP_NO_TAG: - *s = "No XML root element"; + *s = "No tag: no XML root element or missing SOAP message body 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); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "The data in element '%s' must be understood but cannot be handled", soap->tag); +#else + strncpy(soap->msgbuf, soap->tag, sizeof(soap->msgbuf)); + soap->msgbuf[sizeof(soap->msgbuf) - 1] = '\0'; +#endif *s = soap->msgbuf; break; case SOAP_VERSIONMISMATCH: @@ -15142,13 +16268,17 @@ soap_set_fault(struct soap *soap) *s = soap_set_validation_fault(soap, "namespace error", NULL); break; case SOAP_USER_ERROR: - *s = "User error"; + *s = "User data error"; break; case SOAP_FATAL_ERROR: *s = "Fatal error"; break; case SOAP_NO_METHOD: +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "Method '%s' not implemented: method name or namespace not recognized", soap->tag); +#else sprintf(soap->msgbuf, "Method '%s' not implemented: method name or namespace not recognized", soap->tag); +#endif *s = soap->msgbuf; break; case SOAP_NO_DATA: @@ -15179,7 +16309,7 @@ soap_set_fault(struct soap *soap) *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); + *s = soap_set_validation_fault(soap, "multiple elements (use the SOAP_XML_TREE flag) with duplicate id ", soap->id); if (soap->version == 2) *soap_faultsubcode(soap) = "SOAP-ENC:DuplicateID"; break; @@ -15189,7 +16319,7 @@ soap_set_fault(struct soap *soap) *soap_faultsubcode(soap) = "SOAP-ENC:MissingID"; break; case SOAP_HREF: - *s = soap_set_validation_fault(soap, "incompatible object type ref/id pair ", soap->id); + *s = soap_set_validation_fault(soap, "incompatible object type id-ref ", soap->id); break; case SOAP_FAULT: break; @@ -15204,6 +16334,9 @@ soap_set_fault(struct soap *soap) case SOAP_HTTP_ERROR: *s = "An HTTP processing error occurred"; break; + case SOAP_NTLM_ERROR: + *s = "An HTTP NTLM authentication error occurred"; + break; case SOAP_SSL_ERROR: #ifdef WITH_OPENSSL *s = "SSL/TLS error"; @@ -15215,7 +16348,7 @@ soap_set_fault(struct soap *soap) *s = "Plugin registry error"; break; case SOAP_DIME_ERROR: - *s = "DIME format error"; + *s = "DIME format error or max DIME size exceeds SOAP_MAXDIMESIZE"; break; case SOAP_DIME_HREF: *s = "DIME href to missing attachment"; @@ -15237,7 +16370,11 @@ soap_set_fault(struct soap *soap) 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); +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "Zlib/gzip error: '%s'", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS); +#else + sprintf(soap->msgbuf, "Zlib/gzip error: '%s'", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS); +#endif *s = soap->msgbuf; #else *s = "Zlib/gzip not installed for (de)compression: recompile with -DWITH_GZIP"; @@ -15258,20 +16395,22 @@ soap_set_fault(struct soap *soap) case SOAP_FD_EXCEEDED: *s = "Maximum number of open connections was reached (no define HAVE_POLL): increase FD_SETSIZE"; break; + case SOAP_UTF_ERROR: + *s = "UTF content encoding error"; + break; case SOAP_STOP: - *s = "Stopped: no response to be sent or received (informative)"; + *s = "Stopped: no response sent or received (informative)"; break; #endif case SOAP_EOF: #ifndef WITH_NOIO - strcpy(soap->msgbuf, soap_strerror(soap)); + *s = soap_strerror(soap); /* *s = soap->msgbuf */ #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"; @@ -15281,13 +16420,23 @@ soap_set_fault(struct soap *soap) #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)); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "HTTP Error: %d %s", soap->error, http_error(soap, soap->error)); +#else + sprintf(soap->msgbuf, "HTTP Error: %d %s", soap->error, http_error(soap, soap->error)); +#endif *s = soap->msgbuf; } else #endif #endif - { sprintf(soap->msgbuf, "Error %d", soap->error); + { +#ifdef HAVE_SNPRINTF + soap_snprintf(soap->msgbuf, sizeof(soap->msgbuf), "Error %d", soap->error); +#else + sprintf(soap->msgbuf, "Error %d", soap->error); +#endif *s = soap->msgbuf; } } @@ -15301,7 +16450,7 @@ int SOAP_FMAC2 soap_send_fault(struct soap *soap) { register int status = soap->error; - if (status == SOAP_STOP) + if (status == SOAP_OK || 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 */ @@ -15309,7 +16458,7 @@ soap_send_fault(struct soap *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; + { register int r = 1; #ifndef WITH_NOIO if (soap->fpoll && soap->fpoll(soap)) r = 0; @@ -15317,9 +16466,10 @@ soap_send_fault(struct soap *soap) 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)) + { int t; + if (!(r & SOAP_TCP_SELECT_SND) + || ((r & SOAP_TCP_SELECT_RCV) + && recv(soap->socket, (char*)&t, 1, MSG_PEEK) < 0)) r = 0; } } @@ -15327,6 +16477,7 @@ soap_send_fault(struct soap *soap) #endif if (r > 0) { soap->error = SOAP_OK; + soap->encodingStyle = NULL; /* no encodingStyle in Faults */ soap_serializeheader(soap); soap_serializefault(soap); soap_begin_count(soap); @@ -15369,12 +16520,14 @@ soap_recv_fault(struct soap *soap, int check) && (soap->error != SOAP_TAG_MISMATCH || soap->level != 2)) return soap->error; } + else if (soap->version == 0) /* check == 1 but no SOAP: do not parse SOAP Fault */ + return SOAP_OK; 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")); + DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Error: soap_get_soapfault() failed at level %u tag '%s'\n", soap->level, soap->tag)); *soap_faultcode(soap) = (soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client"); soap->error = status; soap_set_fault(soap); @@ -15410,15 +16563,16 @@ 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); + if (!(m & SOAP_IO_UDP)) + { soap->count = 0; + if ((m & SOAP_IO) == SOAP_IO_CHUNK) + soap->omode = (m & ~SOAP_IO) | SOAP_IO_BUFFER; + soap_response(soap, httpstatuscode); + soap_end_send(soap); /* force end of sends */ + soap->error = SOAP_STOP; /* stops the server (from returning a response) */ + soap->omode = m; } - soap->omode = m; - return soap->error = SOAP_STOP; /* stops the server's response */ + return soap_closesock(soap); } #endif #endif @@ -15430,10 +16584,18 @@ 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; +{ if (!(soap->omode & SOAP_IO_UDP)) + { if (!soap_begin_recv(soap)) + { +#ifndef WITH_LEAN + if (soap->body) + soap_get_http_body(soap, NULL); /* read (empty?) HTTP body and discard */ +#endif + soap_end_recv(soap); + } + else if (soap->error == SOAP_NO_DATA || soap->error == 202) + soap->error = SOAP_OK; + } return soap_closesock(soap); } #endif @@ -15445,11 +16607,16 @@ soap_recv_empty_response(struct soap *soap) static const char* soap_strerror(struct soap *soap) { register int err = soap->errnum; + *soap->msgbuf = '\0'; if (err) { #ifndef WIN32 # ifdef HAVE_STRERROR_R - strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); +# ifdef _GNU_SOURCE + return strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* GNU-specific */ +# else + strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* XSI-compliant */ +# endif # else return strerror(err); # endif @@ -15488,10 +16655,24 @@ soap_strerror(struct soap *soap) su = 'u'; } if (rt) - sprintf(s + strlen(s), " (%d%cs receive delay)", rt, ru); + { +#ifdef HAVE_SNPRINTF + size_t l = strlen(s); + soap_snprintf(s + l, sizeof(soap->msgbuf) - l, " (%d%cs recv delay)", rt, ru); +#else + sprintf(s + strlen(s), " (%d%cs recv delay)", rt, ru); +#endif + } if (st) + { +#ifdef HAVE_SNPRINTF + size_t l = strlen(s); + soap_snprintf(s + l, sizeof(soap->msgbuf) - l, " (%d%cs send delay)", st, su); +#else sprintf(s + strlen(s), " (%d%cs send delay)", st, su); #endif + } +#endif } return soap->msgbuf; } @@ -15600,16 +16781,15 @@ 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) + { const char **c, *v = NULL, *s, *d; + c = soap_faultcode(soap); + if (!*c) soap_set_fault(soap); - c = *d; if (soap->version == 2) - v = *soap_faultsubcode(soap); + v = soap_check_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]"); + d = soap_check_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 : "[no detail]"); } } #endif @@ -15619,6 +16799,7 @@ soap_print_fault(struct soap *soap, FILE *fd) #ifdef __cplusplus #ifndef WITH_LEAN #ifndef WITH_NOSTDLIB +#ifndef WITH_COMPAT SOAP_FMAC1 void SOAP_FMAC2 @@ -15626,29 +16807,29 @@ 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) + { const char **c, *v = NULL, *s, *d; + c = soap_faultcode(soap); + if (!*c) soap_set_fault(soap); - c = *d; if (soap->version == 2) - v = *soap_faultsubcode(soap); + v = soap_check_faultsubcode(soap); s = *soap_faultstring(soap); - d = soap_faultdetail(soap); + d = soap_check_faultdetail(soap); os << (soap->version ? "SOAP 1." : "Error ") << (soap->version ? (int)soap->version : soap->error) - << " fault: " << c + << " fault: " << *c << "[" << (v ? v : "no subcode") << "]" << std::endl << "\"" << (s ? s : "[no reason]") << "\"" << std::endl - << "Detail: " << (d && *d ? *d : "[no detail]") + << "Detail: " << (d ? d : "[no detail]") << std::endl; } } #endif #endif #endif +#endif /******************************************************************************/ #ifndef WITH_LEAN @@ -15658,29 +16839,25 @@ 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); + { strncpy(buf, "Error: soap struct not initialized", len); + buf[len - 1] = '\0'; + } else if (soap->error) - { const char *c, *v = NULL, *s, **d; - d = soap_faultcode(soap); - if (!*d) + { const char **c, *v = NULL, *s, *d; + c = soap_faultcode(soap); + if (!*c) soap_set_fault(soap); - c = *d; if (soap->version == 2) v = *soap_faultsubcode(soap); s = *soap_faultstring(soap); - d = soap_faultdetail(soap); + d = soap_check_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]"); + soap_snprintf(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 : "[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]"); + if (len > 40 + (v ? strlen(v) : 0) + (s ? strlen(s) : 0) + (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 : "[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); + 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 @@ -15715,8 +16892,8 @@ soap_print_fault_location(struct soap *soap, FILE *fd) fprintf(fd, "%s%c\n\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; + soap->buf[i] = (char)c1; + soap->buf[j] = (char)c2; } #endif } @@ -15744,7 +16921,7 @@ soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap*, struct 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)); + 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; } diff --git a/ext/CrashServer/external/gsoap-win32-2.8.0/stdsoap2.h b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/stdsoap2.h similarity index 81% rename from ext/CrashServer/external/gsoap-win32-2.8.0/stdsoap2.h rename to ext/CrashServer/CrashHandler/DumpUploaderServiceLib/stdsoap2.h index 779de5101..041afcd5a 100644 --- a/ext/CrashServer/external/gsoap-win32-2.8.0/stdsoap2.h +++ b/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/stdsoap2.h @@ -1,10 +1,10 @@ /* - stdsoap2.h 2.8.0 + stdsoap2.h 2.8.17r gSOAP runtime engine gSOAP XML Web services tools -Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc., All Rights Reserved. +Copyright (C) 2000-2013, 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. -------------------------------------------------------------------------------- @@ -24,7 +24,7 @@ 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. +Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc., All Rights Reserved. -------------------------------------------------------------------------------- GPL license. @@ -51,6 +51,8 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com -------------------------------------------------------------------------------- */ +#define GSOAP_VERSION 20817 + #ifdef WITH_SOAPDEFS_H # include "soapdefs.h" /* include user-defined stuff */ #endif @@ -114,27 +116,6 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # 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 @@ -150,6 +131,13 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # endif #endif +/* for legacy purposes we use WIN32 macro even though 64 bit is supported */ +#ifdef _WIN64 +# ifndef WIN32 +# define WIN32 +# endif +#endif + #ifdef _WIN32_WCE # ifndef UNDER_CE # define UNDER_CE _WIN32_WCE @@ -228,12 +216,20 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # define WITH_LEAN # define HAVE_SSCANF # elif defined(WIN32) -# define HAVE_SNPRINTF +# if _MSC_VER >= 1400 +# define HAVE_SNPRINTF +# endif # define HAVE_STRRCHR # define HAVE_STRTOD # define HAVE_SSCANF +# define HAVE_STRTOD_L +# define HAVE_SPRINTF_L # define HAVE_STRTOL # define HAVE_STRTOUL +# if _MSC_VER >= 1300 +# define HAVE_STRTOLL /* use _strtoi64 */ +# define HAVE_STRTOULL /* use _strtoui64 */ +# endif # define HAVE_SYS_TIMEB_H # define HAVE_FTIME # define HAVE_GMTIME @@ -270,11 +266,14 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # define HAVE_STRTOUL # define HAVE_RAND_R # define HAVE_GMTIME_R +# define HAVE_TM_GMTOFF +# define HAVE_GETTIMEOFDAY # define HAVE_LOCALTIME_R # define HAVE_STRERROR_R # define HAVE_TIMEGM # define HAVE_WCTOMB # define HAVE_MBTOWC +# define HAVE_INTTYPES_H # elif defined(_AIX43) # define HAVE_SNPRINTF # define HAVE_STRRCHR @@ -311,9 +310,9 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # define HAVE_RAND_R # define HAVE_GMTIME_R # define HAVE_LOCALTIME_R -# define HAVE_STRERROR_R # define HAVE_WCTOMB # define HAVE_MBTOWC +# define HAVE_ISNAN # elif defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) # define HAVE_POLL # define HAVE_SNPRINTF @@ -336,7 +335,10 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # define HAVE_MBTOWC # define SOAP_LONG_FORMAT "%qd" # define SOAP_ULONG_FORMAT "%qu" +# define HAVE_ISNAN +# define HAVE_ISINF # elif defined(__VMS) +# include # define HAVE_SNPRINTF # define HAVE_STRRCHR # define HAVE_STRTOD @@ -373,6 +375,7 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # define HAVE_WCTOMB # define HAVE_MBTOWC # define HAVE_ISNAN +# define HAVE_ISINF # elif defined(TRU64) # define HAVE_SNPRINTF # define HAVE_STRRCHR @@ -484,10 +487,19 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # define HAVE_STRERROR_R # define HAVE_WCTOMB # define HAVE_MBTOWC -# define LONG64 long -# define ULONG64 unsigned LONG64 -# define SOAP_LONG_FORMAT "%ld" -# define SOAP_ULONG_FORMAT "%lu" +# elif defined(SUN_OS) +# 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 # else /* Default assumptions for supported functions */ # define HAVE_SNPRINTF @@ -510,11 +522,38 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # 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) +/* 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 + +/* native Win, HP-UX, and AIX compilers don't like empty structs */ +#if defined(WIN32) || defined(HP_UX) || defined(_AIX) || defined(AIX) || defined(VXWORKS) # define WITH_NOEMPTYSTRUCT #endif +#ifdef WITH_PURE_VIRTUAL +# define SOAP_PURE_VIRTUAL = 0 +#else +# define SOAP_PURE_VIRTUAL +#endif + #ifdef HP_UX # undef HAVE_STRTOLL # undef HAVE_STRTOULL @@ -529,8 +568,11 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com /* if we have xlocale.h we use it to avoid decimal point conversion issues */ #ifdef WITH_C_LOCALE -# include -# include +# ifdef WIN32 +# include +# else +# include +# endif #else # undef HAVE_STRTOF_L # undef HAVE_STRTOD_L @@ -538,6 +580,42 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # undef HAVE_SPRINTF_L #endif +#ifdef TANDEM_NONSTOP /* Support for Guardian */ +# define SOAP_BUFLEN (32767) +/*# define WITH_NOSTDLIB */ /* uncommment to remove stdlib dependences */ +# define WITH_NOIO /* no IO dependences, e.g. remove TCP/IP */ +# define int32_t int +# define int64_t long long +# define LONG64 long long +# define ULONG64 long long +# define DBL_PINFTY (1.1579208923716189e77) +# define WITH_NOEMPTYSTRUCT +# undef HAVE_WCTOMB +# undef HAVE_MBTOWC +# undef HAVE_GMTIME_R +# undef HAVE_LOCALTIME_R +# undef HAVE_SNPRINTF +# define SOAP_BUFLEN (32767) +# define SOAP_SOCKET short +#pragma nolist +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# define INET_ERROR 4294967295 +#pragma list +#elif defined(__TANDEM) /* Support for OSS */ +# define int32_t int +# define SOAP_BUFLEN (32767) +#endif + #ifndef WITH_NOSTDLIB # include # ifndef PALM @@ -548,6 +626,10 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # include #endif +#ifdef WITH_NTLM +# include +#endif + #ifdef HAVE_POLL # include #endif @@ -634,14 +716,6 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # define SOAP_WINSOCKINT size_t #endif -#ifdef WITH_IPV6 -# ifdef IPV6_V6ONLY -# if !defined(WITH_NO_IPV6_V6ONLY) && !defined(WITH_IPV6_V6ONLY) -# define WITH_NO_IPV6_V6ONLY /* turn on IPv6-IPv4 switching */ -# endif -# endif -#endif - #if defined(WITH_IPV6_V6ONLY) || defined(WITH_NO_IPV6_V6ONLY) # ifndef WITH_IPV6 # define WITH_IPV6 @@ -653,18 +727,20 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # include # include # endif +// When you get macro redefinition errors when compiling the code below, then: +// a) try arrange your includes so is included after "stdsoap2.h" +// b) or define _WINSOCKAPI_ first: +// #define _WINSOCKAPI_ // stops windows.h including winsock.h +// #include +// #include "stdsoap2.h" +// c) or compile with the -DWIN32_LEAN_AND_MEAN switch +# include // Visual Studio 2005 users: install Platform SDK (R2) +# include +// # define _WSPIAPI_COUNTOF // DEV NOTE: enble to fix problems with VC6 +// # include +# include // DEV NOTE: replaces older wspiapi.h above # ifdef WITH_IPV6 -# include /* Visual Studio 2005 users: you must install the Platform SDK (R2) */ -# include -# include # define SOAP_GAI_STRERROR gai_strerrorA -# else -# ifndef __BORLANDC__ -# include /* Visual Studio 2005 users: you must install the Platform SDK (R2) */ -/* # include */ /* Alternative: use winsock2 (not available with eVC), enable this line and comment out the line above */ -# else -# include /* Borland C */ -# endif # endif #else # ifdef VXWORKS @@ -690,6 +766,10 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com #endif #ifdef WITH_OPENSSL +# ifdef __VMS +# pragma names save +# pragma names uppercase +# endif # undef WITH_GNUTLS # define OPENSSL_NO_KRB5 # include @@ -702,6 +782,9 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # error "Must use OpenSSL 0.9.6 or later" # endif # endif +# ifdef __VMS +# pragma names restore +# endif #endif #ifdef WITH_GNUTLS @@ -737,14 +820,16 @@ A commercial use license is available from Genivia, Inc., contact@genivia.com # endif #endif -/* #define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log) */ +/* #define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and internal operations (in file TEST.log) */ + +/* #define DEBUG_STAMP */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and time-stamped operations (in file TEST.log) */ #ifdef __cplusplus extern "C" { #endif /* Portability: define SOAP_SOCKLEN_T */ -#if defined(_AIX) +#if defined(_AIX) || defined(AIX) # if defined(_AIX43) # define SOAP_SOCKLEN_T socklen_t # else @@ -752,9 +837,9 @@ extern "C" { # 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) +#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) || defined(__QNX__) || defined(QNX) || defined(OS390) || defined(__ANDROID__) # define SOAP_SOCKLEN_T socklen_t -#elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) +#elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) || defined(HP_UX) # define SOAP_SOCKLEN_T int #else # define SOAP_SOCKLEN_T size_t @@ -784,12 +869,35 @@ extern "C" { # define FD_SETSIZE (1024) #endif +#ifdef WITH_LEAN +# define SOAP_CHK_EOF SOAP_EOF +#else +# define SOAP_CHK_EOF (soap->error ? soap->error : SOAP_EOF) +#endif + +#ifdef __cplusplus +# ifndef __STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS +# endif +#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) +# if defined(HAVE_INTTYPES_H) +# ifdef HAVE_STDINT_H +# include +# endif +# include +# define LONG64 int64_t +# define ULONG64 uint64_t +# elif defined(HAVE_SYS_INTTYPES_H) +# include +# define LONG64 int64_t +# define ULONG64 uint64_t +# elif defined(HAVE_STDINT_H) # include # define LONG64 int64_t # define ULONG64 uint64_t @@ -821,6 +929,18 @@ extern "C" { # define ULONG64 unsigned LONG64 #endif +#ifdef PRId64 +# ifndef SOAP_LONG_FORMAT +# define SOAP_LONG_FORMAT "%" PRId64 +# endif +#endif + +#ifdef PRIu64 +# ifndef SOAP_ULONG_FORMAT +# define SOAP_ULONG_FORMAT "%" PRIu64 +# endif +#endif + #ifndef SOAP_LONG_FORMAT # define SOAP_LONG_FORMAT "%lld" /* printf format for 64 bit ints */ #endif @@ -835,8 +955,7 @@ extern "C" { # 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) */ +#elif defined(_AIX) || defined(AIX) # if defined(_AIX43) # define soap_int32 int32_t # else @@ -904,7 +1023,7 @@ extern "C" { #endif #ifndef SOAP_PTRHASH # ifndef WITH_LEAN -# define SOAP_PTRHASH (1024) /* size of pointer analysis hash table (must be power of 2) */ +# define SOAP_PTRHASH (4096) /* size of pointer analysis hash table (must be power of 2) */ # else # define SOAP_PTRHASH (32) # endif @@ -918,7 +1037,7 @@ extern "C" { #endif #ifndef SOAP_BLKLEN # ifndef WITH_LEAN -# define SOAP_BLKLEN (256) /* size of blocks to collect long strings and XML attributes */ +# define SOAP_BLKLEN (256) /* to collect long strings and XML attributes */ # else # define SOAP_BLKLEN (32) # endif @@ -952,6 +1071,12 @@ extern "C" { # define SOAP_INDEX_TEST (2) #endif +/* Max number of EINTR while poll/select on a socket */ +/* Each EINTR can lengthen the I/O blocking time by at most one second */ +#ifndef SOAP_MAXEINTR +# define SOAP_MAXEINTR (10) +#endif + /* Max iterations in soap_serve() to keep server connection alive */ #ifndef SOAP_MAXKEEPALIVE # define SOAP_MAXKEEPALIVE (100) @@ -964,6 +1089,14 @@ extern "C" { # define SOAP_MAXARRAYSIZE (1000000) #endif +/* Trusted max size of inbound DIME data. + Increase if necessary to allow larger attachments, or decrease when server + resources are limited. +*/ +#ifndef SOAP_MAXDIMESIZE +# define SOAP_MAXDIMESIZE (8388608) /* 8 MB */ +#endif + #ifdef VXWORKS # ifdef WMW_RPM_IO # include "httpLib.h" @@ -987,7 +1120,11 @@ extern "C" { # ifndef HAVE_ISNAN # define HAVE_ISNAN # endif -# define soap_isnan(num) _isnan(num) +# define soap_isnan(n) _isnan(n) +# ifndef HAVE_ISINF +# define HAVE_ISINF +# endif +# define soap_isinf(n) (!_finite(n)) #endif #ifdef SUN_OS @@ -998,16 +1135,24 @@ extern "C" { # ifdef __cplusplus # ifndef isnan extern "C" int isnan(double); +extern "C" int isinf(double); # endif # endif -# define HAVE_ISNAN +# ifndef HAVE_ISNAN +# define HAVE_ISNAN +# endif +# ifndef HAVE_ISINF +# define HAVE_ISINF +# endif #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; +union soap_double_nan {struct {unsigned int n1, n2;} iv; double dv; float fv;}; +extern const union soap_double_nan soap_double_nan; +extern const char soap_base64o[], soap_base64i[]; #ifdef VXWORKS # ifndef FLT_MAX @@ -1019,7 +1164,7 @@ extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan; #endif #ifndef FLT_NAN -# define FLT_NAN (*(float*)(void*)&soap_double_nan) +# define FLT_NAN (soap_double_nan.fv) #endif #ifndef FLT_PINFTY @@ -1041,7 +1186,7 @@ extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan; #endif #ifndef DBL_NAN -# define DBL_NAN (*(double*)(void*)&soap_double_nan) +# define DBL_NAN (soap_double_nan.dv) #endif #ifndef DBL_PINFTY @@ -1066,16 +1211,34 @@ extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan; # ifdef HAVE_ISNAN # define soap_isnan(n) isnan(n) # else -# define soap_isnan(n) (0) +# define soap_isnan(n) ((n) != (n)) # 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) +#ifndef soap_isinf +# ifdef HAVE_ISINF +# define soap_isinf(n) isinf(n) +# else +# define soap_isinf(n) (!soap_isnan(n) && soap_isnan((n) - (n))) +# endif +#endif -/* gSOAP error codes */ +#define soap_ispinfd(n) ((n) > 0 && soap_isinf(n)) +#define soap_ispinff(n) ((n) > 0 && soap_isinf(n)) +#define soap_isninfd(n) ((n) < 0 && soap_isinf(n)) +#define soap_isninff(n) ((n) < 0 && soap_isinf(n)) + +#ifdef HAVE_SNPRINTF +# ifdef WIN32 +# define soap_snprintf(buf, len, ...) (_snprintf((buf), (len), __VA_ARGS__), (buf)[(len)-1] = '\0') +# else +# define soap_snprintf snprintf +# endif +#endif + +/* gSOAP status/error codes */ + +typedef soap_int32 soap_status; #define SOAP_EOF EOF #define SOAP_ERR EOF @@ -1126,6 +1289,8 @@ extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan; #define SOAP_OCCURS 44 #define SOAP_LENGTH 45 #define SOAP_FD_EXCEEDED 46 +#define SOAP_UTF_ERROR 47 +#define SOAP_NTLM_ERROR 48 #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) @@ -1141,7 +1306,7 @@ extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan; /* Exceptional gSOAP HTTP server response status codes >= 1000 */ #define SOAP_STOP 1000 /* No HTTP response */ -#define SOAP_FORM 1001 /* Form request/response */ +#define SOAP_FORM 1001 /* Request (form) data is present, no HTTP response */ #define SOAP_HTML 1002 /* Custom HTML response */ #define SOAP_FILE 1003 /* Custom file-based response */ @@ -1150,6 +1315,9 @@ extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan; #define SOAP_POST 2000 /* POST request */ #define SOAP_POST_FILE 2001 /* Custom file-based POST request */ #define SOAP_GET 2002 /* GET request */ +#define SOAP_PUT 2003 /* PUT request */ +#define SOAP_DEL 2004 /* DELETE request */ +#define SOAP_CONNECT 2005 /* CONNECT request */ /* gSOAP DIME */ @@ -1190,29 +1358,30 @@ typedef soap_int32 soap_mode; #define SOAP_ENC_ZLIB 0x00000400 #define SOAP_ENC_SSL 0x00000800 -#define SOAP_XML_STRICT 0x00001000 /* in: strict validation */ +#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_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_XML_TREE 0x00020000 /* in/out: XML tree (no id/ref) */ +#define SOAP_XML_NIL 0x00040000 /* out: NULLs as xsi:nil */ +#define SOAP_XML_NOTYPE 0x00080000 /* out: do not add xsi:type */ -#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_DOM_TREE 0x00100000 /* see DOM manual */ +#define SOAP_DOM_NODE 0x00200000 +#define SOAP_DOM_ASIS 0x00400000 -#define SOAP_XML_DOM 0x01000000 +#define SOAP_C_NOIOB 0x01000000 /* don't fault on array index out of bounds (just ignore) */ +#define SOAP_C_UTFSTRING 0x02000000 /* (de)serialize strings with UTF8 content */ +#define SOAP_C_MBSTRING 0x04000000 /* (de)serialize strings with multi-byte content */ +#define SOAP_C_NILSTRING 0x08000000 /* serialize empty strings as nil (omitted) */ -#define SOAP_DOM_TREE 0x02000000 -#define SOAP_DOM_NODE 0x04000000 -#define SOAP_DOM_ASIS 0x08000000 +#define SOAP_XML_DOM 0x10000000 /* enable internal DOM */ +#define SOAP_XML_GRAPH 0x20000000 /* force id-ref XML graph */ -#define SOAP_MIME_POSTCHECK 0x10000000 /* MIME flag (internal) */ +#define SOAP_MIME_POSTCHECK 0x40000000 /* MIME flag (internal) */ -#define SOAP_XML_SEC 0x80000000 /* reserved for WS security */ +#define SOAP_SEC_WSUID 0x80000000 /* Add Body wsu:Id */ /* WITH_XMLNS backward compatibility: always use XML default namespaces */ #ifdef WITH_XMLNS @@ -1245,7 +1414,7 @@ typedef soap_int32 soap_mode; #define soap_check_state(soap) (!(soap) || ((soap)->state != SOAP_INIT && (soap)->state != SOAP_COPY)) -/* part */ +/* parts */ #define SOAP_BEGIN 0 #define SOAP_IN_ENVELOPE 2 @@ -1256,13 +1425,21 @@ typedef soap_int32 soap_mode; #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 + +/* events */ + +#define SOAP_SEC_BEGIN 1 +#define SOAP_SEC_SIGN 2 +#define SOAP_SEC_DECRYPT 3 /* DEBUG macros */ #ifndef WITH_LEAN +# ifdef DEBUG_STAMP +# ifndef DEBUG +# define DEBUG +# endif +# endif # ifdef DEBUG # ifndef SOAP_DEBUG # define SOAP_DEBUG @@ -1290,16 +1467,40 @@ typedef soap_int32 soap_mode; # 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 */ +#if defined(__GNUC__) && (__GNUC__ <= 2) +# define SOAP_NOTHROW +#elif !defined(WITH_LEAN) && !defined(WITH_COMPAT) && !defined(SOAP_NOTHROW) +# define SOAP_NOTHROW (std::nothrow) +#else +# define SOAP_NOTHROW +#endif + +#if (defined(__GNUC__) && (__GNUC__ <= 2) && !defined(__BORLANDC__)) || defined(__clang__) || defined(_AIX) || defined(AIX) +/* old form w/o parenthesis */ +# ifndef SOAP_NEW +# define SOAP_NEW(type) new SOAP_NOTHROW type +# endif +# ifndef SOAP_NEW_ARRAY +# define SOAP_NEW_ARRAY(type, n) new SOAP_NOTHROW type[n] +# endif +# ifndef SOAP_PLACEMENT_NEW +# define SOAP_PLACEMENT_NEW(buf, type) new (buf) type +# endif +#else +/* new form with parenthesis */ +# ifndef SOAP_NEW +# define SOAP_NEW(type) new SOAP_NOTHROW (type) +# endif +# ifndef SOAP_NEW_ARRAY +# define SOAP_NEW_ARRAY(type, n) new SOAP_NOTHROW type[n] +# endif +# ifndef SOAP_PLACEMENT_NEW +# define SOAP_PLACEMENT_NEW(buf, type) new (buf) (type) # endif #endif #ifndef SOAP_NEW_COPY /* use C++ new operator for ::copy() */ -# define SOAP_NEW_COPY(clas) new clas +# define SOAP_NEW_COPY(clas) new SOAP_NOTHROW clas #endif #ifndef SOAP_DELETE /* use C++ delete operator */ @@ -1315,7 +1516,42 @@ typedef soap_int32 soap_mode; # define SOAP_MESSAGE fprintf # endif # ifndef DBGLOG -# define DBGLOG(DBGFILE, CMD) \ +# ifdef DEBUG_STAMP +# ifdef WIN32 +# 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];\ + SYSTEMTIME _localTime;\ + ::GetLocalTime(&_localTime); \ + fprintf(fdebug, "%02d%02d%02d %02d:%02d:%02d.%03d|", _localTime.wYear%100, _localTime.wMonth, _localTime.wDay, _localTime.wHour, _localTime.wMinute, _localTime.wSecond, _localTime.wMilliseconds);\ + CMD;\ + fflush(fdebug);\ + }\ + }\ +} +# else +# 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];\ + struct timeval _tv;\ + struct tm _tm;\ + gettimeofday(&_tv, NULL);\ + localtime_r(&_tv.tv_sec, &_tm);\ + fprintf(fdebug, "%02d%02d%02d %02d:%02d:%02d.%06d|", _tm.tm_year%100, _tm.tm_mon+1, _tm.tm_mday, _tm.tm_hour, _tm.tm_min, _tm.tm_sec, _tv.tv_usec);\ + CMD;\ + fflush(fdebug);\ + }\ + }\ +} +# endif +# else +# define DBGLOG(DBGFILE, CMD) \ { if (soap)\ { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\ soap_open_logfile((struct soap*)soap, SOAP_INDEX_##DBGFILE);\ @@ -1326,6 +1562,7 @@ typedef soap_int32 soap_mode; }\ }\ } +# endif # endif # ifndef DBGMSG # define DBGMSG(DBGFILE, MSG, LEN) \ @@ -1341,9 +1578,9 @@ typedef soap_int32 soap_mode; # 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))) +# 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) \ @@ -1409,7 +1646,7 @@ struct soap_plist const struct soap_array *array; int type; int id; - char mark1; + char mark1; /* 0=single-ref, 1=embedded-multi-ref (SOAP1.1), 2=multi-ref, 3=attachment */ char mark2; }; @@ -1445,7 +1682,7 @@ struct soap_attribute short flag; /* soap_set_attr: 1 = normal, 2 = utf content */ char *value; size_t size; - char *ns; + const char *ns; short visible; char name[1]; /* the actual name string flows into the allocated region below this struct */ }; @@ -1695,7 +1932,7 @@ extern "C" { 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) */ + short version; /* 1 = SOAP1.1 and 2 = SOAP1.2 (set automatically from namespace URI in nsmap table), 0 indicates non-SOAP content */ soap_mode mode; soap_mode imode; soap_mode omode; @@ -1704,7 +1941,7 @@ struct SOAP_STD_API soap const char *dime_id_format; /* user-definable format string for integer DIME id ( 0, gives socket recv timeout in seconds, < 0 in usec */ @@ -1722,20 +1959,29 @@ struct SOAP_STD_API soap struct soap_blist *blist; /* block allocation stack */ struct soap_clist *clist; /* class instance allocation list */ void *alist; /* memory allocation (malloc) list */ +#if !defined(WITH_LEAN) || !defined(WITH_NOIDREF) struct soap_ilist *iht[SOAP_IDHASH]; struct soap_plist *pht[SOAP_PTRHASH]; struct soap_pblk *pblk; /* plist block allocation */ short pidx; /* plist block allocation */ +#endif struct SOAP_ENV__Header *header; struct SOAP_ENV__Fault *fault; int idnum; - void *user; /* to pass user-defined data */ + void *user; /* for user to pass user-defined data */ + void *data[4]; /* extension data = {smdevp, mecevp, ...} */ struct soap_plugin *plugins; /* linked list of plug-in data */ const char *userid; /* HTTP Basic authorization userid */ const char *passwd; /* HTTP Basic authorization passwd */ + const char *authrealm; /* HTTP authentication realm (NTLM domain) */ +#if !defined(WITH_LEAN) || defined(WITH_NTLM) + const char *ntlm_challenge; /* HTTP NTLM challenge key string */ + short ntlm_auth; /* HTTP NTLM authentication type */ + short ntlm_stage; /* HTTP NTLM stage 0..3 */ +#endif int (*fpost)(struct soap*, const char*, const char*, int, const char*, const char*, size_t); int (*fget)(struct soap*); /* HTTP GET hook (not set by default) */ - int (*fput)(struct soap*); /* HTTP PUT hook (handled as POST) */ + int (*fput)(struct soap*); /* HTTP PUT hook (handled as POST by default) */ int (*fdel)(struct soap*); /* HTTP DELETE hook (not set by default) */ int (*fopt)(struct soap*); /* HTTP OPTIONS hook (not set by default) */ int (*fhead)(struct soap*); /* HTTP HEAD hook (not set by default) */ @@ -1762,12 +2008,19 @@ struct SOAP_STD_API soap void *(*fplugin)(struct soap*, const char*); void *(*fmalloc)(struct soap*, size_t); #ifndef WITH_LEANER + int (*feltbegin)(struct soap*, const char*); + int (*feltendin)(struct soap*, const char*, const char*); + int (*feltbegout)(struct soap*, const char*); + int (*feltendout)(struct soap*, const char*); 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*); + int filterstop; + int (*ffiltersend)(struct soap*, const char**, size_t*); + int (*ffilterrecv)(struct soap*, char*, size_t*, size_t); 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*); @@ -1781,27 +2034,29 @@ struct SOAP_STD_API soap 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; + SOAP_SOCKET master; /* socket bound to TCP/IP port */ + SOAP_SOCKET socket; /* socket to send and receive */ + SOAP_SOCKET sendsk; /* socket to send (overrides ::socket) */ + SOAP_SOCKET recvsk; /* socket to receive (overrides ::socket) */ #if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT) - std::ostream *os; - std::istream *is; + std::ostream *os; /* stream to send */ + std::istream *is; /* stream to receive */ #else void *os; /* preserve struct size */ void *is; /* preserve struct size */ #endif #ifndef UNDER_CE - int sendfd; - int recvfd; + int sendfd; /* WinCE FD to send */ + int recvfd; /* WinCE FD to receive */ #else - FILE *sendfd; - FILE *recvfd; + FILE *sendfd; /* FD to send */ + FILE *recvfd; /* FD to receive */ #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 */ + short body; /* HTTP or XML element has a body (1) or not (0) */ unsigned int level; /* XML nesting level */ size_t count; /* message length counter */ size_t length; /* message length as set by HTTP header */ @@ -1819,15 +2074,17 @@ struct SOAP_STD_API soap char arraySize[SOAP_TAGLEN]; char arrayOffset[SOAP_TAGLEN]; short other; - short position; - int positions[SOAP_MAXDIMS]; short root; + int position; + int positions[SOAP_MAXDIMS]; 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 part; /* SOAP part state (header or body) */ + short event; /* engine events and states for use by plugins */ + unsigned int evlev; /* event level */ short alloced; short peeked; size_t chunksize; @@ -1836,7 +2093,6 @@ struct SOAP_STD_API soap 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 */ @@ -1876,9 +2132,9 @@ struct SOAP_STD_API soap 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 */ + unsigned int ipv6_multicast_if; /* in_addr_t in6addr->sin6_scope_id IPv6 value */ + char* ipv4_multicast_if; /* IP_MULTICAST_IF IPv4 setsockopt interface_addr */ + unsigned char ipv4_multicast_ttl; /* IP_MULTICAST_TTL value 0..255 */ #ifdef WITH_IPV6 struct sockaddr_storage peer; /* IPv6: set by soap_accept and by UDP recv */ #else @@ -1916,6 +2172,7 @@ struct SOAP_STD_API soap #endif unsigned short ssl_flags; const char *keyfile; + const char *keyid; const char *password; const char *cafile; const char *capath; @@ -1923,7 +2180,11 @@ struct SOAP_STD_API soap char session_host[SOAP_TAGLEN]; int session_port; #ifdef WITH_C_LOCALE +# ifdef WIN32 + _locale_t c_locale; /* set to C locale by default */ +# else locale_t c_locale; /* set to C locale by default */ +# endif #else void *c_locale; #endif @@ -1994,9 +2255,7 @@ struct soap_plugin 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]) @@ -2006,13 +2265,29 @@ soap_wchar soap_get0(struct soap*); soap_wchar soap_get1(struct soap*); #endif +#define SOAP_XSTRINGIFY(s) SOAP_STRINGIFY(s) +#define SOAP_STRINGIFY(s) #s + +#define soap_versioning_paste(name, ext) name##_LIBRARY_VERSION_REQUIRED_##ext +#define soap_versioning_ext(name, ext) soap_versioning_paste(name, ext) +#define soap_versioning(name) soap_versioning_ext(name, GSOAP_VERSION) + +#define soap_init(soap) soap_init1(soap, SOAP_IO_DEFAULT) +#define soap_init1(soap, mode) soap_init2(soap, mode, mode) +#define soap_init2(soap, imode, omode) soap_versioning(soap_init)(soap, imode, omode) + +#define soap_new() soap_new1(SOAP_IO_DEFAULT) +#define soap_new1(mode) soap_new2(mode, mode) +#define soap_new2(imode, omode) soap_versioning(soap_new)(imode, omode) + #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_mode(soap, n) ((soap)->mode = (soap)->imode = (soap)->omode = (n)) +#define soap_imode(soap, n) ((soap)->imode = (n)) +#define soap_omode(soap, n) ((soap)->omode = (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)) @@ -2037,6 +2312,18 @@ soap_wchar soap_get1(struct soap*); SOAP_FMAC1 unsigned long SOAP_FMAC2 soap_strtoul(const char *s, char **t, int b); #endif +#if defined(WIN32) && !defined(__MINGW32__) +# define soap_strtoll _strtoi64 +#else +# define soap_strtoll strtoll +#endif + +#if defined(WIN32) && !defined(__MINGW32__) +# define soap_strtoull _strtoui64 +#else +# define soap_strtoull strtoull +#endif + #if defined(WITH_OPENSSL) # define soap_random soap_rand() SOAP_FMAC1 int SOAP_FMAC2 soap_rand(void); @@ -2059,23 +2346,30 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_rand(void); # 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_traverse() traversal/walker routines take walker function arguments */ +typedef void soap_walker(struct soap*, void*, int, const char*, const char*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve(struct soap *soap); +SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request(struct soap *soap); + +SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap*); +SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap*); +SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultcode(struct soap*); +SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultsubcode(struct soap*); +SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultstring(struct soap*); +SOAP_FMAC3 const char** SOAP_FMAC4 soap_faultdetail(struct soap*); +SOAP_FMAC3 const char* SOAP_FMAC4 soap_check_faultsubcode(struct soap*); +SOAP_FMAC3 const char* SOAP_FMAC4 soap_check_faultdetail(struct soap*); +SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(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_putheader(struct soap*); SOAP_FMAC1 int SOAP_FMAC2 soap_getfault(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_putfault(struct soap*); SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_init(void); SOAP_FMAC1 int SOAP_FMAC2 soap_poll(struct soap*); @@ -2086,8 +2380,16 @@ 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*); +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) +SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_server_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *keyid, const char *password, const char *cafile, const char *capath, const char *dhfile, const char *randfile, const char *sid); +#else +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); +#endif +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) +SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_client_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *keyid, const char *password, const char *cafile, const char *capath, const char *randfile); +#else +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); +#endif SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap*, int status, size_t count); @@ -2152,6 +2454,7 @@ 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 int SOAP_FMAC2 soap_end_send_flush(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); @@ -2160,13 +2463,14 @@ SOAP_FMAC1 long SOAP_FMAC2 soap_code_bits(const struct soap_code_map*, const cha 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_serve(struct soap*); 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 int 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*); @@ -2194,18 +2498,16 @@ 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 int SOAP_FMAC2 soap_force_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 struct soap *SOAP_FMAC2 soap_versioning(soap_new)(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_versioning(soap_init)(struct soap*, soap_mode, soap_mode); +SOAP_FMAC1 void SOAP_FMAC2 soap_initialize(struct soap*); 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*); @@ -2264,6 +2566,7 @@ SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstring_in(struct soap*, int, long, long); SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace(struct soap*, const char *, const char*, size_t n1, size_t n2); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_version(struct soap*, short); SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces(struct soap*, const struct Namespace*); SOAP_FMAC1 void SOAP_FMAC2 soap_set_local_namespaces(struct soap*); @@ -2285,11 +2588,12 @@ 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 void SOAP_FMAC2 soap_update_pointers(struct soap *soap, char *start, char *end, char *p1, char *p2); 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_end_out(struct soap*); -SOAP_FMAC1 char * SOAP_FMAC2 soap_get_http_body(struct soap*); +SOAP_FMAC1 char * SOAP_FMAC2 soap_get_http_body(struct soap*, size_t *len); SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in(struct soap*); SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap*); @@ -2314,8 +2618,10 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault(struct soap*, int check); 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 +# ifndef WITH_COMPAT +# ifdef __cplusplus SOAP_FMAC1 void SOAP_FMAC2 soap_stream_fault(struct soap*, std::ostream&); +# endif # endif SOAP_FMAC1 char* SOAP_FMAC2 soap_sprint_fault(struct soap*, char*, size_t); # endif @@ -2416,7 +2722,7 @@ SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral(struct soap*, const char *tag, wchar_ #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 int SOAP_FMAC2 soap_move(struct soap*, size_t); 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*); @@ -2446,9 +2752,11 @@ SOAP_FMAC1 const char* SOAP_FMAC2 soap_attr_value(struct soap *soap, const char 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); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_url(struct soap *soap, const char*, const char*); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_encode_url(const char*, char*, size_t); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_encode_url_string(struct soap*, const char*); #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*); diff --git a/ext/CrashServer/CrashHandler/SendRpt/Config.h b/ext/CrashServer/CrashHandler/SendRpt/Config.h index 69009554d..d9a63a013 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/Config.h +++ b/ext/CrashServer/CrashHandler/SendRpt/Config.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -18,10 +18,13 @@ #pragma once #include +#include +#include +#include struct Config { - CStringA Prefix; + CStringW Prefix; CStringW AppName; CStringW Company; CStringW PrivacyPolicyUrl; @@ -33,9 +36,28 @@ struct Config BOOL OpenProblemInBrowser; BOOL UseWER; DWORD SubmitterID; + BOOL SendAdditionalDataWithoutApproval; + DWORD FullDumpType; + CStringW LangFilePath; + CStringW SendRptPath; + CStringW DbgHelpPath; CStringW ProcessName; std::vector > FilesToAttach; - std::vector > UserInfo; + std::map UserInfo; + CStringW CustomInfo; + + Config() + { + V[0] = V[1] = V[2] = V[3] = 0; + Hotfix = 0; + ServiceMode = FALSE; + LeaveDumpFilesInTempFolder = FALSE; + OpenProblemInBrowser = TRUE; + UseWER = FALSE; + SubmitterID = 0; + SendAdditionalDataWithoutApproval = FALSE; + FullDumpType = 0; + } }; struct Params @@ -45,4 +67,5 @@ struct Params MINIDUMP_EXCEPTION_INFORMATION ExceptInfo; BOOL WasAssert; HANDLE ReportReady; + CStringA Group; }; diff --git a/ext/CrashServer/CrashHandler/SendRpt/CrashProcessor.cpp b/ext/CrashServer/CrashHandler/SendRpt/CrashProcessor.cpp dissimilarity index 79% index 30833d281..5495ba3f8 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/CrashProcessor.cpp +++ b/ext/CrashServer/CrashHandler/SendRpt/CrashProcessor.cpp @@ -1,1008 +1,726 @@ -// Copyright 2012 Idol Software, Inc. -// -// This file is part of CrashHandler library. -// -// CrashHandler library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see . - -#include "stdafx.h" -#include "Serializer.h" -#include "DumpWriter.h" -#include "..\..\CommonLibs\Zlib\ZipUnzip.h" -#include "..\..\CommonLibs\Log\log.h" -#include "..\..\CommonLibs\Log\log_media.h" -#include "SendReportDlg.h" -#include "..\DumpUploaderServiceLib\DumpUploaderWebService.h" -#include "..\CrashHandler\CrashHandler.h" -#include "CrashInfo.h" - -Config g_Config; -#if _MSC_VER >= 1600 -Log g_Log(NULL, _T("sendrpt")); -#else -Log g_Log(LogMediaPtr(), _T("sendrpt")); -#endif - -using namespace std; - -BOOL IsWow64() -{ - typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); - LPFN_ISWOW64PROCESS fnIsWow64Process = NULL; - - BOOL bIsWow64 = FALSE; - - HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32")); - if (NULL != hKernel32) - fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(hKernel32,"IsWow64Process"); - - if (NULL != fnIsWow64Process) - fnIsWow64Process(GetCurrentProcess(), &bIsWow64); - - return bIsWow64; -} - -CStringA GetUTF8(const CStringW& string) -{ - int size = string.GetLength()+1; - char * buffer = new char[4 * size]; - - int len = WideCharToMultiByte(CP_UTF8, 0, (const wchar_t*)string, size, buffer, 4*size, 0, NULL); - - CStringA ret; - if (len != 0) - ret = CStringA(buffer, len-1); - delete [] buffer; - - return ret; -} - -struct ModuleInfo -{ - CStringW name; - USHORT V[4]; -}; - -class DumpFilter -{ -public: - DumpFilter(vector& _Modules, DWORD _SaveOnlyThisThreadID = 0) - : Modules(_Modules), SaveOnlyThisThreadID(_SaveOnlyThisThreadID) - { - Callback.CallbackRoutine = _MinidumpCallback; - Callback.CallbackParam = this; - } - - operator MINIDUMP_CALLBACK_INFORMATION*() { return &Callback; } - -private: - MINIDUMP_CALLBACK_INFORMATION Callback; - DWORD SaveOnlyThisThreadID; - vector& Modules; - - BOOL MinidumpCallback( - const PMINIDUMP_CALLBACK_INPUT CallbackInput, - PMINIDUMP_CALLBACK_OUTPUT CallbackOutput) - { - switch (CallbackInput->CallbackType) - { - case IncludeThreadCallback: - if (SaveOnlyThisThreadID != 0 && CallbackInput->IncludeThread.ThreadId != SaveOnlyThisThreadID) - return FALSE; - break; - case ThreadCallback: - if (SaveOnlyThisThreadID != 0 && CallbackInput->Thread.ThreadId != SaveOnlyThisThreadID) - CallbackOutput->ThreadWriteFlags = 0; - break; - case ModuleCallback: - { - ModuleInfo mi; - WCHAR drive[MAX_PATH], dir[MAX_PATH], fname[MAX_PATH], ext[MAX_PATH]; - _wsplitpath_s(CallbackInput->Module.FullPath, drive, dir, fname, ext); - mi.name = CStringW(fname) + ext; - mi.name.MakeLower(); - mi.V[0] = HIWORD(CallbackInput->Module.VersionInfo.dwProductVersionMS); - mi.V[1] = LOWORD(CallbackInput->Module.VersionInfo.dwProductVersionMS); - mi.V[2] = HIWORD(CallbackInput->Module.VersionInfo.dwProductVersionLS); - mi.V[3] = LOWORD(CallbackInput->Module.VersionInfo.dwProductVersionLS); - Modules.push_back(mi); - } - break; - } - - return TRUE; - } - - static BOOL CALLBACK _MinidumpCallback( - PVOID CallbackParam, - const PMINIDUMP_CALLBACK_INPUT CallbackInput, - PMINIDUMP_CALLBACK_OUTPUT CallbackOutput) - { - return static_cast(CallbackParam)->MinidumpCallback(CallbackInput, CallbackOutput); - } -}; - -struct Solution -{ - bool askConfirmation; - ns1__SolutionType type; - wstring url; - vector exe; -}; - -struct Response -{ - ns1__ResponseType type; - wstring error; - auto_ptr solution; - std::wstring clientID; - int problemID; - int dumpGroupID; - int dumpID; - std::wstring urlToProblem; - ns1__AdditionalInfoType infoType; - vector infoModule; - std::wstring infoModuleCfg; - - void Fill(const ns1__Response& response) - { - type = response.type; - g_Log.Debug(_T("There is response type = %d:"), type); - if (response.error) - { - error = *response.error; - g_Log.Debug(_T("\terror\t\"%ls\""), error.c_str()); - } - if (response.solution) - { - g_Log.Debug(_T("\thas solution")); - solution.reset(new Solution); - solution->askConfirmation = response.solution->askConfirmation; - solution->type = response.solution->type; - g_Log.Debug(_T("\t\ttype\t%d"), solution->type); - if (response.solution->url) - { - solution->url = *response.solution->url; - g_Log.Debug(_T("\t\tURL\t%ls"), solution->url.c_str()); - } - if (response.solution->exe) - { - solution->exe.assign(response.solution->exe->__ptr, response.solution->exe->__ptr + response.solution->exe->__size); - g_Log.Debug(_T("\t\thas EXE, size\t%d"), solution->exe.size()); - } - } - if (response.clientID) - { - clientID = *response.clientID; - g_Log.Debug(_T("\tCliendID = \"%ls\""), clientID.c_str()); - } - problemID = response.problemID; - dumpGroupID = response.dumpGroupID; - dumpID = response.dumpID; - g_Log.Debug(_T("\tproblemID = %d, dumpGroupID = %d, dumpID = %d"), problemID, dumpGroupID, dumpID); - if (response.urlToProblem) - { - urlToProblem = *response.urlToProblem; - g_Log.Debug(_T("\tURL to problem = \"%ls\""), urlToProblem.c_str()); - } - else - { - urlToProblem.clear(); - } - infoType = response.infoType; - if (response.infoModule && response.infoModule->__size > 0) - infoModule.assign(response.infoModule->__ptr, response.infoModule->__ptr + response.infoModule->__size); - else - infoModule.clear(); - if (response.infoModuleCfg) - infoModuleCfg = *response.infoModuleCfg; - else - infoModuleCfg.clear(); - } -}; - -class CrashProcessor -{ - auto_ptr m_CrashInfo; - CString m_TempFolder; - CString m_MiniDumpFile; - CString m_MiniDumpZipFile; - CString m_FullDumpFile; - CString m_FullDumpZipFile; - CString m_InfoDll; - CString m_InfoFile; - CString m_Patch; - DumpWriter m_DumpWriter; - DumpUploaderWebService m_WebService; - CWindow* volatile m_pProgressDlg; - bool m_bStop; - -public: - CrashProcessor() - : m_bStop(false) - , m_pProgressDlg(NULL) - , m_WebService(5*60 /* Parsing a dump may require a lot of time (for example if symbols are uploaded from microsoft) */) - { - } - - ~CrashProcessor() - { - if (!m_FullDumpFile.IsEmpty()) - DeleteFile(m_FullDumpFile); - if (!m_MiniDumpFile.IsEmpty()) - DeleteFile(m_MiniDumpFile); - if (!g_Config.LeaveDumpFilesInTempFolder) - { - if (!m_FullDumpZipFile.IsEmpty()) - DeleteFile(m_FullDumpZipFile); - if (!m_MiniDumpZipFile.IsEmpty()) - DeleteFile(m_MiniDumpZipFile); - if (!m_TempFolder.IsEmpty()) - RemoveDirectory(m_TempFolder); - } - } - - void InitPathes() - { - GetTempPath(MAX_PATH, m_TempFolder.GetBuffer(MAX_PATH)); - m_TempFolder.ReleaseBuffer(); - - SYSTEMTIME st; - GetLocalTime(&st); - - CString t; - t.Format(_T("%s_%d.%d.%d.%d_%04d%02d%02d_%02d%02d%02d"), - (LPCTSTR)CA2CT(g_Config.Prefix), - g_Config.V[0], g_Config.V[1], g_Config.V[2], g_Config.V[3], - (int)st.wYear, (int)st.wMonth, (int)st.wDay, (int)st.wHour, (int)st.wMinute, (int)st.wSecond); - - m_TempFolder += t; - m_MiniDumpFile = m_TempFolder + _T("\\") + t + _T(".mini.dmp"); - m_MiniDumpZipFile = m_TempFolder + _T("\\mini.zip"); - m_FullDumpFile = m_TempFolder + _T("\\") + t + _T(".full.dmp"); - m_FullDumpZipFile = m_TempFolder + _T("\\full.zip"); - m_InfoDll = m_TempFolder + _T("\\info.dll"); - m_InfoFile = m_TempFolder + _T("\\info.zip"); - m_Patch = m_TempFolder + _T("\\solution.exe"); - - if (!CreateDirectory(m_TempFolder, NULL)) - throw std::runtime_error("failed to create temp directory"); - } - - static void FillClientLib(ns1__ClientLib* client) - { - client->v1 = 0; - client->v2 = 0; - client->v3 = 0; - client->v4 = 0; - client->arch = -#ifdef _M_AMD64 - ns1__Architecture__x64 -#else - ns1__Architecture__x32 -#endif - ; - - TCHAR path[MAX_PATH]; - if (!GetModuleFileName(NULL, path, _countof(path))) - return; - - vector verInfo(GetFileVersionInfoSize(path, NULL)); - VS_FIXEDFILEINFO* lpFileinfo = NULL; - UINT uLen; - if (!GetFileVersionInfo(path, 0, static_cast(verInfo.size()), &verInfo[0]) - || !VerQueryValue(&verInfo[0], _T("\\"), (LPVOID*)&lpFileinfo, &uLen)) - return; - client->v1 = HIWORD(lpFileinfo->dwProductVersionMS); - client->v2 = LOWORD(lpFileinfo->dwProductVersionMS); - client->v3 = HIWORD(lpFileinfo->dwProductVersionLS); - client->v4 = LOWORD(lpFileinfo->dwProductVersionLS); - g_Log.Info(_T("Client lib %d.%d.%d.%d"), client->v1, client->v2, client->v3, client->v4); - } - - static void FillApp(ns1__Application* app) - { - app->applicationGUID = g_Config.ApplicationGUID; - app->v1 = g_Config.V[0]; - app->v2 = g_Config.V[1]; - app->v3 = g_Config.V[2]; - app->v4 = g_Config.V[3]; - app->hotfix = g_Config.Hotfix; - g_Log.Info(_T("App %d.%d.%d.%d %ls"), app->v1, app->v2, app->v3, app->v4, app->applicationGUID.c_str()); - } - - static int GetUserGuid() - { - int nUserGuid = 12345; - HKEY hCryptography; -#if defined (_WIN64) - DWORD param = 0; -#else - DWORD param = IsWow64() ? KEY_WOW64_64KEY : 0; -#endif - if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Cryptography"), 0, KEY_READ|param, &hCryptography)) - { - TCHAR guid[1024]; - DWORD size = sizeof(guid); - if (ERROR_SUCCESS == RegQueryValueEx(hCryptography, _T("MachineGuid"), NULL, NULL, (LPBYTE)guid, &size)) - { - DWORD D1 = 0, D2 = 0, D3 = 0, D4 = 0, D5 = 0, D6 = 0; - _stscanf_s(guid, _T("%08x-%04x-%04x-%04x-%04x%08x"), &D1, &D2, &D3, &D4, &D5, &D6); - DWORD DD1 = MAKELONG(D2, D3); - DWORD DD2 = MAKELONG(D4, D5); - nUserGuid = D1 ^ MAKELONG(D3, D2) ^ MAKELONG(D5, D4) ^ D6; - } - RegCloseKey(hCryptography); - } - g_Log.Info(_T("User ID 0x%08X"), nUserGuid); - return nUserGuid; - } - - Response Hello(const vector& modules) - { - g_Log.Info(_T("Sending Hello...")); - - Response result; - - wstring mainModule = g_Config.ProcessName; - - _ns1__Hello* pRequest = soap_new__ns1__Hello(&m_WebService, 1); - pRequest->client = soap_new_ns1__ClientLib(&m_WebService, 1); - pRequest->app = soap_new_ns1__Application(&m_WebService, 1); - pRequest->mainModule = &mainModule; - FillClientLib(pRequest->client); - FillApp(pRequest->app); - - _ns1__HelloResponse* pResponse = soap_new__ns1__HelloResponse(&m_WebService, 1); - - bool bReqOK = m_WebService.Hello(pRequest, pResponse) == SOAP_OK; - - if (bReqOK) - result.Fill(*pResponse->HelloResult); - - soap_delete__ns1__HelloResponse(&m_WebService, pResponse); - soap_delete_ns1__Application(&m_WebService, pRequest->app); - soap_delete_ns1__ClientLib(&m_WebService, pRequest->client); - soap_delete__ns1__Hello(&m_WebService, pRequest); - - if (!bReqOK) - throw runtime_error((const char*)CW2A(m_WebService.GetErrorText().c_str())); - - return result; - } - - Response UploadMiniDump(const CString& dumpFile) - { - g_Log.Info(_T("Sending UploadMiniDump...")); - - Response result; - - wstring mainModule = g_Config.ProcessName; - - vector data = ReadFile(dumpFile); - - _ns1__UploadMiniDump* pRequest = soap_new__ns1__UploadMiniDump(&m_WebService, 1); - pRequest->client = soap_new_ns1__ClientLib(&m_WebService, 1); - pRequest->app = soap_new_ns1__Application(&m_WebService, 1); - pRequest->mainModule = &mainModule; - FillClientLib(pRequest->client); - FillApp(pRequest->app); - pRequest->PCID = GetUserGuid(); - pRequest->submitterID = g_Config.SubmitterID; - pRequest->dump = soap_new__xop__Include(&m_WebService, 1); - pRequest->dump->__ptr = &data[0]; - pRequest->dump->__size = static_cast(data.size()); - pRequest->dump->id = NULL; - pRequest->dump->options = NULL; - pRequest->dump->type = "binary"; - - _ns1__UploadMiniDumpResponse* pResponse = soap_new__ns1__UploadMiniDumpResponse(&m_WebService, 1); - - bool bReqOK = m_WebService.UploadMiniDump(pRequest, pResponse) == SOAP_OK; - - if (bReqOK) - result.Fill(*pResponse->UploadMiniDumpResult); - - soap_delete__ns1__UploadMiniDumpResponse(&m_WebService, pResponse); - soap_delete__xop__Include(&m_WebService, pRequest->dump); - - soap_delete_ns1__Application(&m_WebService, pRequest->app); - soap_delete_ns1__ClientLib(&m_WebService, pRequest->client); - soap_delete__ns1__UploadMiniDump(&m_WebService, pRequest); - - if (!bReqOK) - throw runtime_error((const char*)CW2A(m_WebService.GetErrorText().c_str())); - - if (m_bStop) - throw std::runtime_error("canceled"); - - return result; - } - - Response SendAdditionalInfoUploadRejected(const int miniDumpId) - { - g_Log.Info(_T("Sending SendAdditionalInfoUploadRejected...")); - - return UploadAdditionalInfo(miniDumpId, NULL, ns1__AdditionalInfoType__None); - } - - Response UploadAdditionalInfo(const int miniDumpId, const CString& addInfoFile, const bool isFullDump) - { - g_Log.Info(_T("Sending UploadAdditionalInfo...")); - - vector data = ReadFile(addInfoFile); - - return UploadAdditionalInfo(miniDumpId, &data, isFullDump ? ns1__AdditionalInfoType__FullDump : ns1__AdditionalInfoType__Info); - } - - static vector ReadFile(const CString& path) - { - vector data; - CAtlFile file(CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)); - if (file == INVALID_HANDLE_VALUE) - throw runtime_error(std::string("failed to open file ") + (const char*)CT2A(path)); - ULONGLONG fileSize; - if (FAILED(file.GetSize(fileSize))) - throw runtime_error(std::string("failed to get file size ") + (const char*)CT2A(path)); - - if (fileSize != 0) - { - data.resize((size_t)fileSize); - if (FAILED(file.Read(&data[0], static_cast(fileSize)))) - throw runtime_error(std::string("failed to read file ") + (const char*)CT2A(path)); - } - - return data; - } - - struct ProgressNotifier - { - size_t m_sent; - size_t m_total; - CrashProcessor& m_crashProcessor; - ProgressNotifier(size_t total, CrashProcessor& crashProcessor) : m_sent(0), m_total(total), m_crashProcessor(crashProcessor) {} - - static void ProgressCallback(BOOL send, SIZE_T bytesCount, LPVOID context) - { - static_cast(context)->ProgressCallback(send, bytesCount); - } - void ProgressCallback(BOOL send, SIZE_T bytesCount) - { - if (!send) - return; - m_sent += bytesCount; - if (m_sent > m_total) - m_sent = m_total; - - if (m_crashProcessor.m_pProgressDlg) - m_crashProcessor.m_pProgressDlg->PostMessage(WM_USER, m_total, m_sent); - } - }; - - Response UploadAdditionalInfo(const int miniDumpId, vector *data, const ns1__AdditionalInfoType infoType) - { - Response result; - - wstring mainModule = g_Config.ProcessName; - - _ns1__UploadAdditionalInfo* pRequest = soap_new__ns1__UploadAdditionalInfo(&m_WebService, 1); - pRequest->client = soap_new_ns1__ClientLib(&m_WebService, 1); - pRequest->app = soap_new_ns1__Application(&m_WebService, 1); - pRequest->mainModule = &mainModule; - FillClientLib(pRequest->client); - FillApp(pRequest->app); - pRequest->miniDumpID = miniDumpId; - pRequest->info = soap_new__xop__Include(&m_WebService, 1); - if (data && !data->empty()) - { - pRequest->info->__ptr = &(*data->begin()); - pRequest->info->__size = static_cast(data->size()); - } - else - { - pRequest->info->__ptr = NULL; - pRequest->info->__size = 0; - } - pRequest->info->id = NULL; - pRequest->info->options = NULL; - pRequest->info->type = "binary"; - pRequest->infoType = infoType; - - _ns1__UploadAdditionalInfoResponse* pResponse = soap_new__ns1__UploadAdditionalInfoResponse(&m_WebService, 1); - auto_ptr pProgress; - if (data) - { - pProgress.reset(new ProgressNotifier(data->size(), *this)); - m_WebService.SetProgressCallback(ProgressNotifier::ProgressCallback, pProgress.get()); - } - bool bReqOK = m_WebService.UploadAdditionalInfo(pRequest, pResponse) == SOAP_OK; - if (data) - m_WebService.SetProgressCallback(NULL, NULL); - - if (bReqOK) - result.Fill(*pResponse->UploadAdditionalInfoResult); - - soap_delete__ns1__UploadAdditionalInfoResponse(&m_WebService, pResponse); - if (data) - soap_delete__xop__Include(&m_WebService, pRequest->info); - soap_delete_ns1__Application(&m_WebService, pRequest->app); - soap_delete_ns1__ClientLib(&m_WebService, pRequest->client); - soap_delete__ns1__UploadAdditionalInfo(&m_WebService, pRequest); - - if (!bReqOK) - throw runtime_error((const char*)CW2A(m_WebService.GetErrorText().c_str())); - - if (m_bStop) - throw std::runtime_error("canceled"); - - return result; - } - - void PrepareDump( - const CString& dumpFile, - const CString& zipFile, - HANDLE hProcess, - DWORD dwProcessId, - MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo, - MINIDUMP_TYPE type, - MINIDUMP_CALLBACK_INFORMATION* pCallback, - bool attachFiles) - { - if (m_bStop) - throw std::runtime_error("canceled"); - - g_Log.Info(_T("Writing dump (%s)..."), static_cast(dumpFile)); - if (!m_DumpWriter.WriteMiniDump(hProcess, dwProcessId, pExceptInfo, dumpFile, type, pCallback)) - throw std::runtime_error("dump was not created"); - g_Log.Info(_T("Dump ready.")); - - if (m_bStop) - throw std::runtime_error("canceled"); - - g_Log.Info(_T("Zipping dump (%s)..."), static_cast(zipFile)); - { - Zip zip(zipFile); - zip.AddFile(dumpFile, dumpFile.Mid(dumpFile.ReverseFind(_T('\\')) + 1)); - if (attachFiles) - { - CString crashInfoFile = m_TempFolder + _T("\\crashinfo.xml"); - if (m_CrashInfo->GetCrashInfoFile(crashInfoFile)) -#if _MSC_VER >= 1700 - g_Config.FilesToAttach.push_back(std::make_pair(crashInfoFile, L"crashinfo.xml")); -#else - g_Config.FilesToAttach.push_back(std::make_pair(crashInfoFile, L"crashinfo.xml")); -#endif - - CString crashUserInfoFile = m_TempFolder + _T("\\crashuserinfo.xml"); - if (g_Config.UserInfo.size()) - { - FILE* f = NULL; - if (0 == _tfopen_s(&f, crashUserInfoFile, _T("wt"))) - { - fprintf_s(f, "\n"); - for (std::vector>::iterator it = g_Config.UserInfo.begin(), end = g_Config.UserInfo.end(); it != end; ++it) - { - g_Log.Info(_T("Adding UserInfo \"%ws\" as \"%ws\"..."), static_cast(it->first), static_cast(it->second)); - fprintf_s(f, - "<%s>%s\n", - static_cast(GetUTF8(it->first)), - static_cast(GetUTF8(it->second)), - static_cast(GetUTF8(it->first))); - } - fprintf_s(f, ""); - fclose(f); -#if _MSC_VER >= 1700 - g_Config.FilesToAttach.push_back(std::make_pair(crashUserInfoFile, L"crashuserinfo.xml")); -#else - g_Config.FilesToAttach.push_back(std::make_pair(crashUserInfoFile, L"crashuserinfo.xml")); -#endif - } - } - - WIN32_FIND_DATAW ff; - FindClose(FindFirstFileW(dumpFile, &ff)); - __int64 attachedSizeLimit = max(1024*1024I64, (static_cast<__int64>(ff.nFileSizeHigh) << 32) | ff.nFileSizeLow); - - g_Log.Info(_T("Adding %d attaches..."), g_Config.FilesToAttach.size()); - for (std::vector >::iterator it = g_Config.FilesToAttach.begin(), end = g_Config.FilesToAttach.end(); it != end; ++it) - { - g_Log.Info(_T("Adding \"%ls\" as \"%ls\"..."), static_cast(it->first), static_cast(it->second)); - WIN32_FIND_DATAW ff; - HANDLE hFind = FindFirstFileW(it->first, &ff); - if (hFind == INVALID_HANDLE_VALUE) - { - g_Log.Warning(_T("File \"%ls\" not found..."), static_cast(it->first)); - continue; - } - FindClose(hFind); - __int64 size = (static_cast<__int64>(ff.nFileSizeHigh) << 32) | ff.nFileSizeLow; - if (size > attachedSizeLimit) - { - g_Log.Warning(_T("File \"%ls\" not skipped by size..."), static_cast(it->first)); - continue; - } - attachedSizeLimit -= size; - - zip.AddFile(it->first, it->second); - g_Log.Info(_T("Done.")); - } - DeleteFile(crashInfoFile); - } - } - g_Log.Info(_T("Zipping done.")); - - if (m_bStop) - throw std::runtime_error("canceled"); - } - - void PrepareMiniDump( - HANDLE hProcess, - DWORD dwProcessId, - MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo, - vector& modules) - { - g_Log.Info(_T("Prepare mini dump...")); - - DumpFilter dumpFilter(modules, pExceptInfo ? pExceptInfo->ThreadId : 0); - PrepareDump(m_MiniDumpFile, m_MiniDumpZipFile, hProcess, dwProcessId, pExceptInfo, MiniDumpFilterMemory, dumpFilter, false); - } - - void PrepareFullDump( - HANDLE hProcess, - DWORD dwProcessId, - MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo) - { - g_Log.Info(_T("Prepare full dump...")); - - PrepareDump(m_FullDumpFile, m_FullDumpZipFile, hProcess, dwProcessId, pExceptInfo, MiniDumpWithFullMemory, NULL, true); - } - - typedef bool (WINAPI *pfnCollectInfo)(LPCWSTR file, LPCWSTR cfg, HANDLE Process, DWORD ProcessId); - void PrepareAdditionalInfo(const Response& response, HANDLE Process, DWORD ProcessId) - { - g_Log.Info(_T("Prepare additional info...")); - HMODULE hInfoDll = NULL; - try - { - CAtlFile hFile(CreateFile(m_InfoDll, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); - if (hFile == INVALID_HANDLE_VALUE) - throw runtime_error("failed to create info.dll file"); - if (FAILED(hFile.Write(&response.infoModule[0], static_cast(response.infoModule.size())))) - throw runtime_error("failed to write info.dll file"); - hFile.Close(); - - hInfoDll = LoadLibrary(m_InfoDll); - if (!hInfoDll) - throw runtime_error("failed to load info.dll"); - - pfnCollectInfo CollectInfo = (pfnCollectInfo) GetProcAddress(hInfoDll, "CollectInfo"); - if (!CollectInfo) - throw runtime_error("failed to get CollectInfo from info.dll"); - - if (!CollectInfo(m_InfoFile, response.infoModuleCfg.c_str(), Process, ProcessId)) - throw runtime_error("CollectInfo failed"); - - FreeLibrary(hInfoDll); - DeleteFile(m_InfoDll); - } - catch (...) - { - if (hInfoDll) - FreeLibrary(hInfoDll); - DeleteFile(m_InfoDll); - throw; - } - } - - static CAtlStringW ToString(int n) - { - CAtlStringW result; - result.Format(L"%i", n); - return result; - } - - void ProcessSolution(const Solution& solution, const std::wstring& clientID, int problemID, int dumpGroupID, int dumpID) - { - g_Log.Info(_T("Process solution...")); - switch (solution.type) - { - case ns1__SolutionType__Url: - if (!solution.askConfirmation || IDOK == CSolutionDlg(g_Config.AppName, g_Config.Company, IDS_SOLUTION_URL).DoModal()) - { - CAtlStringW url = solution.url.c_str(); - url.Replace(L"{ClientID}", clientID.c_str()); - url.Replace(L"{ProblemID}", ToString(problemID)); - url.Replace(L"{DumpGroupID}", ToString(dumpGroupID)); - url.Replace(L"{DumpID}", ToString(dumpID)); - ShellExecute(NULL, _T("open"), CW2CT(url), NULL, NULL, SW_SHOWNORMAL); - } - break; - case ns1__SolutionType__Exe: - if (!solution.askConfirmation || IDOK == CSolutionDlg(g_Config.AppName, g_Config.Company, IDS_SOLUTION_EXE).DoModal()) - { - CAtlFile hFile(CreateFile(m_Patch, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); - if (hFile == INVALID_HANDLE_VALUE) - throw runtime_error("failed to create solution.exe file"); - if (FAILED(hFile.Write(&solution.exe[0], static_cast(solution.exe.size())))) - throw runtime_error("failed to write solution.exe file"); - hFile.Close(); - - STARTUPINFO si = {}; - si.cb = sizeof(si); - PROCESS_INFORMATION pi = {}; - if (!CreateProcess(NULL, m_Patch.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) - throw runtime_error("failed to start solution.exe"); - CloseHandle(pi.hThread); - CloseHandle(pi.hProcess); - } - break; - default: - throw runtime_error("Unknown SolutionType"); - } - } - - void SendReportDlgThread() - { - CSendReportDlg dlg(g_Config.AppName, g_Config.Company); - assert(!m_pProgressDlg); - m_pProgressDlg = &dlg; - if (dlg.DoModal() == IDCANCEL) - m_bStop = true; - m_pProgressDlg = NULL; - } - - static DWORD WINAPI _SendReportDlgThread(LPVOID param) - { - static_cast(param)->SendReportDlgThread(); - return 0; - } - - void SendAssertReportDlgThread() - { - CSendAssertReportDlg dlg(g_Config.AppName, g_Config.Company); - assert(!m_pProgressDlg); - m_pProgressDlg = &dlg; - if (dlg.DoModal() == IDCANCEL) - m_bStop = true; - m_pProgressDlg = NULL; - } - - static DWORD WINAPI _SendAssertReportDlgThread(LPVOID param) - { - static_cast(param)->SendAssertReportDlgThread(); - return 0; - } - - void SendFullDumpDlgThread() - { - CSendFullDumpDlg dlg(g_Config.AppName, g_Config.Company); - assert(!m_pProgressDlg); - m_pProgressDlg = &dlg; - if (dlg.DoModal() == IDCANCEL) - m_bStop = true; - m_pProgressDlg = NULL; - } - - static DWORD WINAPI _SendFullDumpDlgThread(LPVOID param) - { - static_cast(param)->SendFullDumpDlgThread(); - return 0; - } - - void CloseProgress(HANDLE hThread, bool bCancel = true) - { - if (!hThread) - return; - Sleep(100); // It could be that m_pProgressDlg->DoModal not yet created a window - if (m_pProgressDlg) - m_pProgressDlg->PostMessage(WM_CLOSE); - WaitForSingleObject(hThread, INFINITE); - if (!bCancel) - m_bStop = false; - } - - bool Process(HANDLE hProcess, DWORD dwProcessId, MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo, bool wasAssert, HANDLE hReportReady) - { - m_DumpWriter.Init(); - - // we need to get CrashInfo before writing the dumps, since dumps writing will change WorkingSet - m_CrashInfo.reset(new CrashInfo(hProcess)); - - InitPathes(); - - HANDLE hThreadTemp = NULL; - if (!g_Config.ServiceMode) - { - DWORD t; - hThreadTemp = CreateThread(NULL, 0, wasAssert ? _SendAssertReportDlgThread : _SendReportDlgThread, this, 0, &t); - if (!hThreadTemp) - throw runtime_error("Failed to create thread"); - } - CHandle hShowProgressThread(hThreadTemp); - wstring urlToProblem; - std::wstring clientID; - int problemID = 0; - int dumpGroupID = 0; - int dumpID = 0; - -#if 0 - // This code is for test purposes - { - CloseProgress(hShowProgressThread, false); - DWORD t; - CHandle hThreadTemp2(CreateThread(NULL, 0, _SendFullDumpDlgThread, this, 0, &t)); - if (!hThreadTemp2) - throw runtime_error("Failed to create thread"); - hShowProgressThread = hThreadTemp2; - Sleep(1000); // Give time to draw a dialog before writing a dump (it will freeze a process and a dialog) - for (int i = 0; m_pProgressDlg && i < 100; ++i) - { - m_pProgressDlg->PostMessage(WM_USER, 100, i); - Sleep(30); - } - throw runtime_error("end"); - } -#endif - - try - { - vector modules; - PrepareMiniDump(hProcess, dwProcessId, pExceptInfo, modules); - if (g_Config.ServiceMode) - { - PrepareFullDump(hProcess, dwProcessId, pExceptInfo); - TerminateProcess(hProcess, E_FAIL); // It is necessary for DUMPPARSER to terminate app, because it should process our dump, and it could not do it since it crashes. - CloseHandle(hProcess); - hProcess = NULL; - } - - bool additionalInfoAlreadyApproved = false; - - Response response = Hello(modules); - while (1) - { - switch (response.type) - { - case ns1__ResponseType__HaveSolution: - CloseProgress(hShowProgressThread); - if (response.solution.get()) - ProcessSolution(*response.solution, clientID, problemID, dumpGroupID, dumpID); - goto finish; - case ns1__ResponseType__NeedMiniDump: - response = UploadMiniDump(m_MiniDumpZipFile); - urlToProblem = response.urlToProblem; - clientID = response.clientID; - problemID = response.problemID; - dumpGroupID = response.dumpGroupID; - dumpID = response.dumpID; - continue; - case ns1__ResponseType__NeedMoreInfo: - { - CloseProgress(hShowProgressThread, false); - - if (!g_Config.ServiceMode) - { - if (!additionalInfoAlreadyApproved && CAskSendFullDumpDlg(g_Config.AppName, g_Config.Company, g_Config.PrivacyPolicyUrl).DoModal() == IDCANCEL) - { - response = SendAdditionalInfoUploadRejected(response.dumpID); - continue; - } - additionalInfoAlreadyApproved = true; - - DWORD t; - CHandle hThreadTemp2(CreateThread(NULL, 0, _SendFullDumpDlgThread, this, 0, &t)); - if (!hThreadTemp2) - throw runtime_error("Failed to create thread"); - hShowProgressThread = hThreadTemp2; - Sleep(100); // Give time to draw a dialog before writing a dump (it will freeze a process and a dialog) - } - - if (response.infoType == ns1__AdditionalInfoType__FullDump) - { - if (!g_Config.ServiceMode) - { - PrepareFullDump(hProcess, dwProcessId, pExceptInfo); - CloseHandle(hProcess); - hProcess = NULL; - } - SetEvent(hReportReady); - response = UploadAdditionalInfo(response.dumpID, m_FullDumpZipFile, true); - } - else if (response.infoType == ns1__AdditionalInfoType__Info) - { - PrepareAdditionalInfo(response, hProcess, dwProcessId); - response = UploadAdditionalInfo(response.dumpID, m_InfoFile, false); - } - else - { - throw runtime_error("Unknown AdditionalInfoType"); - } - } - continue; - case ns1__ResponseType__Error: - throw runtime_error((const char*)CW2A(response.error.c_str())); - case ns1__ResponseType__Stop: - default: - goto finish; - } - } -finish: - if (!g_Config.ServiceMode && !urlToProblem.empty() && g_Config.OpenProblemInBrowser) - ShellExecute(NULL, _T("open"), CW2CT(urlToProblem.c_str()), NULL, NULL, SW_SHOWNORMAL); - } - catch (...) - { - CloseProgress(hShowProgressThread); - throw; - } - - CloseProgress(hShowProgressThread); - - return true; - } -}; - -DWORD SendReportImpl(HANDLE hProcess, DWORD dwProcessId, MINIDUMP_EXCEPTION_INFORMATION* mei, bool wasAssert, HANDLE hReportReady) -{ - try - { - g_Log.Info(_T("SENDRPT was invoked to send report, PID 0x%x"), dwProcessId); - CrashProcessor().Process(hProcess, dwProcessId, mei, wasAssert, hReportReady); - } - catch (std::exception& ex) - { - g_Log.Error(_T("Problem occured: %hs"), ex.what()); - OutputDebugStringA(ex.what()); -//#ifdef _DEBUG - ::MessageBoxA(0, ex.what(), "SendRpt: Error", MB_ICONERROR); -//#endif - return FALSE; - } - return TRUE; -} - -int __cdecl SendReport(int argc, wchar_t* argv[]) -{ - CRegKey reg; - if (ERROR_SUCCESS == reg.Open(HKEY_LOCAL_MACHINE, _T("Software\\Idol Software\\DumpUploader"), KEY_READ)) - { - DWORD attachDebugger = FALSE; - reg.QueryDWORDValue(_T("AttachDebugger"), attachDebugger); - if (attachDebugger != FALSE) - { - if (IDYES == ::MessageBoxA(0, "Do you want to debug?\n\nYour should attach debugger to sendrpt.exe before choosing Yes.", "SendRpt: SendReport", MB_ICONWARNING | MB_YESNO)) - DebugBreak(); - } - - DWORD traceEnable = FALSE; - if (ERROR_SUCCESS == reg.QueryDWORDValue(_T("TraceEnable"), traceEnable) && traceEnable != FALSE) - { - CString str; - ULONG size = 1000; - if (ERROR_SUCCESS == reg.QueryStringValue(_T("TraceFolder"), str.GetBuffer(size), &size)) - { - str.ReleaseBuffer(size-1); - InitializeLog(); - g_Log.SetParams(LogMediaPtr(new FileMedia(str + _T("\\sendrpt.log"), true, false))); - } - } - } - - Params params; - - Serializer ser(argv[1]); - ser << params << g_Config; - params.ExceptInfo.ClientPointers = TRUE; - - return SendReportImpl(params.Process, params.ProcessId, ¶ms.ExceptInfo, !!params.WasAssert, params.ReportReady); -} \ No newline at end of file +// Copyright 2014 Idol Software, Inc. +// +// This file is part of Doctor Dump SDK. +// +// Doctor Dump SDK is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "stdafx.h" +#include "Serializer.h" +#include "DumpWriter.h" +#include "../../CommonLibs/Zlib/ZipUnzip.h" +#include "../../CommonLibs/Log/log.h" +#include "../../CommonLibs/Log/log_media.h" +#include "../../CommonLibs/Stat/stat.h" +#include "SendReportDlg.h" +#include "DoctorDump.h" +#include "../CrashHandler/CrashHandler.h" +#include "CrashInfo.h" + +using namespace std; + +BOOL IsWow64() +{ + typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); + LPFN_ISWOW64PROCESS fnIsWow64Process = NULL; + + BOOL bIsWow64 = FALSE; + + HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32")); + if (NULL != hKernel32) + fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(hKernel32,"IsWow64Process"); + + if (NULL != fnIsWow64Process) + fnIsWow64Process(GetCurrentProcess(), &bIsWow64); + + return bIsWow64; +} + +CAtlStringW ToString(int n) +{ + CAtlStringW result; + result.Format(L"%i", n); + return result; +} + +bool g_cancel = false; + +class UI: public doctor_dump::IUploadProgress +{ + CHandle m_progressWindowThread; + CWindow* volatile m_progressWindow; + Translator m_translator; + bool m_additionalInfoAlreadyApproved; + bool m_serviceMode; + CStringW m_privacyPolicyUrl; + +public: + UI(Config& config) + : m_progressWindow(NULL) + , m_translator(config.AppName, config.Company, GetModuleHandle(NULL), IDR_TRANSLATE_INI, config.LangFilePath) + , m_additionalInfoAlreadyApproved(config.SendAdditionalDataWithoutApproval != FALSE) + , m_serviceMode(!!config.ServiceMode) + , m_privacyPolicyUrl(config.PrivacyPolicyUrl) + { + } + + ~UI() + { + CloseProgressWindow(true); + } + + void OnProgress(SIZE_T total, SIZE_T sent) override + { + if (m_progressWindow) + m_progressWindow->PostMessage(WM_USER, total, sent); + } + + void ShowInitialProgressWindow(bool wasAssert) + { + if (m_serviceMode) + return; + + CloseProgressWindow(); + m_progressWindowThread.Attach(CreateThread(NULL, 0, wasAssert ? SendAssertReportDlgThread : SendReportDlgThread, this, 0, NULL)); + if (!m_progressWindowThread) + throw runtime_error("Failed to create thread"); + } + + void ShowFullDumpUploadProgressWindow() + { + if (m_serviceMode) + return; + + CloseProgressWindow(); + m_progressWindowThread.Attach(CreateThread(NULL, 0, SendFullDumpDlgThread, this, 0, NULL)); + if (!m_progressWindowThread) + throw runtime_error("Failed to create thread"); + Sleep(100); // Give time to draw a dialog before writing a dump (it will freeze a dialog for unknown reasons) + } + + bool AskSendFullDump() + { + if (m_serviceMode) + return true; + + CloseProgressWindow(); + + if (!m_additionalInfoAlreadyApproved && IDCANCEL == CAskSendFullDumpDlg(m_translator, m_privacyPolicyUrl).DoModal()) + return false; + + m_additionalInfoAlreadyApproved = true; + + return true; + } + + bool AskGetSolution(CSolutionDlg::Type type) + { + if (m_serviceMode) + return true; + + CloseProgressWindow(); + return IDOK == CSolutionDlg(m_translator, type).DoModal(); + } + + void Test() + { + ShowInitialProgressWindow(false); + while (!g_cancel) + Sleep(10); + g_cancel = false; + + ShowInitialProgressWindow(true); + while (!g_cancel) + Sleep(10); + g_cancel = false; + + AskSendFullDump(); + + ShowFullDumpUploadProgressWindow(); + Sleep(3000); + for (int i = 0; m_progressWindow && i < 100; ++i) + { + m_progressWindow->PostMessage(WM_USER, 100, i); + Sleep(30); + } + + AskGetSolution(CSolutionDlg::Read); + + AskGetSolution(CSolutionDlg::Install); + } + +private: + void SendReportDlg() + { + CSendReportDlg dlg(m_translator); + assert(!m_progressWindow); + m_progressWindow = &dlg; + if (dlg.DoModal() == IDCANCEL) + g_cancel = true; + m_progressWindow = NULL; + } + + static DWORD WINAPI SendReportDlgThread(LPVOID param) + { + static_cast(param)->SendReportDlg(); + return 0; + } + + void SendAssertReportDlg() + { + CSendAssertReportDlg dlg(m_translator); + assert(!m_progressWindow); + m_progressWindow = &dlg; + if (dlg.DoModal() == IDCANCEL) + g_cancel = true; + m_progressWindow = NULL; + } + + static DWORD WINAPI SendAssertReportDlgThread(LPVOID param) + { + static_cast(param)->SendAssertReportDlg(); + return 0; + } + + void SendFullDumpDlg() + { + CSendFullDumpDlg dlg(m_translator); + assert(!m_progressWindow); + m_progressWindow = &dlg; + if (dlg.DoModal() == IDCANCEL) + g_cancel = true; + m_progressWindow = NULL; + } + + static DWORD WINAPI SendFullDumpDlgThread(LPVOID param) + { + static_cast(param)->SendFullDumpDlg(); + return 0; + } + + void CloseProgressWindow(bool cancel = false) + { + if (!m_progressWindowThread) + return; + Sleep(100); // It could be that m_pProgressDlg->DoModal not yet created a window + if (m_progressWindow) + m_progressWindow->PostMessage(WM_CLOSE); + WaitForSingleObject(m_progressWindowThread, INFINITE); + m_progressWindowThread.Close(); + if (!cancel) + g_cancel = false; + } +}; + +class CrashProcessor +{ + Log& m_log; + Config& m_config; + + unique_ptr m_crashInfo; + CStringW m_workingFolder; + CStringW m_miniDumpFile; + CStringW m_miniDumpZipFile; + CStringW m_fullDumpFile; + CStringW m_fullDumpZipFile; + CStringW m_infoDll; + CStringW m_infoFile; + CStringW m_patch; + DumpWriter m_dumpWriter; + doctor_dump::DumpUploaderWebServiceEx m_dumpUploader; + +public: + CrashProcessor(Log& log, Config& config) + : m_log(log) + , m_config(config) + , m_dumpWriter(log) + , m_dumpUploader(log) + { + } + + ~CrashProcessor() + { + if (!m_fullDumpFile.IsEmpty()) + DeleteFile(m_fullDumpFile); + if (!m_miniDumpFile.IsEmpty()) + DeleteFile(m_miniDumpFile); + if (!m_config.LeaveDumpFilesInTempFolder) + { + if (!m_fullDumpZipFile.IsEmpty()) + DeleteFile(m_fullDumpZipFile); + if (!m_miniDumpZipFile.IsEmpty()) + DeleteFile(m_miniDumpZipFile); + if (!m_workingFolder.IsEmpty()) + RemoveDirectory(m_workingFolder); + } + } + + void InitPathes() + { + GetTempPath(MAX_PATH, m_workingFolder.GetBuffer(MAX_PATH)); + m_workingFolder.ReleaseBuffer(); + + SYSTEMTIME st; + GetLocalTime(&st); + + CStringW t; + t.Format(L"%ls_%d.%d.%d.%d_%04d%02d%02d_%02d%02d%02d", + (LPCWSTR)m_config.Prefix, + m_config.V[0], m_config.V[1], m_config.V[2], m_config.V[3], + (int)st.wYear, (int)st.wMonth, (int)st.wDay, (int)st.wHour, (int)st.wMinute, (int)st.wSecond); + + m_workingFolder += t; + m_miniDumpFile = m_workingFolder + _T("\\") + t + _T(".mini.dmp"); + m_miniDumpZipFile = m_workingFolder + _T("\\doctor_dump_mini.zip"); + m_fullDumpFile = m_workingFolder + _T("\\") + t + _T(".full.dmp"); + m_fullDumpZipFile = m_workingFolder + _T("\\doctor_dump_full.zip"); + m_infoDll = m_workingFolder + _T("\\info.dll"); + m_infoFile = m_workingFolder + _T("\\info.zip"); + m_patch = m_workingFolder + _T("\\solution.exe"); + + if (!CreateDirectory(m_workingFolder, NULL) && GetLastError() != ERROR_ALREADY_EXISTS) + throw std::runtime_error("failed to create temp directory"); + } + + int GetUserPCID() const + { + int PCID = 12345; + HKEY hCryptography; +#if defined (_WIN64) + DWORD param = 0; +#else + DWORD param = IsWow64() ? KEY_WOW64_64KEY : 0; +#endif + if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Cryptography"), 0, KEY_READ|param, &hCryptography)) + { + TCHAR guid[1024]; + DWORD size = sizeof(guid); + if (ERROR_SUCCESS == RegQueryValueEx(hCryptography, _T("MachineGuid"), NULL, NULL, (LPBYTE)guid, &size)) + { + DWORD D1 = 0, D2 = 0, D3 = 0, D4 = 0, D5 = 0, D6 = 0; + _stscanf_s(guid, _T("%08x-%04x-%04x-%04x-%04x%08x"), &D1, &D2, &D3, &D4, &D5, &D6); + DWORD DD1 = MAKELONG(D2, D3); + DWORD DD2 = MAKELONG(D4, D5); + PCID = D1 ^ MAKELONG(D3, D2) ^ MAKELONG(D5, D4) ^ D6; + } + RegCloseKey(hCryptography); + } + m_log.Info(_T("Machine ID 0x%08X"), PCID); + return PCID; + } + + void AppendUserInfo(const CStringW& dumpFile, Zip& zip) + { + CStringW crashInfoFile = m_workingFolder + L"\\crashinfo.xml"; + if (m_crashInfo->GetCrashInfoFile(crashInfoFile)) + m_config.FilesToAttach.push_back(std::make_pair(CStringW(crashInfoFile), L"crashinfo.xml")); + + CStringW crashUserInfoFile = m_workingFolder + L"\\crashuserinfo.xml"; + if (m_config.UserInfo.size()) + { + FILE* f = NULL; + if (0 == _wfopen_s(&f, crashUserInfoFile, L"wt,ccs=UTF-8")) + { + fwprintf_s(f, L"\n\n"); + for (auto it = m_config.UserInfo.cbegin(), end = m_config.UserInfo.cend(); it != end; ++it) + { + m_log.Info(_T("Adding UserInfo \"%ls\" as \"%ls\"..."), static_cast(it->first), static_cast(it->second)); + fwprintf_s(f, + L"<%ls>%ls\n", + static_cast(it->first), + static_cast(it->second), + static_cast(it->first)); + } + fwprintf_s(f, L""); + fclose(f); + m_config.FilesToAttach.push_back(std::make_pair(CStringW(crashUserInfoFile), L"crashuserinfo.xml")); + } + } + + WIN32_FIND_DATAW ff; + FindClose(FindFirstFileW(dumpFile, &ff)); + __int64 attachedSizeLimit = max(1024*1024I64, (static_cast<__int64>(ff.nFileSizeHigh) << 32) | ff.nFileSizeLow); + + m_log.Info(_T("Adding %d attaches..."), m_config.FilesToAttach.size()); + for (auto it = m_config.FilesToAttach.begin(), end = m_config.FilesToAttach.end(); it != end; ++it) + { + m_log.Info(_T("Adding \"%ls\" as \"%ls\"..."), static_cast(it->first), static_cast(it->second)); + WIN32_FIND_DATAW ff; + HANDLE hFind = FindFirstFileW(it->first, &ff); + if (hFind == INVALID_HANDLE_VALUE) + { + m_log.Warning(_T("File \"%ls\" not found..."), static_cast(it->first)); + continue; + } + FindClose(hFind); + __int64 size = (static_cast<__int64>(ff.nFileSizeHigh) << 32) | ff.nFileSizeLow; + if (size > attachedSizeLimit) + { + m_log.Warning(_T("File \"%ls\" not skipped by size..."), static_cast(it->first)); + continue; + } + attachedSizeLimit -= size; + + zip.AddFile(it->first, it->second, &g_cancel); + m_log.Info(_T("Done.")); + } + DeleteFile(crashInfoFile); + } + + void PrepareDump( + const CString& dumpFile, + const CString& zipFile, + HANDLE hProcess, + DWORD processId, + MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo, + MINIDUMP_TYPE type, + MINIDUMP_CALLBACK_INFORMATION* pCallback, + bool attachFiles) + { + if (g_cancel) + throw std::runtime_error("canceled"); + + m_log.Info(_T("Writing dump (%s)..."), static_cast(dumpFile)); + if (!m_dumpWriter.WriteMiniDump(hProcess, processId, pExceptInfo, dumpFile, type, pCallback)) + { + // Frequent errors: + // 0x80070070 - There is not enough space on the disk + DWORD err = GetLastError(); + m_log.Error(_T("WriteMiniDump has failed with error %d"), err); + CStringA text; + text.Format("WriteMiniDump has failed with error %d", err); + throw std::runtime_error(text); + } + m_log.Info(_T("Dump ready.")); + + if (g_cancel) + throw std::runtime_error("canceled"); + + m_log.Info(_T("Zipping dump (%s)..."), static_cast(zipFile)); + { + Zip zip(zipFile); + zip.AddFile(dumpFile, dumpFile.Mid(dumpFile.ReverseFind(_T('\\')) + 1)); + if (attachFiles) + AppendUserInfo(dumpFile, zip); + } + m_log.Info(_T("Zipping done.")); + + if (g_cancel) + throw std::runtime_error("canceled"); + } + + void PrepareMiniDump( + HANDLE hProcess, + DWORD processId, + MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo) + { + m_log.Info(_T("Prepare mini dump...")); + + DumpFilter dumpFilter(g_cancel, pExceptInfo ? pExceptInfo->ThreadId : 0); + PrepareDump(m_miniDumpFile, m_miniDumpZipFile, hProcess, processId, pExceptInfo, MiniDumpFilterMemory, dumpFilter, false); + } + + void PrepareFullDump( + HANDLE hProcess, + DWORD dwProcessId, + MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo, + bool attachFiles) + { + m_log.Info(_T("Prepare full dump...")); + + DumpFilter dumpFilter(g_cancel); + PrepareDump(m_fullDumpFile, m_fullDumpZipFile, hProcess, dwProcessId, pExceptInfo, (MINIDUMP_TYPE)m_config.FullDumpType, dumpFilter, attachFiles); + } + + typedef bool (WINAPI *pfnCollectInfo)(LPCWSTR file, LPCWSTR cfg, HANDLE process, DWORD processId); + void PrepareAdditionalInfo(const doctor_dump::NeedMoreInfoResponse& response, HANDLE process, DWORD processId) + { + m_log.Info(_T("Prepare additional info...")); + HMODULE hInfoDll = NULL; + try + { + CAtlFile hFile(CreateFile(m_infoDll, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); + if (hFile == INVALID_HANDLE_VALUE) + throw runtime_error("failed to create info.dll file"); + if (FAILED(hFile.Write(&response.infoModule[0], static_cast(response.infoModule.size())))) + throw runtime_error("failed to write info.dll file"); + hFile.Close(); + + hInfoDll = LoadLibraryW(m_infoDll); + if (!hInfoDll) + throw runtime_error("failed to load info.dll"); + + pfnCollectInfo CollectInfo = (pfnCollectInfo) GetProcAddress(hInfoDll, "CollectInfo"); + if (!CollectInfo) + throw runtime_error("failed to get CollectInfo from info.dll"); + + if (!CollectInfo(m_infoFile, response.infoModuleCfg.c_str(), process, processId)) + throw runtime_error("CollectInfo failed"); + + FreeLibrary(hInfoDll); + DeleteFile(m_infoDll); + } + catch (...) + { + if (hInfoDll) + FreeLibrary(hInfoDll); + DeleteFile(m_infoDll); + throw; + } + } + + void ProcessSolution(UI& ui, const doctor_dump::HaveSolutionResponse& solution) + { + m_log.Info(_T("Process solution...")); + switch (solution.type) + { + case ns4__HaveSolutionResponse_SolutionType__Url: + if (!solution.askConfirmation || ui.AskGetSolution(CSolutionDlg::Read)) + { + CAtlStringW url = solution.url.c_str(); + url.Replace(L"{ClientID}", solution.clientID.c_str()); + url.Replace(L"{ProblemID}", ToString(solution.problemID)); + url.Replace(L"{DumpGroupID}", ToString(solution.dumpGroupID)); + url.Replace(L"{DumpID}", ToString(solution.dumpID)); + ShellExecute(NULL, _T("open"), CW2CT(url), NULL, NULL, SW_SHOWNORMAL); + } + break; + case ns4__HaveSolutionResponse_SolutionType__Exe: + if (!solution.askConfirmation || ui.AskGetSolution(CSolutionDlg::Install)) + { + CAtlFile hFile(CreateFile(m_patch, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); + if (hFile == INVALID_HANDLE_VALUE) + throw runtime_error("failed to create solution.exe file"); + if (FAILED(hFile.Write(&solution.exe[0], static_cast(solution.exe.size())))) + throw runtime_error("failed to write solution.exe file"); + hFile.Close(); + + STARTUPINFO si = {}; + si.cb = sizeof(si); + PROCESS_INFORMATION pi = {}; + if (!CreateProcess(NULL, m_patch.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + throw runtime_error("failed to start solution.exe"); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + } + break; + default: + throw runtime_error("Unknown SolutionType"); + } + } + + bool Process(Params& params) + { + HANDLE hProcess = params.Process; + DWORD dwProcessId = params.ProcessId; + MINIDUMP_EXCEPTION_INFORMATION* pExceptInfo = ¶ms.ExceptInfo; + bool wasAssert = !!params.WasAssert; + + m_dumpWriter.Init(m_config.DbgHelpPath); + + // we need to get CrashInfo before writing the dumps, since dumps writing will change WorkingSet + m_crashInfo.reset(new CrashInfo(hProcess)); + + InitPathes(); + + UI ui(m_config); + + ui.ShowInitialProgressWindow(wasAssert); + + PrepareMiniDump(hProcess, dwProcessId, pExceptInfo); + if (m_config.ServiceMode) + { + PrepareFullDump(hProcess, dwProcessId, pExceptInfo, true); + TerminateProcess(hProcess, E_FAIL); // It is necessary for DUMPPARSER to terminate app, because it should process our dump, and it could not do it since it crashes. + CloseHandle(hProcess); + hProcess = NULL; + } + + doctor_dump::Application app; + app.applicationGUID = m_config.ApplicationGUID; + app.v[0] = m_config.V[0]; + app.v[1] = m_config.V[1]; + app.v[2] = m_config.V[2]; + app.v[3] = m_config.V[3]; + app.hotfix = m_config.Hotfix; + app.processName = m_config.ProcessName; + m_log.Info(_T("App %d.%d.%d.%d %ls"), app.v[0], app.v[1], app.v[2], app.v[3], app.applicationGUID); + + doctor_dump::DumpAdditionalInfo addInfo; + addInfo.crashDate = time(NULL); + addInfo.PCID = GetUserPCID(); + addInfo.submitterID = m_config.SubmitterID; + addInfo.group = CA2W(params.Group); + addInfo.description = m_config.CustomInfo; + + std::unique_ptr response = m_dumpUploader.Hello(app, (LPCWSTR)m_config.AppName, (LPCWSTR)m_config.Company, addInfo); + while (1) + { + switch (response->GetResponseType()) + { + case doctor_dump::Response::HaveSolutionResponseType: + ProcessSolution(ui, static_cast(*response)); + goto finish; + + case doctor_dump::Response::NeedMiniDumpResponseType: + response = m_dumpUploader.UploadMiniDump(response->context, app, addInfo, (LPCWSTR)m_miniDumpZipFile); + break; + + case doctor_dump::Response::NeedFullDumpResponseType: + if (!ui.AskSendFullDump()) + { + response = m_dumpUploader.RejectedToSendAdditionalInfo(response->context, app, response->dumpID); + break; + } + + ui.ShowFullDumpUploadProgressWindow(); + + if (!m_config.ServiceMode) + { + auto& resp = static_cast(*response); + m_config.FullDumpType = m_config.FullDumpType & (~resp.restrictedDumpType); + PrepareFullDump(hProcess, dwProcessId, pExceptInfo, resp.attachUserInfo); + CloseHandle(hProcess); + hProcess = NULL; + } + SetEvent(params.ReportReady); + response = m_dumpUploader.UploadFullDump(response->context, app, response->dumpID, (LPCWSTR)m_fullDumpZipFile, &ui); + break; + + case doctor_dump::Response::NeedMoreInfoResponseType: + if (!ui.AskSendFullDump()) + { + response = m_dumpUploader.RejectedToSendAdditionalInfo(response->context, app, response->dumpID); + break; + } + + ui.ShowFullDumpUploadProgressWindow(); + + PrepareAdditionalInfo(static_cast(*response), hProcess, dwProcessId); + response = m_dumpUploader.UploadAdditionalInfo(response->context, app, response->dumpID, (LPCWSTR)m_infoFile, &ui); + break; + + case doctor_dump::Response::ErrorResponseType: + throw runtime_error((const char*)CW2A(static_cast(*response).error.c_str())); + + case doctor_dump::Response::StopResponseType: + default: + goto finish; + } + } +finish: + if (!m_config.ServiceMode && !response->urlToProblem.empty() && m_config.OpenProblemInBrowser) + ShellExecuteW(NULL, L"open", response->urlToProblem.c_str(), NULL, NULL, SW_SHOWNORMAL); + + return true; + } +}; + +bool IsNetworkProblemException() +{ + try + { + throw; + } + catch (doctor_dump::SoapException& ex) + { + if (ex.IsNetworkProblem()) + return true; + return false; + } + catch (...) + { + return false; + } +} + +DWORD SendReportImpl(Log& log, Params& params, Config& config, bool isDebug) +{ + try + { + log.Info(_T("SENDRPT was invoked to send report, PID 0x%x"), params.ProcessId); + CrashProcessor(log, config).Process(params); + + return TRUE; + } + catch (std::exception& ex) + { + log.Error(_T("Problem occurred: %hs"), ex.what()); + OutputDebugStringA(ex.what()); + + if (isDebug) + { + ::MessageBoxA(0, ex.what(), "SendRpt: Error", MB_ICONERROR); + } + else + { + bool statSend = statistics::SendExceptionToGoogleAnalytics("UA-25460132-5", "sendrpt", ex.what(), true); + if (!statSend && !IsNetworkProblemException()) + ::MessageBoxA(0, ex.what(), "SendRpt: Error", MB_ICONERROR); + } + + return FALSE; + } +} + +int __cdecl SendReport(int argc, wchar_t* argv[]) +{ + Log log(NULL, _T("sendrpt")); + + bool isDebug = false; + CRegKey reg; + if (ERROR_SUCCESS == reg.Open(HKEY_LOCAL_MACHINE, _T("Software\\Idol Software\\DumpUploader"), KEY_READ)) + { + DWORD attachDebugger = FALSE; + reg.QueryDWORDValue(_T("AttachDebugger"), attachDebugger); + if (attachDebugger != FALSE) + { + if (IDYES == ::MessageBoxA(0, "Do you want to debug?\n\nYour should attach debugger to sendrpt.exe before choosing Yes.", "SendRpt: SendReport", MB_ICONWARNING | MB_YESNO)) + DebugBreak(); + } + + DWORD traceEnable = FALSE; + if (ERROR_SUCCESS == reg.QueryDWORDValue(_T("TraceEnable"), traceEnable) && traceEnable != FALSE) + { + isDebug = true; + CString str; + ULONG size = 1000; + if (ERROR_SUCCESS == reg.QueryStringValue(_T("TraceFolder"), str.GetBuffer(size), &size)) + { + str.ReleaseBuffer(size-1); + InitializeLog(); + log.SetParams(LogMediaPtr(new FileMedia(str + _T("\\sendrpt.log"), true, false))); + } + } + } + + Params params; + Config config; + + if (argc >= 2 && wcscmp(argv[1], L"-uitest") == 0) + { + config.AppName = "Test App"; + config.Company = "Long Company Name"; + if (argc >= 3) + config.LangFilePath = argv[2]; + UI ui(config); + ui.Test(); + return FALSE; + } + + Serializer ser(argv[1]); + ser << params << config; + params.ExceptInfo.ClientPointers = TRUE; + + return SendReportImpl(log, params, config, isDebug); +} \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/SendRpt/DoctorDump.cpp b/ext/CrashServer/CrashHandler/SendRpt/DoctorDump.cpp new file mode 100644 index 000000000..fddc6a360 --- /dev/null +++ b/ext/CrashServer/CrashHandler/SendRpt/DoctorDump.cpp @@ -0,0 +1,427 @@ +// Copyright 2014 Idol Software, Inc. +// +// This file is part of Doctor Dump SDK. +// +// Doctor Dump SDK is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "stdafx.h" +#include "DoctorDump.h" +#include "..\..\CommonLibs\Log\log.h" +#include "..\..\CommonLibs\Zlib\ZipUnzip.h" + +using namespace std; +using namespace doctor_dump; + +class ProgressNotifier +{ +public: + ProgressNotifier(DumpUploaderWebService& webService, size_t total, IUploadProgress& uploadProgress) + : m_webService(webService), m_sent(0), m_total(total), m_uploadProgress(uploadProgress) + { + m_webService.SetProgressCallback(ProgressCallback, this); + } + + ~ProgressNotifier() + { + m_webService.SetProgressCallback(nullptr, nullptr); + } + +private: + size_t m_sent; + size_t m_total; + IUploadProgress& m_uploadProgress; + DumpUploaderWebService& m_webService; + + static void ProgressCallback(BOOL send, SIZE_T bytesCount, LPVOID context) + { + static_cast(context)->ProgressCallback(send, bytesCount); + } + + void ProgressCallback(BOOL send, SIZE_T bytesCount) + { + if (!send) + return; + m_sent += bytesCount; + if (m_sent > m_total) + m_sent = m_total; + + m_uploadProgress.OnProgress(m_total, m_sent); + } +}; + +std::vector DumpUploaderWebServiceEx::ReadFile(const std::wstring& path) +{ + std::vector data; + + CAtlFile file; + for (int i = 0; ; ++i) + { + file.Attach(CreateFile(path.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)); + if (file != INVALID_HANDLE_VALUE) + break; + + DWORD err = GetLastError(); + // File indexing services like to open just closed files (our doctor_dump_mini.zip file), so lets make few tries. + if (err == ERROR_SHARING_VIOLATION && i < 10) + { + Sleep(1000); + continue; + } + CStringA text; + text.Format("failed (err %d) to open file %ls", err, path.c_str()); + throw std::runtime_error(text); + } + + + ULONGLONG fileSize; + if (FAILED(file.GetSize(fileSize))) + throw std::runtime_error(std::string("failed to get file size ") + (const char*)CW2A(path.c_str())); + + if (fileSize != 0) + { + data.resize((size_t)fileSize); + if (FAILED(file.Read(&data[0], static_cast(fileSize)))) + throw std::runtime_error(std::string("failed to read file ") + (const char*)CW2A(path.c_str())); + } + + return data; +} + +std::unique_ptr Response::CreateResponse(const ns1__Response& response, Log& log) +{ + std::unique_ptr result; + if (SOAP_TYPE_ns1__HaveSolutionResponse == response.soap_type()) + { + log.Debug(_T("\thas solution")); + const ns1__HaveSolutionResponse& resp = static_cast(response); + std::unique_ptr res(new HaveSolutionResponse); + res->askConfirmation = resp.askConfirmation; + res->type = resp.type; + log.Debug(_T("\t\ttype\t%d"), res->type); + if (resp.url) + { + res->url = resp.url->c_str(); + log.Debug(_T("\t\tURL\t%ls"), res->url.c_str()); + } + if (resp.exe) + { + res->exe.assign(resp.exe->__ptr, resp.exe->__ptr + resp.exe->__size); + log.Debug(_T("\t\thas EXE, size\t%d"), res->exe.size()); + } + result = std::move(res); + } + else if (SOAP_TYPE_ns1__NeedSymbolsThenMiniDumpResponse == response.soap_type() || SOAP_TYPE_ns1__NeedMiniDumpResponse == response.soap_type()) + { + result.reset(new NeedMiniDumpResponse); + } + else if (SOAP_TYPE_ns1__NeedFullDumpResponse == response.soap_type()) + { + const ns1__NeedFullDumpResponse& resp = static_cast(response); + std::unique_ptr res(new NeedFullDumpResponse); + + res->restrictedDumpType = resp.restrictedDumpType; + res->attachUserInfo = resp.attachUserInfo; + + result = std::move(res); + } + else if (SOAP_TYPE_ns1__NeedMoreInfoResponse == response.soap_type()) + { + const ns1__NeedMoreInfoResponse& resp = static_cast(response); + std::unique_ptr res(new NeedMoreInfoResponse); + if (resp.infoModule && resp.infoModule->__size > 0) + res->infoModule.assign(resp.infoModule->__ptr, resp.infoModule->__ptr + resp.infoModule->__size); + else + res->infoModule.clear(); + if (resp.infoModuleCfg) + res->infoModuleCfg = resp.infoModuleCfg->c_str(); + else + res->infoModuleCfg = L""; + result = std::move(res); + } + else if (SOAP_TYPE_ns1__StopResponse == response.soap_type()) + { + result.reset(new StopResponse); + } + else if (SOAP_TYPE_ns1__ErrorResponse == response.soap_type()) + { + const ns1__ErrorResponse& resp = static_cast(response); + std::unique_ptr res(new ErrorResponse); + res->error = *resp.error; + log.Debug(_T("\terror\t\"%ls\""), res->error.c_str()); + result = std::move(res); + } + else + { + throw std::runtime_error("unknown response type"); + } + + if (response.clientID) + { + result->clientID = *response.clientID; + log.Debug(_T("\tCliendID = \"%ls\""), result->clientID.c_str()); + } + result->problemID = response.problemID ? *response.problemID : 0; + result->dumpGroupID = response.dumpGroupID ? *response.dumpGroupID : 0; + result->dumpID = response.dumpID ? *response.dumpID : 0; + log.Debug(_T("\tproblemID = %d, dumpGroupID = %d, dumpID = %d"), result->problemID, result->dumpGroupID, result->dumpID); + if (response.urlToProblem) + { + result->urlToProblem = *response.urlToProblem; + log.Debug(_T("\tURL to problem = \"%ls\""), result->urlToProblem.c_str()); + } + else + { + result->urlToProblem = L""; + } + if (response.context && response.context->__size > 0) + result->context.assign(response.context->__ptr, response.context->__ptr + response.context->__size); + else + result->context.clear(); + + return result; +} + +_xop__Include* DumpUploaderWebServiceEx::CreateXopInclude(DeferredDelete& context, const std::vector& data) +{ + SOAP_SHARED_STRUCT(_xop__Include, ptr); + context.emplace_back(ptr); + + _xop__Include* soapXop = ptr->get(); + if (!data.empty()) + { + soapXop->__ptr = const_cast(data.data()); + soapXop->__size = static_cast(data.size()); + } + else + { + soapXop->__ptr = NULL; + soapXop->__size = 0; + } + soapXop->id = NULL; + soapXop->options = NULL; + soapXop->type = "binary"; + + return soapXop; +} + +_xop__Include* DumpUploaderWebServiceEx::CreateXopIncludeFromFile(DeferredDelete& context, const std::wstring& path) +{ + std::shared_ptr> data(std::make_shared>(ReadFile(path))); + + _xop__Include* soapXop = CreateXopInclude(context, *data.get()); + ((soap_helpers::SoapStuct<_xop__Include>*) context.back().get())->m_data = data; + + return soapXop; +} + +DumpUploaderWebServiceEx::DumpUploaderWebServiceEx(Log& log_) + : m_webService(5*60 /* Parsing a dump may require a lot of time (for example if symbols are uploaded from microsoft) */) + , m_log(log_) +{ +} + +ns1__ClientLib* DumpUploaderWebServiceEx::CreateClientLib(DeferredDelete& context) +{ + SOAP_SHARED_STRUCT(ns1__ClientLib, ptr); + context.emplace_back(ptr); + + ns1__ClientLib* soapClient = ptr->get(); + soapClient->type = ns4__ClientLib_ClientType__CrashHandler_1_0; + soapClient->v1 = 0; + soapClient->v2 = 0; + soapClient->v3 = 0; + soapClient->v4 = 0; + soapClient->arch = +#ifdef _M_AMD64 + ns4__ClientLib_Architecture__x64 +#else + ns4__ClientLib_Architecture__x86 +#endif + ; + + TCHAR path[MAX_PATH]; + if (!GetModuleFileName(NULL, path, _countof(path))) + return soapClient; + + std::vector verInfo(GetFileVersionInfoSize(path, NULL)); + VS_FIXEDFILEINFO* lpFileinfo = NULL; + UINT uLen; + if (verInfo.empty() + || !GetFileVersionInfo(path, 0, static_cast(verInfo.size()), &verInfo[0]) + || !VerQueryValue(&verInfo[0], _T("\\"), (LPVOID*)&lpFileinfo, &uLen)) + return soapClient; + soapClient->v1 = HIWORD(lpFileinfo->dwProductVersionMS); + soapClient->v2 = LOWORD(lpFileinfo->dwProductVersionMS); + soapClient->v3 = HIWORD(lpFileinfo->dwProductVersionLS); + soapClient->v4 = LOWORD(lpFileinfo->dwProductVersionLS); + m_log.Info(_T("Client lib %d.%d.%d.%d"), soapClient->v1, soapClient->v2, soapClient->v3, soapClient->v4); + + return soapClient; +} + +ns1__Application* DumpUploaderWebServiceEx::CreateApp(DeferredDelete& context, const Application& app) +{ + SOAP_SHARED_STRUCT(ns1__Application, ptr); + context.emplace_back(ptr); + + std::shared_ptr pMainModule(std::make_shared(app.processName)); + ptr->m_data = pMainModule; + + ns1__Application* soapApp = ptr->get(); + soapApp->applicationGUID = app.applicationGUID; + soapApp->v1 = app.v[0]; + soapApp->v2 = app.v[1]; + soapApp->v3 = app.v[2]; + soapApp->v4 = app.v[3]; + soapApp->hotfix = app.hotfix; + soapApp->mainModule = pMainModule.get(); + m_log.Info(_T("App %d.%d.%d.%d %ls"), soapApp->v1, soapApp->v2, soapApp->v3, soapApp->v4, soapApp->applicationGUID.c_str()); + return soapApp; +} + +ns1__AppAdditionalInfo* DumpUploaderWebServiceEx::CreateAppAddInfo(DeferredDelete& context, std::wstring& appName, std::wstring& companyName) +{ + SOAP_SHARED_STRUCT(ns1__AppAdditionalInfo, ptr); + context.emplace_back(ptr); + + ns1__AppAdditionalInfo* soapAppAddInfo = ptr->get(); + soapAppAddInfo->appName = &appName; + soapAppAddInfo->companyName = &companyName; + return soapAppAddInfo; +} + +ns1__DumpAdditionalInfo* DumpUploaderWebServiceEx::CreateDumpAddInfo(DeferredDelete& context, const DumpAdditionalInfo &dumpAddInfo) +{ + SOAP_SHARED_STRUCT(ns1__DumpAdditionalInfo, ptr); + context.emplace_back(ptr); + + ns1__DumpAdditionalInfo* soapAddInfo = ptr->get(); + soapAddInfo->crashDate = dumpAddInfo.crashDate; + soapAddInfo->PCID = dumpAddInfo.PCID; + soapAddInfo->submitterID = dumpAddInfo.submitterID; + soapAddInfo->group = const_cast(&dumpAddInfo.group); + soapAddInfo->description = const_cast(&dumpAddInfo.description); + return soapAddInfo; +} + +void DumpUploaderWebServiceEx::ThrowOnSoapFail(int res) +{ + if (res != SOAP_OK) + throw SoapException(m_webService.error, (const char*)CW2A(m_webService.GetErrorText().c_str())); +} + +std::unique_ptr DumpUploaderWebServiceEx::Hello( + const Application& app, + std::wstring appName, + std::wstring companyName, + const DumpAdditionalInfo& addInfo) +{ + m_log.Info(_T("Sending Hello...")); + + DeferredDelete deleteList; + + SOAP_STRUCT(_ns1__Hello, request); + request->clientLib = CreateClientLib(deleteList); + request->app = CreateApp(deleteList, app); + request->appAddInfo = CreateAppAddInfo(deleteList, appName, companyName); + request->addInfo = CreateDumpAddInfo(deleteList, addInfo); + + SOAP_STRUCT(_ns1__HelloResponse, response); + ThrowOnSoapFail(m_webService.Hello(request, response)); + + return Response::CreateResponse(*response->HelloResult, m_log); +} + +std::unique_ptr DumpUploaderWebServiceEx::UploadMiniDump(const std::vector& context, const Application& app, const DumpAdditionalInfo& addInfo, const std::wstring& dumpFile) +{ + m_log.Info(_T("Sending UploadMiniDump...")); + + DeferredDelete deleteList; + + SOAP_STRUCT(_ns1__UploadMiniDump, request); + request->client = CreateClientLib(deleteList); + request->app = CreateApp(deleteList, app); + request->addInfo = CreateDumpAddInfo(deleteList, addInfo); + request->dump = CreateXopIncludeFromFile(deleteList, dumpFile); + request->context = CreateXopInclude(deleteList, context); + + SOAP_STRUCT(_ns1__UploadMiniDumpResponse, response); + ThrowOnSoapFail(m_webService.UploadMiniDump(request, response)); + + return Response::CreateResponse(*response->UploadMiniDumpResult, m_log); +} + +std::unique_ptr DumpUploaderWebServiceEx::UploadFullDump(const std::vector& context, const Application& app, int miniDumpId, const std::wstring& fullDumpZipPath, IUploadProgress* uploadProgress) +{ + m_log.Info(_T("Sending UploadFullDump...")); + + DeferredDelete deleteList; + + SOAP_STRUCT(_ns1__UploadFullDump, request); + request->client = CreateClientLib(deleteList); + request->app = CreateApp(deleteList, app); + request->miniDumpID = &miniDumpId; + request->dumpInZip = CreateXopIncludeFromFile(deleteList, fullDumpZipPath); + request->context = CreateXopInclude(deleteList, context); + + std::unique_ptr scopedProgress; + if (uploadProgress) + scopedProgress.reset(new ProgressNotifier(m_webService, request->dumpInZip->__size, *uploadProgress)); + + SOAP_STRUCT(_ns1__UploadFullDumpResponse, response); + ThrowOnSoapFail(m_webService.UploadFullDump(request, response)); + + return Response::CreateResponse(*response->UploadFullDumpResult, m_log); +} + +std::unique_ptr DumpUploaderWebServiceEx::UploadAdditionalInfo(const std::vector& context, const Application& app, int miniDumpId, const std::wstring& addInfoFile, IUploadProgress* uploadProgress) +{ + m_log.Info(_T("Sending UploadAdditionalInfo...")); + + DeferredDelete deleteList; + + SOAP_STRUCT(_ns1__UploadAdditionalInfo, request); + request->client = CreateClientLib(deleteList); + request->app = CreateApp(deleteList, app); + request->miniDumpID = &miniDumpId; + request->info = CreateXopIncludeFromFile(deleteList, addInfoFile); + request->context = CreateXopInclude(deleteList, context); + + std::unique_ptr scopedProgress; + if (uploadProgress) + scopedProgress.reset(new ProgressNotifier(m_webService, request->info->__size, *uploadProgress)); + + SOAP_STRUCT(_ns1__UploadAdditionalInfoResponse, response); + ThrowOnSoapFail(m_webService.UploadAdditionalInfo(request, response)); + + return Response::CreateResponse(*response->UploadAdditionalInfoResult, m_log); +} + +std::unique_ptr DumpUploaderWebServiceEx::RejectedToSendAdditionalInfo(const std::vector& context, const Application& app, int miniDumpId) +{ + m_log.Info(_T("Sending SendAdditionalInfoUploadRejected...")); + + DeferredDelete deleteList; + + SOAP_STRUCT(_ns1__RejectedToSendAdditionalInfo, request); + request->client = CreateClientLib(deleteList); + request->app = CreateApp(deleteList, app); + request->miniDumpID = &miniDumpId; + request->context = CreateXopInclude(deleteList, context); + + SOAP_STRUCT(_ns1__RejectedToSendAdditionalInfoResponse, response); + ThrowOnSoapFail(m_webService.RejectedToSendAdditionalInfo(request, response)); + + return Response::CreateResponse(*response->RejectedToSendAdditionalInfoResult, m_log); +} diff --git a/ext/CrashServer/CrashHandler/SendRpt/DoctorDump.h b/ext/CrashServer/CrashHandler/SendRpt/DoctorDump.h new file mode 100644 index 000000000..a84d51d72 --- /dev/null +++ b/ext/CrashServer/CrashHandler/SendRpt/DoctorDump.h @@ -0,0 +1,178 @@ +// Copyright 2014 Idol Software, Inc. +// +// This file is part of Doctor Dump SDK. +// +// Doctor Dump SDK is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#pragma once + +#include +#include +#include "..\..\CommonLibs\Log\log.h" +#include "..\DumpUploaderServiceLib\DumpUploaderWebService.h" +#include "DumpUploader.h" + +struct soap; + +namespace soap_helpers +{ + template + class SoapStuct + { + std::function m_create; + std::function m_deleter; + S* m_s; + soap* m_webService; + SoapStuct(const SoapStuct&); + SoapStuct(const SoapStuct&& other); + public: + SoapStuct(soap* webService, + std::function create, + std::function deleter) + : m_webService(webService) + , m_create(create) + , m_deleter(deleter) + { + m_s = m_create(m_webService, 1); + } + ~SoapStuct() + { + if (m_s) + m_deleter(m_webService, m_s); + } + + operator S*() { return m_s; } + S* operator->() { return m_s; } + S* get() { return m_s; } + + std::shared_ptr m_data; + }; +#define SOAP_STRUCT(Str, Var) soap_helpers::SoapStuct Var(&m_webService, soap_new_##Str, soap_delete_##Str) +#define SOAP_SHARED_STRUCT(Str, Var) std::shared_ptr> Var(new soap_helpers::SoapStuct(&m_webService, soap_new_##Str, soap_delete_##Str)) +} + +namespace doctor_dump +{ + struct DumpAdditionalInfo + { + time_t crashDate; + int PCID; + int submitterID; + std::wstring group; + std::wstring description; + }; + + struct Response + { + std::wstring clientID; + int problemID; + int dumpGroupID; + int dumpID; + std::wstring urlToProblem; + std::vector context; + + enum ResponseType { + HaveSolutionResponseType, + NeedMiniDumpResponseType, + NeedFullDumpResponseType, + NeedMoreInfoResponseType, + StopResponseType, + ErrorResponseType, + }; + + virtual ResponseType GetResponseType() const = 0; + + static std::unique_ptr CreateResponse(const ns1__Response& response, Log& log); + }; + + struct HaveSolutionResponse: public Response + { + bool askConfirmation; + ns4__HaveSolutionResponse_SolutionType type; + std::wstring url; + std::vector exe; + ResponseType GetResponseType() const override { return HaveSolutionResponseType; } + }; + + struct NeedMiniDumpResponse: public Response + { + ResponseType GetResponseType() const override { return NeedMiniDumpResponseType; } + }; + + struct NeedFullDumpResponse: public Response + { + DWORD restrictedDumpType; + bool attachUserInfo; + ResponseType GetResponseType() const override { return NeedFullDumpResponseType; } + }; + + struct NeedMoreInfoResponse: public Response + { + std::vector infoModule; + std::wstring infoModuleCfg; + ResponseType GetResponseType() const override { return NeedMoreInfoResponseType; } + }; + + struct StopResponse: public Response + { + ResponseType GetResponseType() const override { return StopResponseType; } + }; + + struct ErrorResponse: public Response + { + std::wstring error; + ResponseType GetResponseType() const override { return ErrorResponseType; } + }; + + struct IUploadProgress + { + virtual void OnProgress(SIZE_T total, SIZE_T sent) = 0; + }; + + class SoapException: public std::runtime_error + { + public: + explicit SoapException(int soapError, const std::string& message) : m_soapError(soapError), std::runtime_error(message) {} + explicit SoapException(int soapError, const char* message) : m_soapError(soapError), std::runtime_error(message) {} + int m_soapError; + bool IsNetworkProblem() const { return m_soapError == SOAP_TCP_ERROR; } + }; + + class DumpUploaderWebServiceEx + { + public: + DumpUploaderWebServiceEx(Log& log_); + + std::unique_ptr Hello(const Application& app, std::wstring appName, std::wstring companyName,const DumpAdditionalInfo& addInfo); + std::unique_ptr UploadMiniDump(const std::vector& context, const Application& app, const DumpAdditionalInfo& addInfo, const std::wstring& dumpFile); + std::unique_ptr UploadFullDump(const std::vector& context, const Application& app, int miniDumpId, const std::wstring& fullDumpZipPath, IUploadProgress* uploadProgress); + std::unique_ptr UploadAdditionalInfo(const std::vector& context, const Application& app, int miniDumpId, const std::wstring& addInfoFile, IUploadProgress* uploadProgress); + std::unique_ptr RejectedToSendAdditionalInfo(const std::vector& context, const Application& app, int miniDumpId); + + private: + Log& m_log; + DumpUploaderWebService m_webService; + + typedef std::vector> DeferredDelete; + _xop__Include* CreateXopInclude(DeferredDelete& context, const std::vector& data); + _xop__Include* CreateXopIncludeFromFile(DeferredDelete& context, const std::wstring& path); + ns1__ClientLib* CreateClientLib(DeferredDelete& context); + ns1__Application* CreateApp(DeferredDelete& context, const Application& appsrc); + ns1__AppAdditionalInfo* CreateAppAddInfo(DeferredDelete& context, std::wstring& appName, std::wstring& companyName); + ns1__DumpAdditionalInfo* CreateDumpAddInfo(DeferredDelete& context, const DumpAdditionalInfo &addInfo); + void ThrowOnSoapFail(int res); + static std::vector ReadFile(const std::wstring& path); + }; + +} \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/CrashHandler/targetver.h b/ext/CrashServer/CrashHandler/SendRpt/DumpUploader.h similarity index 57% copy from ext/CrashServer/CrashHandler/CrashHandler/targetver.h copy to ext/CrashServer/CrashHandler/SendRpt/DumpUploader.h index a00a2ffb0..117e53889 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/targetver.h +++ b/ext/CrashServer/CrashHandler/SendRpt/DumpUploader.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -17,7 +17,21 @@ #pragma once -#define _WIN32_WINNT 0x0501 -#define WINVER 0x0501 +#include +namespace doctor_dump +{ + struct Application + { + LPCWSTR applicationGUID; + USHORT v[4]; + USHORT hotfix; + LPCWSTR processName; + }; + struct IProgress + { + virtual void OnProgress(BYTE percent) = 0; + }; + +} \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.cpp b/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.cpp index 5a76f4180..851cb363d 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.cpp +++ b/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -15,36 +15,17 @@ // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . -#include "StdAfx.h" +#include "stdafx.h" #include "resource.h" #include "DumpWriter.h" -#include "..\..\CommonLibs\Log\log.h" +#include +#include "utils.h" using namespace std; -extern Log g_Log; - -static void ExtractFileFromResource(HMODULE hImage, DWORD resId, LPCTSTR path) -{ - g_Log.Debug(_T("Extracting resource %d to \"%s\"..."), resId, path); - HRSRC hDbghelpRes = FindResource(hImage, MAKEINTRESOURCE(resId), RT_RCDATA); - if (!hDbghelpRes) - throw runtime_error("failed to find file in resources"); - - HGLOBAL hDbghelpGlobal = LoadResource(hImage, hDbghelpRes); - if (!hDbghelpGlobal) - throw runtime_error("failed to load file from resources"); - - CAtlFile hFile(CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); - if (hFile == INVALID_HANDLE_VALUE) - throw runtime_error("failed to create file"); - - if (FAILED(hFile.Write(LockResource(hDbghelpGlobal), SizeofResource(hImage, hDbghelpRes)))) - throw runtime_error("failed to write file"); -} - -DumpWriter::DumpWriter() - : m_hDbgHelp(NULL) +DumpWriter::DumpWriter(Log& log) + : m_log(log) + , m_hDbgHelp(NULL) , m_pfnMiniDumpWriteDump(NULL) { } @@ -56,32 +37,28 @@ DumpWriter::~DumpWriter() { FreeLibrary(m_hDbgHelp); m_hDbgHelp = NULL; - DeleteFile(m_szDbghelpPath); } } -void DumpWriter::CreateDbghelp() +void DumpWriter::Init(LPCWSTR dbgHelpPath) { - TCHAR szTempPath[MAX_PATH]; - GetTempPath(_countof(szTempPath), szTempPath); - GetTempFileName(szTempPath, _T("dbg"), 0, m_szDbghelpPath); - DWORD resid = IDR_DBGHELP; -#ifdef USE64 - resid = IDR_DBGHELPX64; -#endif - ExtractFileFromResource(GetModuleHandle(NULL), resid, m_szDbghelpPath); -} - -void DumpWriter::Init() -{ - CreateDbghelp(); - m_hDbgHelp = LoadLibrary(m_szDbghelpPath); + if (dbgHelpPath) + m_dbgHelpPath = dbgHelpPath; + m_hDbgHelp = LoadLibraryW(m_dbgHelpPath); if (!m_hDbgHelp) - throw runtime_error("failed to load dbghelp.dll"); + { + m_hDbgHelp = LoadLibrary(_T("dbghelp.dll")); + if (!m_hDbgHelp) + throw runtime_error("failed to load dbghelp.dll"); + } - m_pfnMiniDumpWriteDump = (fnMiniDumpWriteDump) GetProcAddress(m_hDbgHelp, "MiniDumpWriteDump"); - if (!m_pfnMiniDumpWriteDump) - throw runtime_error("failed to get MiniDumpWriteDump"); +#define GetProc(func)\ + m_pfn##func = (fn##func) GetProcAddress(m_hDbgHelp, #func);\ + if (!m_pfn##func)\ + throw runtime_error("failed to get " #func); + + GetProc(MiniDumpWriteDump); +#undef GetProc } bool DumpWriter::WriteMiniDump( @@ -100,7 +77,7 @@ bool DumpWriter::WriteMiniDump( 0, NULL, CREATE_ALWAYS, - FILE_FLAG_WRITE_THROUGH, + FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) @@ -109,13 +86,63 @@ bool DumpWriter::WriteMiniDump( bool result = m_pfnMiniDumpWriteDump(hProcess, dwProcessId, hFile, DumpType, pExceptInfo, NULL, pCallback) != FALSE; + DWORD err = GetLastError(); + if (result) { DWORD dwFileSize = GetFileSize(hFile, NULL); result = dwFileSize != INVALID_FILE_SIZE && dwFileSize > 1024; + if (!result) + err = ERROR_INVALID_DATA; + } + else + { + m_log.Error(_T("MiniDumpWriteDump failed, 0x%08x"), err); } CloseHandle(hFile); + SetLastError(err); + return result; } + +DumpFilter::DumpFilter(bool& cancel, DWORD saveOnlyThisThreadID) + : m_saveOnlyThisThreadID(saveOnlyThisThreadID), m_cancel(cancel) +{ + m_callback.CallbackRoutine = _MinidumpCallback; + m_callback.CallbackParam = this; +} + +BOOL DumpFilter::MinidumpCallback(const PMINIDUMP_CALLBACK_INPUT CallbackInput, PMINIDUMP_CALLBACK_OUTPUT CallbackOutput) +{ + if (!CallbackInput) + return TRUE; + + switch (CallbackInput->CallbackType) + { + case CancelCallback: + CallbackOutput->CheckCancel = TRUE; + if (m_cancel) + CallbackOutput->Cancel = TRUE; + break; + case IncludeThreadCallback: + if (m_saveOnlyThisThreadID != 0 && CallbackInput->IncludeThread.ThreadId != m_saveOnlyThisThreadID) + { + CallbackOutput->ThreadWriteFlags = 0; + return FALSE; + } + break; + case ThreadCallback: + if (m_saveOnlyThisThreadID != 0 && CallbackInput->Thread.ThreadId != m_saveOnlyThisThreadID) + CallbackOutput->ThreadWriteFlags = 0; + break; + } + + return TRUE; +} + +BOOL CALLBACK DumpFilter::_MinidumpCallback(PVOID CallbackParam, const PMINIDUMP_CALLBACK_INPUT CallbackInput, PMINIDUMP_CALLBACK_OUTPUT CallbackOutput) +{ + return static_cast(CallbackParam)->MinidumpCallback(CallbackInput, CallbackOutput); +} diff --git a/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.h b/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.h index 9fc1580a8..d534b15b7 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.h +++ b/ext/CrashServer/CrashHandler/SendRpt/DumpWriter.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -19,14 +19,17 @@ #include #include +#include +#include "DoctorDump.h" +#include "../../CommonLibs/Log/log.h" class DumpWriter { public: - DumpWriter(); + DumpWriter(Log& log); ~DumpWriter(); - void Init(); + void Init(LPCWSTR dbgHelpPath); bool WriteMiniDump( HANDLE hProcess, @@ -37,18 +40,39 @@ public: MINIDUMP_CALLBACK_INFORMATION* pCallback); private: - void CreateDbghelp(); - typedef BOOL (WINAPI *fnMiniDumpWriteDump)( - IN HANDLE hProcess, - IN DWORD ProcessId, - IN HANDLE hFile, - IN MINIDUMP_TYPE DumpType, - IN CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, OPTIONAL - IN CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, OPTIONAL - IN CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam OPTIONAL); - - TCHAR m_szDbghelpPath[MAX_PATH]; + HANDLE hProcess, + DWORD ProcessId, + HANDLE hFile, + MINIDUMP_TYPE DumpType, + CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, + CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, + CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); + + Log& m_log; + CStringW m_dbgHelpPath; HINSTANCE m_hDbgHelp; fnMiniDumpWriteDump m_pfnMiniDumpWriteDump; }; + +class DumpFilter +{ +public: + DumpFilter(bool& cancel, DWORD saveOnlyThisThreadID = 0); + + operator MINIDUMP_CALLBACK_INFORMATION*() { return &m_callback; } + +private: + MINIDUMP_CALLBACK_INFORMATION m_callback; + bool& m_cancel; + DWORD m_saveOnlyThisThreadID; + + BOOL MinidumpCallback( + const PMINIDUMP_CALLBACK_INPUT CallbackInput, + PMINIDUMP_CALLBACK_OUTPUT CallbackOutput); + + static BOOL CALLBACK _MinidumpCallback( + PVOID CallbackParam, + const PMINIDUMP_CALLBACK_INPUT CallbackInput, + PMINIDUMP_CALLBACK_OUTPUT CallbackOutput); +}; diff --git a/ext/CrashServer/CrashHandler/SendRpt/IniFile.cpp b/ext/CrashServer/CrashHandler/SendRpt/IniFile.cpp new file mode 100644 index 000000000..55ab55168 --- /dev/null +++ b/ext/CrashServer/CrashHandler/SendRpt/IniFile.cpp @@ -0,0 +1,103 @@ +#include "StdAfx.h" +#include "IniFile.h" +#include "utils.h" + +IniFile::IniFile(const wchar_t* path) +{ + CHandle file(CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0)); + if (file == INVALID_HANDLE_VALUE) + throw std::runtime_error("ini file not found"); + + DWORD size = GetFileSize(file, NULL); + std::vector data(size); + + if (!ReadFile(file, data.data(), (DWORD)data.size(), &size, NULL)) + throw std::runtime_error("failed to read ini file"); + + Parse(data.data(), size); +} + +IniFile::IniFile(HMODULE hImage, DWORD resId) +{ + auto data = ExtractDataFromResource(hImage, resId); + Parse(data.first, data.second); +} + +const wchar_t* GetEol(const wchar_t* p, const wchar_t* end) +{ + while (p < end && *p != L'\n') + ++p; + return p; +} + +void IniFile::Parse(LPCVOID data, size_t size) +{ + LPCWSTR begin = (LPCWSTR)data; + LPCWSTR end = begin + size / sizeof(*begin); + + if (*begin == 0xFEFF) + ++begin; + + Section* currentSection = nullptr; + CString* varToAppend = nullptr; + + while (1) + { + const wchar_t* eol = GetEol(begin, end); + if (begin >= eol) + break; + + CStringW line(begin, int(eol - begin)); + begin = eol + 1; + + line.Trim(L" \t\r\n"); + + if (varToAppend) + { + bool appendNext = line.Right(1) == L"\\"; + if (appendNext) + line.Delete(line.GetLength() - 1); + *varToAppend += line; + if (!appendNext) + varToAppend = nullptr; + continue; + } + + if (line.IsEmpty() || line[0] == L';') + continue; + + if (line[0] == L'[' && line[line.GetLength() - 1] == L']') + { + currentSection = &m_sections[line.Trim(L"[]")]; + continue; + } + + if (!currentSection) + continue; + + int equalPos = line.Find(L'='); + if (equalPos == -1 || equalPos == 0) + continue; + CStringW var = line.Left(equalPos); + CStringW text = line.Mid(equalPos + 1); + if (text.Right(1) == L"\\") + { + text.Delete(text.GetLength() - 1); + varToAppend = &(*currentSection)[var]; + } + + (*currentSection)[var] = text; + } +} + +CStringW IniFile::GetString(const wchar_t* section, const wchar_t* variable) +{ + auto sec = m_sections.find(section); + if (sec != m_sections.end()) + { + auto var = sec->second.find(variable); + if (var != sec->second.end()) + return var->second; + } + return CStringW(); +} diff --git a/ext/CrashServer/CrashHandler/CrashHandler/stdafx.h b/ext/CrashServer/CrashHandler/SendRpt/IniFile.h similarity index 53% copy from ext/CrashServer/CrashHandler/CrashHandler/stdafx.h copy to ext/CrashServer/CrashHandler/SendRpt/IniFile.h index 4ebeb8166..db4cc6d82 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/stdafx.h +++ b/ext/CrashServer/CrashHandler/SendRpt/IniFile.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -17,16 +17,21 @@ #pragma once -#include "targetver.h" - -#include -#include -#include #include -#include -#include -#include -#include -#include +#include + +class IniFile +{ +public: + IniFile(const wchar_t* path); + IniFile(HMODULE hImage, DWORD resId); + + CStringW GetString(const wchar_t* section, const wchar_t* variable); + +private: + void Parse(LPCVOID data, size_t size); -using namespace std; + typedef std::map Section; + typedef std::map Sections; + Sections m_sections; +}; diff --git a/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.cpp b/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.cpp index 26995c52e..d480efb19 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.cpp +++ b/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -46,7 +46,6 @@ LRESULT CSolutionDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL { LRESULT res = Base::OnInitDialog(uMsg, wParam, lParam, bHandled); GetDlgItem(IDC_QUESTION).SetWindowText(m_question); - SubstituteText(GetDlgItem(IDC_QUESTION)); m_Quest.m_TextColor = CDC(GetDlgItem(IDC_QUESTION).GetDC()).GetTextColor(); m_Quest.SubclassWindow(GetDlgItem(IDC_QUESTION)); @@ -61,7 +60,7 @@ LRESULT CSendFullDumpDlg::OnSetProgress(UINT uMsg, WPARAM wTotal, LPARAM lSent, if (!m_progressBegan) { m_Text.LockWindowUpdate(); // without that CStaticEx::OnPaint doesn't called ??? - m_Text.SetWindowText(SubstituteText(CString((LPCSTR)IDS_SENDING_DATA))); + m_Text.SetWindowText(m_translator.GetString(L"SendingData")); m_Text.LockWindowUpdate(FALSE); m_Progress.ModifyStyle(PBS_MARQUEE, 0); m_Progress.SetRange(0, 1000); // 1000 to make moving smooth (not less than pixels in progress bar) @@ -89,9 +88,7 @@ LRESULT CAskSendFullDumpDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lPara m_Details = GetDlgItem(IDC_DETAILS_TEXT); m_Details.SetEventMask(ENM_LINK); - CString text((LPCSTR)IDS_PRIVATE_INFO_TEXT); - - SetDetailsText(text); + SetDetailsText(m_translator.GetString(L"PrivateInfoText")); return 0; } @@ -158,8 +155,7 @@ LRESULT CAskSendFullDumpDlg::OnClickedOKCancel(WORD wNotifyCode, WORD wID, HWND { if (wID == IDCANCEL) { - CString motivation(MAKEINTRESOURCE(IDS_MOTIVATE_TO_SEND_FULL)); - if (IDNO == MessageBox(SubstituteText(motivation), SubstituteText(_T("[AppName]")), MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2)) + if (IDNO == MessageBox(m_translator.GetString(L"MotivateToSendFull"), m_translator.GetAppName(), MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2)) return 0; } EndDialog(wID); diff --git a/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.h b/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.h index 45ba2c8a0..5cf95fb1f 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.h +++ b/ext/CrashServer/CrashHandler/SendRpt/SendReportDlg.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -20,9 +20,10 @@ #include "resource.h" // main symbols #include -#include -#include -#include +#include "atlapp.h" +#include "atlctrls.h" +#include "atlctrlx.h" +#include "Translator.h" class CStaticEx: public CWindowImpl @@ -43,16 +44,16 @@ template class CBaseDlgT : public CAxDialogImpl > { - CString m_AppName, m_Company; HFONT m_Big; CStaticEx m_Header; protected: typedef CBaseDlgT Base; CStaticEx m_Text; CProgressBarCtrl m_Progress; + Translator& m_translator; public: - CBaseDlgT(const wchar_t* pszAppName, const wchar_t* pszCompany) - : m_AppName(pszAppName), m_Company(pszCompany) + CBaseDlgT(Translator& translator) + : m_translator(translator) { } @@ -70,19 +71,19 @@ public: // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); - CString SubstituteText(const CString& text) + void TranslateWindow(CWindow& window) { - CString res = text; - res.Replace(_T("[AppName]"), m_AppName); - res.Replace(_T("[Company]"), m_Company); - return res; + CString text; + window.GetWindowText(text); + if (text.Left(1) == L"@") + window.SetWindowText(m_translator.GetString(text.Mid(1))); } - void SubstituteText(CWindow& window) + static BOOL CALLBACK TranslateWindows(HWND hwnd, LPARAM lParam) { - CString text; - window.GetWindowText(text); - window.SetWindowText(SubstituteText(text)); + CBaseDlgT* self = (CBaseDlgT*)lParam; + self->TranslateWindow(CWindow(hwnd)); + return TRUE; } virtual LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) @@ -98,9 +99,8 @@ public: lf.lfHeight = 20; m_Big = CreateFontIndirect(&lf); - SubstituteText(*this); - SubstituteText(GetDlgItem(IDC_HEADER_TEXT)); - SubstituteText(GetDlgItem(IDC_TEXT)); + TranslateWindow(*this); + EnumChildWindows(*this, TranslateWindows, (LPARAM)this); GetDlgItem(IDC_HEADER_TEXT).SetFont(m_Big); m_Header.SubclassWindow(GetDlgItem(IDC_HEADER_TEXT)); @@ -129,8 +129,8 @@ public: class CSendReportDlg : public CBaseDlgT { public: - CSendReportDlg(const wchar_t* pszAppName, const wchar_t* pszCompany) - : CBaseDlgT(pszAppName, pszCompany) + CSendReportDlg(Translator& translator) + : CBaseDlgT(translator) { } }; @@ -140,8 +140,8 @@ public: class CSendAssertReportDlg : public CBaseDlgT { public: - CSendAssertReportDlg(const wchar_t* pszAppName, const wchar_t* pszCompany) - : CBaseDlgT(pszAppName, pszCompany) + CSendAssertReportDlg(Translator& translator) + : CBaseDlgT(translator) { } }; @@ -152,8 +152,8 @@ class CSendFullDumpDlg : public CBaseDlgT { bool m_progressBegan; public: - CSendFullDumpDlg(const wchar_t* pszAppName, const wchar_t* pszCompany) - : CBaseDlgT(pszAppName, pszCompany), m_progressBegan(false) + CSendFullDumpDlg(Translator& translator) + : CBaseDlgT(translator), m_progressBegan(false) { } @@ -172,8 +172,9 @@ class CSolutionDlg : public CBaseDlgT CStaticEx m_Quest; CString m_question; public: - CSolutionDlg(const wchar_t* pszAppName, const wchar_t* pszCompany, DWORD question) - : CBaseDlgT(pszAppName, pszCompany), m_question(MAKEINTRESOURCE(question)) + enum Type { Read, Install }; + CSolutionDlg(Translator& translator, Type type) + : CBaseDlgT(translator), m_question(m_translator.GetString(type == Read ? L"DoYouWantToReadIt" : L"DoYouWantToInstallIt")) { } @@ -188,8 +189,8 @@ class CAskSendFullDumpDlg : public CBaseDlgT CRichEditCtrl m_Details; CString m_url; public: - CAskSendFullDumpDlg(const wchar_t* pszAppName, const wchar_t* pszCompany, const wchar_t* pszUrl) - : CBaseDlgT(pszAppName, pszCompany), m_url(pszUrl) + CAskSendFullDumpDlg(Translator& translator, const wchar_t* pszUrl) + : CBaseDlgT(translator), m_url(pszUrl) { } diff --git a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.cpp b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.cpp index 73b8c234c..fa15fe498 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.cpp +++ b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -43,8 +43,6 @@ int APIENTRY wWinMain(HINSTANCE hInstance, LoadLibrary(_T("riched20")); - // CAskSendFullDumpDlg(L"Sample App", L"Idol Software", L"http://www.idolsoftware.ru").DoModal(); return 0; - int argc; LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); diff --git a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.manifest b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.manifest new file mode 100644 index 000000000..d1834fb6e --- /dev/null +++ b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.manifest @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.rc b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.rc dissimilarity index 61% index 7dfa212bf..14f1134c1 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.rc +++ b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.rc @@ -1,299 +1,234 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#define _WIN32_WINNT 0x0501 -#include "afxres.h" -#if !defined(NO_DBGHELP) -#if defined(USE64) -#define _DBGHELP64 -#else -#define _DBGHELP32 -#endif -#endif -#include "projectinfo.h" -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1251) - -///////////////////////////////////////////////////////////////////////////// -// -// RCDATA -// - -IDR_DBGHELP RCDATA "dbghelp_x86.dll" -IDR_DBGHELPX64 RCDATA "dbghelp_x64.dll" - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_SENDRPT ICON "SendRpt.ico" -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// Russian (Russia) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -#pragma code_page(1251) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#define _WIN32_WINNT 0x0501\r\n" - "#include ""afxres.h""\r\n" - "#if !defined(NO_DBGHELP)\r\n" - "#if defined(USE64)\r\n" - "#define _DBGHELP64\r\n" - "#else\r\n" - "#define _DBGHELP32\r\n" - "#endif\r\n" - "#endif\r\n" - "#include ""projectinfo.h""\0" -END - -3 TEXTINCLUDE -BEGIN - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_SENDREPORTDLG DIALOGEX 0, 0, 211, 92 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "[AppName]" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,214,67 - PUSHBUTTON "Îòìåíà",IDCANCEL,156,73,50,14 - CONTROL "[AppName] ïðåêðàòèë ðàáîòó",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,5,7,201,25 - LTEXT "Èä¸ò ïîèñê ðåøåíèÿ ýòîé ïðîáëåìû...",IDC_TEXT,5,35,201,8 - CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_MARQUEE | WS_BORDER,5,49,201,10 - LTEXT "www.crash-server.com",IDC_STATIC,5,76,75,8,WS_DISABLED -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_SENDREPORTDLG, DIALOG - BEGIN - VERTGUIDE, 5 - VERTGUIDE, 206 - BOTTOMMARGIN, 87 - HORZGUIDE, 7 - HORZGUIDE, 35 - HORZGUIDE, 49 - HORZGUIDE, 80 - END -END -#endif // APSTUDIO_INVOKED - -#endif // Russian (Russia) resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// English resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL -#pragma code_page(1252) - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_SENDREPORTDLG DIALOGEX 0, 0, 211, 92 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "[AppName]" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,214,67 - PUSHBUTTON "Cancel",IDCANCEL,156,73,50,14 - CONTROL "[AppName] has stopped working",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,5,7,201,25 - LTEXT "Sending crash data...",IDC_TEXT,5,35,201,8 - CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_MARQUEE | WS_BORDER,5,49,201,10 - LTEXT "www.crash-server.com",IDC_STATIC,5,76,75,8,WS_DISABLED -END - -IDD_SENDFULLDUMPDLG DIALOGEX 0, 0, 211, 101 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "[AppName]" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,214,76 - PUSHBUTTON "Cancel",IDCANCEL,156,82,50,14 - CONTROL "[AppName] has stopped working",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,5,7,201,25 - LTEXT "Collecting more information about the problem.\nThis might take several minutes...",IDC_TEXT,5,35,201,23 - CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_MARQUEE | WS_BORDER,5,58,201,10 -END - -IDD_ASKSENDFULLDUMPDLG DIALOGEX 0, 0, 211, 176 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -EXSTYLE WS_EX_TOPMOST -CAPTION "[AppName]" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "Send information",IDOK,87,74,65,14 - PUSHBUTTON "Cancel",IDCANCEL,156,74,50,14 - CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,214,67 - CONTROL "Do you want to send more information about the problem?",IDC_HEADER_TEXT, - "Static",SS_LEFTNOWORDWRAP | WS_GROUP,5,7,201,25 - LTEXT "Additional details about what went wrong can help [Company] create a solution.",IDC_TEXT,5,37,201,27 - CONTROL "",IDC_DETAILS_TEXT,"RichEdit20W",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,5,96,201,75 - PUSHBUTTON "Details >>",IDC_DETAILS,5,74,50,14 -END - -IDD_SOLUTIONDLG DIALOGEX 0, 0, 211, 92 -STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "[AppName]" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,214,67 - PUSHBUTTON "No",IDCANCEL,156,73,50,14 - CONTROL "[AppName] has stopped working",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,5,7,201,25 - LTEXT "Solution to the problem has been found.",IDC_TEXT,5,35,201,8 - LTEXT "www.crash-server.com",IDC_STATIC,5,76,75,8,WS_DISABLED - LTEXT "Static",IDC_QUESTION,5,49,201,8 - PUSHBUTTON "Yes",IDOK,103,73,50,14 -END - -IDD_SENDASSERTREPORTDLG DIALOGEX 0, 0, 211, 92 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "[AppName]" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,214,67 - PUSHBUTTON "Cancel",IDCANCEL,156,73,50,14 - CONTROL "[AppName] has encountered a problem",IDC_HEADER_TEXT, - "Static",SS_LEFTNOWORDWRAP | WS_GROUP,5,7,201,25 - LTEXT "Sending crash data...",IDC_TEXT,5,35,201,8 - CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_MARQUEE | WS_BORDER,5,49,201,10 - LTEXT "www.crash-server.com",IDC_STATIC,5,76,75,8,WS_DISABLED -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_SENDREPORTDLG, DIALOG - BEGIN - VERTGUIDE, 5 - VERTGUIDE, 206 - BOTTOMMARGIN, 87 - HORZGUIDE, 7 - HORZGUIDE, 35 - HORZGUIDE, 49 - HORZGUIDE, 80 - END - - IDD_SENDFULLDUMPDLG, DIALOG - BEGIN - VERTGUIDE, 5 - VERTGUIDE, 206 - BOTTOMMARGIN, 96 - HORZGUIDE, 7 - HORZGUIDE, 35 - HORZGUIDE, 58 - END - - IDD_ASKSENDFULLDUMPDLG, DIALOG - BEGIN - VERTGUIDE, 5 - VERTGUIDE, 206 - BOTTOMMARGIN, 171 - HORZGUIDE, 7 - HORZGUIDE, 37 - HORZGUIDE, 74 - HORZGUIDE, 96 - END - - IDD_SOLUTIONDLG, DIALOG - BEGIN - VERTGUIDE, 5 - VERTGUIDE, 206 - BOTTOMMARGIN, 87 - HORZGUIDE, 7 - HORZGUIDE, 35 - HORZGUIDE, 49 - HORZGUIDE, 80 - END - - IDD_SENDASSERTREPORTDLG, DIALOG - BEGIN - VERTGUIDE, 5 - VERTGUIDE, 206 - BOTTOMMARGIN, 87 - HORZGUIDE, 7 - HORZGUIDE, 35 - HORZGUIDE, 49 - HORZGUIDE, 80 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_PRIVATE_INFO_TEXT "Read our privacy statement\n\nReport contains application state at the moment of failure\nincluding all memory. Report may unintentionally contain\npersonal information, but this information is not used to\nidentify you or contact you. For example, a report may\ninclude your name, part of a document you were working\non, or data that you recently submitted to a website. If\nyou are concerned that a report may contain personal or\nconfidential information, you should not send the report." - IDS_SOLUTION_URL "Do you want to read it?" - IDS_SOLUTION_EXE "Do you want to install it?" - IDS_MOTIVATE_TO_SEND_FULL - "This problem occurs first time and [Company] really need this report to fix the problem in a future version of [AppName].\nAre you sure you don't want to send it?" - IDS_SENDING_DATA "Sending collected information to the [Company].\nThis might take several minutes..." -END - -#endif // English resources -///////////////////////////////////////////////////////////////////////////// - - +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define _WIN32_WINNT 0x0501 +#include "afxres.h" +#include "projectinfo.h" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) + +///////////////////////////////////////////////////////////////////////////// +// +// RCDATA +// + +IDR_TRANSLATE_INI RCDATA "translate.ini" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_SENDRPT ICON "SendRpt.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_SENDREPORTDLG DIALOGEX 0, 0, 220, 93 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "@Title" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,226,67 + PUSHBUTTON "@Cancel",IDCANCEL,165,74,50,14 + CONTROL "@AppHasStoppedWorking",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | SS_NOPREFIX | WS_GROUP,5,7,210,25 + LTEXT "@CheckingForSolution",IDC_TEXT,5,35,210,8,SS_NOPREFIX + CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_MARQUEE | WS_BORDER,5,49,210,10 + LTEXT "www.drdump.com",IDC_STATIC,5,76,75,8,WS_DISABLED +END + +IDD_SENDFULLDUMPDLG DIALOGEX 0, 0, 220, 101 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "@Title" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,226,76 + PUSHBUTTON "@Cancel",IDCANCEL,164,82,50,14 + CONTROL "@AppHasStoppedWorking",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | SS_NOPREFIX | WS_GROUP,5,7,209,25 + LTEXT "@CollectingMoreInfo",IDC_TEXT,5,35,209,23,SS_NOPREFIX + CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_MARQUEE | WS_BORDER,5,58,209,10 + LTEXT "www.drdump.com",IDC_STATIC,5,84,75,8,WS_DISABLED +END + +IDD_ASKSENDFULLDUMPDLG DIALOGEX 0, 0, 221, 176 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_TOPMOST +CAPTION "@Title" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "@SendInformation",IDOK,96,74,65,14 + PUSHBUTTON "@Cancel",IDCANCEL,166,74,50,14 + CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,226,67 + CONTROL "@SendMoreInfoQuestion",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | SS_NOPREFIX | WS_GROUP,5,7,211,25 + LTEXT "@SendMotivation",IDC_TEXT,5,37,211,27,SS_NOPREFIX + CONTROL "",IDC_DETAILS_TEXT,"RichEdit20W",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,5,96,211,75 + PUSHBUTTON "@Details",IDC_DETAILS,5,74,60,14 +END + +IDD_SOLUTIONDLG DIALOGEX 0, 0, 220, 93 +STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "@Title" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,226,67 + PUSHBUTTON "@No",IDCANCEL,165,74,50,14 + CONTROL "@AppHasStoppedWorking",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | SS_NOPREFIX | WS_GROUP,5,7,210,25 + LTEXT "@SolutionFound",IDC_TEXT,5,35,210,8,SS_NOPREFIX + LTEXT "www.drdump.com",IDC_STATIC,5,76,75,8,WS_DISABLED + LTEXT "@DoYouWantToReadIt",IDC_QUESTION,5,49,210,8,SS_NOPREFIX + PUSHBUTTON "@Yes",IDOK,110,74,50,14 +END + +IDD_SENDASSERTREPORTDLG DIALOGEX 0, 0, 220, 93 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "@Title" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_STATIC,"Static",SS_WHITERECT,-4,0,226,67 + PUSHBUTTON "@Cancel",IDCANCEL,165,74,50,14 + CONTROL "@AppHasEncounteredProblem",IDC_HEADER_TEXT,"Static",SS_LEFTNOWORDWRAP | SS_NOPREFIX | WS_GROUP,5,7,210,25 + LTEXT "@CheckingForSolution",IDC_TEXT,5,35,210,8,SS_NOPREFIX + CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_MARQUEE | WS_BORDER,5,49,210,10 + LTEXT "www.drdump.com",IDC_STATIC,5,76,75,8,WS_DISABLED +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_SENDREPORTDLG, DIALOG + BEGIN + RIGHTMARGIN, 211 + VERTGUIDE, 5 + VERTGUIDE, 215 + BOTTOMMARGIN, 88 + HORZGUIDE, 7 + HORZGUIDE, 35 + HORZGUIDE, 49 + HORZGUIDE, 80 + END + + IDD_SENDFULLDUMPDLG, DIALOG + BEGIN + RIGHTMARGIN, 211 + VERTGUIDE, 5 + VERTGUIDE, 214 + BOTTOMMARGIN, 96 + HORZGUIDE, 7 + HORZGUIDE, 35 + HORZGUIDE, 58 + HORZGUIDE, 88 + END + + IDD_ASKSENDFULLDUMPDLG, DIALOG + BEGIN + RIGHTMARGIN, 211 + VERTGUIDE, 5 + VERTGUIDE, 216 + BOTTOMMARGIN, 171 + HORZGUIDE, 7 + HORZGUIDE, 37 + HORZGUIDE, 74 + HORZGUIDE, 96 + END + + IDD_SOLUTIONDLG, DIALOG + BEGIN + RIGHTMARGIN, 211 + VERTGUIDE, 5 + VERTGUIDE, 215 + BOTTOMMARGIN, 88 + HORZGUIDE, 7 + HORZGUIDE, 35 + HORZGUIDE, 49 + HORZGUIDE, 80 + END + + IDD_SENDASSERTREPORTDLG, DIALOG + BEGIN + RIGHTMARGIN, 211 + VERTGUIDE, 5 + VERTGUIDE, 215 + BOTTOMMARGIN, 88 + HORZGUIDE, 7 + HORZGUIDE, 35 + HORZGUIDE, 49 + HORZGUIDE, 80 + END +END +#endif // APSTUDIO_INVOKED + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define _WIN32_WINNT 0x0501\r\n" + "#include ""afxres.h""\r\n" + "#include ""projectinfo.h""\0" +END + +3 TEXTINCLUDE +BEGIN + "#if !defined(NO_DBGHELP)\r\n" + "# if defined(USE64)\r\n" + "IDR_DBGHELP RCDATA ""dbghelp\\x64\\dbghelp.dll""\r\n" + "# else\r\n" + "IDR_DBGHELP RCDATA ""dbghelp\\x86\\dbghelp.dll""\r\n" + "# endif\r\n" + "#endif\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#if !defined(NO_DBGHELP) +# if defined(USE64) +IDR_DBGHELP RCDATA "dbghelp\x64\dbghelp.dll" +# else +IDR_DBGHELP RCDATA "dbghelp\x86\dbghelp.dll" +# endif +#endif +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj index 2389c46aa..b075eb343 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj +++ b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj @@ -29,8 +29,6 @@ Unicode - Application - Unicode true @@ -40,11 +38,16 @@ - ..\..\external\$(GsoapDir);..\..\external\wtl\include;..\;%(AdditionalIncludeDirectories) + $(GsoapDir);../../external/WTL/Include/;%(AdditionalIncludeDirectories) + NO_DBGHELP;%(PreprocessorDefinitions) + true version.lib;%(AdditionalDependencies) + + NO_DBGHELP;%(PreprocessorDefinitions) + @@ -57,50 +60,63 @@ - - {d0d57ca2-a972-47fe-92c8-63a3caaf0e93} - false - true - - - {1912dda2-e7b9-437f-ba8e-da2c1c2d79fa} - false - - - - - - NotUsing + + NotUsing + + + + + + - - - + Create + + + + + + + + + + + + + - + + - - + + {d0d57ca2-a972-47fe-92c8-63a3caaf0e93} + + + {1912dda2-e7b9-437f-ba8e-da2c1c2d79fa} + + + + diff --git a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj.filters b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj.filters index 7183f244c..a5f37ce3f 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj.filters +++ b/ext/CrashServer/CrashHandler/SendRpt/SendRpt.vcxproj.filters @@ -13,20 +13,20 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + {164f800b-e886-43c1-847b-678c2b192e59} + + + {50e41c83-19f7-41a5-9da5-cee75f5fff76} + - - Source Files - Source Files Source Files - - Source Files - Source Files @@ -39,20 +39,35 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + Header Files - - Header Files - Header Files - - Header Files - Header Files @@ -68,11 +83,47 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + - + + Resource Files + + Resource Files - + @@ -80,7 +131,8 @@ - - + + Resource Files + \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/SendRpt/Serializer.cpp b/ext/CrashServer/CrashHandler/SendRpt/Serializer.cpp index eb296af8e..1ddd33fcc 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/Serializer.cpp +++ b/ext/CrashServer/CrashHandler/SendRpt/Serializer.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -96,13 +96,38 @@ Serializer& operator << (Serializer& ser, std::vector& val) { size_t size = val.size(); ser.SerSimpleType((BYTE*)&size, sizeof(size)); - if (ser.m_buf) + if (ser.IsReading()) val.resize(size); for (size_t i = 0; i < val.size(); ++i) ser << val[i]; return ser; } +template +Serializer& operator << (Serializer& ser, std::map& val) +{ + size_t size = val.size(); + ser.SerSimpleType((BYTE*)&size, sizeof(size)); + if (ser.IsReading()) + { + for (size_t i = 0; i < size; ++i) + { + std::pair item; + ser << item; + val.insert(item); + } + } + else + { + for (std::map::iterator it = val.begin(); it != val.end(); ++it) + { + std::pair item = *it; + ser << item; + } + } + return ser; +} + Serializer& operator << (Serializer& ser, Config& cfg) { return ser << cfg.Prefix @@ -117,9 +142,15 @@ Serializer& operator << (Serializer& ser, Config& cfg) << cfg.OpenProblemInBrowser << cfg.UseWER << cfg.SubmitterID + << cfg.SendAdditionalDataWithoutApproval + << cfg.FullDumpType << cfg.ProcessName + << cfg.LangFilePath + << cfg.SendRptPath + << cfg.DbgHelpPath << cfg.FilesToAttach - << cfg.UserInfo; + << cfg.UserInfo + << cfg.CustomInfo; } Serializer& operator << (Serializer& ser, Params& param) @@ -128,5 +159,6 @@ Serializer& operator << (Serializer& ser, Params& param) << param.ProcessId << param.ExceptInfo << param.WasAssert - << param.ReportReady; + << param.ReportReady + << param.Group; } \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/SendRpt/Serializer.h b/ext/CrashServer/CrashHandler/SendRpt/Serializer.h index d10086de5..7c9756c1f 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/Serializer.h +++ b/ext/CrashServer/CrashHandler/SendRpt/Serializer.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -21,16 +21,20 @@ class Serializer { -public: const BYTE* m_buf; size_t m_size; std::vector m_storage; - CString GetHex() const; +public: + Serializer(); Serializer(const CString& hex); Serializer(const BYTE* buf, size_t size); + CString GetHex() const; + + bool IsReading() const { return m_buf != nullptr; } + Serializer& SerSimpleType(BYTE* ptr, size_t size); Serializer& operator << (BOOL& val) { return SerSimpleType((BYTE*)&val, sizeof(val)); } Serializer& operator << (USHORT& val) { return SerSimpleType((BYTE*)&val, sizeof(val)); } @@ -38,9 +42,6 @@ public: Serializer& operator << (HANDLE& val) { return SerSimpleType((BYTE*)&val, sizeof(val)); } Serializer& operator << (CStringA& val); Serializer& operator << (CStringW& val); - - template - friend Serializer& operator << (Serializer& ser, T& val); }; Serializer& operator << (Serializer& ser, MINIDUMP_EXCEPTION_INFORMATION& val); diff --git a/ext/CrashServer/CrashHandler/SendRpt/Translator.cpp b/ext/CrashServer/CrashHandler/SendRpt/Translator.cpp new file mode 100644 index 000000000..884a5016d --- /dev/null +++ b/ext/CrashServer/CrashHandler/SendRpt/Translator.cpp @@ -0,0 +1,58 @@ +// Copyright 2014 Idol Software, Inc. +// +// This file is part of Doctor Dump SDK. +// +// Doctor Dump SDK is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "StdAfx.h" +#include "Translator.h" + +static const wchar_t* DefaultSection = L"crashhandler"; + +Translator::Translator(const wchar_t* appName, const wchar_t* company, HMODULE hImage, DWORD resId, const wchar_t* path) + : m_appName(appName) + , m_company(company) + , m_default(hImage, resId) +{ + if (path && *path) + m_custom.reset(new IniFile(path)); + // if (WINVER >= 0x0600) Use LOCALE_SNAME en-us + // LOCALE_SISO639LANGNAME returns en + GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, m_userLanguage.GetBuffer(1024), 1024); + m_userLanguage.ReleaseBuffer(-1); + m_userLanguage = DefaultSection + (L"-" + m_userLanguage); +} + +CStringW Translator::GetString(const wchar_t* variable) +{ + CStringW result; + if (m_custom) + { + result = m_custom->GetString(m_userLanguage, variable); + if (result.IsEmpty()) + result = m_custom->GetString(DefaultSection, variable); + } + if (result.IsEmpty()) + result = m_default.GetString(m_userLanguage, variable); + if (result.IsEmpty()) + result = m_default.GetString(DefaultSection, variable); + if (result.IsEmpty()) + MessageBoxW(0, variable, L"Doesn't translated string", MB_ICONERROR); + + result.Replace(L"\\n", L"\n"); + result.Replace(L"[AppName]", m_appName); + result.Replace(L"[Company]", m_company); + + return result; +} diff --git a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.h b/ext/CrashServer/CrashHandler/SendRpt/Translator.h similarity index 50% copy from ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.h copy to ext/CrashServer/CrashHandler/SendRpt/Translator.h index a24a2e3de..ad9234dd0 100644 --- a/ext/CrashServer/CrashHandler/DumpUploaderServiceLib/DumpUploaderWebService.h +++ b/ext/CrashServer/CrashHandler/SendRpt/Translator.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -17,15 +17,25 @@ #pragma once -#include "generated\soapUploaderSoapProxy.h" +#include "IniFile.h" -class DumpUploaderWebService : public UploaderSoapProxy +class Translator { - std::string m_serviceUrl; public: - DumpUploaderWebService(int responseTimeoutSec = 0); - std::wstring GetErrorText(); + Translator( + const wchar_t* appName, + const wchar_t* company, + HMODULE hImage, + DWORD resId, + const wchar_t* path); - typedef void (*pfnProgressCallback)(BOOL send, SIZE_T bytesCount, LPVOID context); - void SetProgressCallback(pfnProgressCallback progressCallback, LPVOID context); + CStringW GetString(const wchar_t* variable); + CStringW GetAppName() { return m_appName; } + +private: + CStringW m_appName, m_company; + CStringW m_userLanguage; + std::unique_ptr m_custom; + IniFile m_default; }; + diff --git a/ext/CrashServer/CrashHandler/SendRpt/dbghelp_x64.dll b/ext/CrashServer/CrashHandler/SendRpt/dbghelp/x64/dbghelp.dll similarity index 100% rename from ext/CrashServer/CrashHandler/SendRpt/dbghelp_x64.dll rename to ext/CrashServer/CrashHandler/SendRpt/dbghelp/x64/dbghelp.dll diff --git a/ext/CrashServer/CrashHandler/SendRpt/dbghelp/x86/dbghelp.dll b/ext/CrashServer/CrashHandler/SendRpt/dbghelp/x86/dbghelp.dll new file mode 100644 index 0000000000000000000000000000000000000000..9f52a5d419979f200969c821a1859a3d0ecc7fa1 GIT binary patch literal 1213200 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

P;}Mm!=bAfsP3~p0jz}qXUH#JdP^@PI+g1 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 dS#*=Uovei%uw%o*j1Bj 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

@XU85hMI$ma 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 literal 0 HcwPel00001 diff --git a/ext/CrashServer/CrashHandler/SendRpt/dbghelp_x86.dll b/ext/CrashServer/CrashHandler/SendRpt/dbghelp_x86.dll deleted file mode 100644 index 62d850863e6a377d5c2534142f07bd528f9d524f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 1080656 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

+65w8gthC*=TXi zw7{nVUcnhkh6l4q&@^ZhPWiR?@rt?r!N%JN1~m%8fZIzL8lOowu(H%$Y>wb19JhWm zFN<0T_+xF*B*nMbO6;*<7Vu(kS^EMf6U7o|vqZHo^p#U&AxXm%QQWo)PZChKHt6huH9th%`XECz!o7HTDfqRh~G%!^-yv%b2qa#80?G+RvYn z2NeU5S#c|Q02`ylh-h$Tu@&UB#O09MlID_WZfiFzq<*&c!vGPuOvMWigZy~Q3d2O1tB#nRdrt>Hm4N?2bwrsfx{xY2{Gxn6>=pblUO9iHJPwV-4}Q z66S9ulUX-b!9%kshr+g>(G(O$6{(;zR>R!oze4UsB z{tjA*)P-ZcwLW+3Qsc9z*5{46cw;t{v1hikZXC_Ik9EjHtWW66VHbS{?l%!5?P=-3Ld zJ%3Mb8JjLcQpdlZ4a2v zIQ0E}i4ZT#JkNZOdEyXp(UUdcqHu#z6wq$_@8MzAz^1>-8N}-j+EGL|Bl;;Gf$-Q_ z6x0%b!p#yyM-Z(8xdr|^mLfW62C@mcZ$UqJM?%s>{RB|8!Qj2Xx= zs^YjLi7wXkgE`V8KR5KKyF5~-6my41IWFI zhMU{;9~Bdjb%=%%CjIY<2}mMC(Z>*d#0=z%h<*vt&l^C56AvzR4}d*mE|7wQkj+MI z-@)gnVQ5iunP>NjkemgnnP9JTKGl>lA*Oe!2UPlK=V$ zf0#X5)8y>_1GPwNYJAIcibaK7h_7(K(h0^=f`)q|Z;>e>% zJ3m=rEf90eY`K8;@HEsdR45a116`iE7~V`fbFewYkUDt`$x}VFhkZ2kXiG2Wtqzbg z6iagqyVckX-H$GxH%w;Ji~gYgM308cS-N%USa7h{Y#hsjIlaURBP3vqTTnMHxDcY& zg1TgIp?;xXY-QvgP>v#6$MuIXAz%83Y8y&C@p;TV%GCN&ysufbogcuWb*l`SPYus- z?o$2Twa%2X+T$Qppl?r~*2|QMGBoZSMG54<>4L+nMz-hQyQcWI^%EKVwJ)lf47`IhL@tI6BsonoL=|~@wx+iAXI@~FLMM) zgs4ass^M}pdF+e^T9?a{V+~So@G!~d@ZB2ft~vA>|6Gj{E95Nw$%Y1!R+E9nnG&X1 z!&HC28dy9PB5)ZcQVMU4C#aCa`l%+8QWuaoUKW3H32vPcbSk%~rnVul@iMNfh8wm7 zz}+WUjz8fP2|5xr!pgvK3$62~fSEt7%~qbeeC@mRdIt*$r3ec?cU6 zRNYPZTePjVNQ`O5?dI8bNXJ(Np^87F zEv0h&$hpAuaFGCgC4<|;cE=RmKS>@*?;#xb7#<{IpF`riMT)rjf`bR+=8HS)Ea)b9 zArfr8h`}8fEk7Az-*V>8eGfk4C5{tx9KT1|GiwBbmrywU$zlC{`!iZA66>LmOYsGi zq5%81;u=6QH||lmw*}!`HOqziLfTGKRd6~t7aYjflk^=ljh&l{FdPnkoC9cmzHc|r z_o}@17rZvbSOU#+dt#+c=o)`I(WEtH1B~P(P`U$&4@_hd8rMXMve!iN7+|cQB%~1= zgYMPVPt4j?)G$zX={;tmJVJ7_*`WSDz40i7Cd?mjN)3M#pO~ndi1liJnkYn)a8C$H zKP;4xPC+m+4x@xn(m*t~#p;Eli|=zo*vl75uD^O52zP7$z~D|A&vhAIq-a=)a^sCA zbZfgN3Y%j>Zube20L0kn)t;Pap~BjUEJsWiMOAS zx)7~G$X6Hrx>M&9w< zm0RI8jkjKmx62A)d*$pA=@}1tia!Ht3je9PQ|*c#SWw|FxOEDFpr!(PqNvC6jP)O> z5|tydOX<^=Y6<*kWf&mNZiQv>dzwsTYd-{If7~{{xgkH3o5m0D*_=+ zVN|?5l5GgMvb{QHiy1TINgu~FNtGkh?H)PCMVZlz+|ci+NTL*kklFryf*9{9BoS8l z&t%zFZG%A?3fMdecBkKp;ejQC0}{&19zY*t=p};8g96^*?+g=kwY7x1ZQyrkDE^M~ zY-_`);t%%|6GWhp77pkG*V-iXyFA9JNMBI<%sQjm8@SqjR1xlrpKubD@j2d&1pgeukNW|80Ui_Z0;E;{*%Qe>DL_N3qO3 zYjv96K#^&ct>auH0q(N`Y_$S>ngODi#Rj#f`e)ko&k7sVocD0O+C|^P744l1nM1Hw zlQg0Qw6B(A<&=pKCoR$l-*mHy%c->dd$o4Ad~DLwTp(BRUbivrV0Zfqw`lFFP;)*) z0vYX3m$O$|mLHxTFAn{w;0m{~ik{3a$&VvxHRoyryxDGUm{&as`(T$E?t%wIe>W?? zdy)Zn*3lm3GC`P$VpABxQHgf{I06zWc@1dj7I!W_P@8VK{oA398gJ^3GunG@Q1Db{ zk)HlXwWio;M6Hbl_*(A8*yuOf}G(w#+#I9ZCUiNdN%wj~U8)oaRJ?91Q zhy4oe-4@XNO{I=fr1r$vER*NV?Eh^X7(g?Mid^uBEPH^8a|&?-{HN-EBMzeMG5m!= zObUTyYTx-Rvlo#52d^|F5TEYAEgKQrHWn3bWn9lNuKYoDY&~x>>djln-Vt?tnd?A& zdL7qs1hG5ENVd^>Qc%MUYEXwR@M4&I63w9GF{WaSO>&R6C$RbT zV*aNNi25Z>4sg})Ryq_bE#~O7*mGWA(YVRUG1Tr4u77Xypo8cUvnsU@Tn#cPS%%+RF&sxlJ?77V|$&Kr+HnGn4KKAz=b;6X$BAL zP}-rN6wXr^7sqI0UPVR&{dMOdKa==IsT@WaK`0aABS;%dU+lcx}4OJ8z6cO;c~UT3D1I2|ohTQT!Ov@JQ$ z9V4KZgtY&RNcWT+(@-KZ{=`|Rh$!BEX=k3s60`lh={AF?y1F2DtX~Bmten*%Wc8Df zb>h){z5|W*FNmdU(`6fI^Wz%cR48o^Y`R+2%jP*e;(bGx*hg=b##a~fSKgvsT>sBz zriO`+o23@WWz#XZ!Y*~&YW9H9m%(YNS|}ZuM=yng;fC^Be>bhP5JCA3yv%=a5$Smk z%I#|$rd<<@Xuo&J4Rw!p#4c4aVl6!rf*M@E*lO(7{at(N!qVHZWkmSYZIyqyp#!&O1M>aDOGoC5X}*+<-*O%I;TK2$z$%i{L9&4Sx%#x3_m#yL`64Z=o>=imqnc1yaex~mm33#L62b<8ErTrf1pZ7Wz-xGy??k8EGYSz>k8TUdlpjkS z=Xo8LlZ5MFdXr6e#ogLt+{Sx!Gl}HXB|=z)xv|l4Ga-|4Y4qaMBJb)Lj;6YFbe zO%hG2J{y03qi6RCn1OpU&P);f)Ro4M+mrs%49-j5g7_CMrBM?h8ozLm0LACyuM+b{ zIWa@tBRH$3XVs83K7XGMqgPMp6$uCQ5O%f?HRpKRBdXa9uNVh1` z9f%BChOn@enYYyLm_omq^n0Ctio^QPX19LBhVgOAw}XD0>DNTRuh4G~$`<7LXUi9< z|FahqI5^4lis8qK{DJ=2-f=gH@P?9Dr>F3Z<9Skvwtvt z!b|fy(@K-0wg5G3K%?&xHP$LLHlQ(Pk0%N*1}WpAET_0XO#v zA@G8wq1JU;Z?DdAz>*}#0ZYQ%v|(=kPLBmklI)9E(gQ5=mF{S;ZTI(WZR~p}T1Otjh<#OrSu%Z0NMJww4EEKFf$6s5YsxK1@TgO0S^tVd)v!QlRf>e;C+Hqq=-R? z*NaMn+BroL@0I-;S;7N+{HxWRXOol?>Ks0#jjS|*b7Q0p1YoojnPZMmi~9r;*Ay); zDK=~>4QXHDYNA(($UzbL1rh1S2;D@x&%xm*?3pFs8l$hyfzPWg&h*bCDXyTy-% zb^N;`bFKmxDh&)5y9~F;Q{?l2r>Wf5pjP$YI0w>x{Va9z57A{+SFx#W$Xw>}NxX?O!t)hJkMWHc`l%pthr=_S`%+SFX+0Mbq}`5 zjD!1;kp{-qp%0rIU!OX52Jr#s z#27IkoN`E9SY8i4U-q)c@mSl$ zf|mW@l0)ivL@-n3zfLnPi-UHUxqtZ+A6!aofMlCS#!0Sd(36)J@GczT;D*{3j;2{riL}#z8!$? zyrIWV2ZCC~XIQVpXLkkZ|IO@h=&`c_JS_lT+nKR8;-!V z`0*)0ZNpmH^n^9|77l2Ccn42~;DQo#RRb9{qC8-CtPP0Q1p9-=i=pU`NR^ppe8aEO z0N$$xv2S#VpfjY}0+Aup7%s_tf*XW$uwJzu+B263(z-u380j|W#W`@e7uS~wdLW78 zu%UR`#*ZEjDNn4VMKiX(tAUg@kF%VyWD)3CcMO@G%)O62 zrdYQOLLY_4-U4e&1)CkYe~?>VLv<4M}zbt%R6OYk9pvZQ7?XmWo0~oP0U*Ppr(v z-b)Etj>)a?j|@~2I}e6T7BNHZiPBE}gtGUXG0pg|g9X7+< zBJGPy(7^IkD^m5G-k+oG|FBH99YA!idPoXspFrsfltfmqKx>#?1)d zc~wp|v8${ZBYVvBO@Bv0W2=6_=Rl>MS-iDXm$A4u$w);z0^0IvkV@u2@Qhxrjz@ro zi^B8A*YO5EYyHF_edA-vX-bqARp^u8H6dzGtd`MK`)z$2f zSZBpCa}&%?;E53Zk(n4-X(c3yjN&#yK@n9Q&>mT47gsUV6ebHzuB~_FKS9i^e>C*r zz6jg4vL@1CzvASLR?!LfF#qM_Fp*`rc(72H=S^+~d3v8;WKn!t>o2vjh-`0!pn%a5 zfeKW&SkgLz^0qC>h0xX#ics7Q2^}rX{}QNZUvUxJ8W5`-v0NP9{6g2~vIO#ylB>xO zy517Nd8II9DjgN2eM2*_u^3c&$Llg|sI+KEh~!~!{2g0uc(8E-_={#s@;NbIyif8O zGA$MuArNca4&UHUm>dG>Nh8|9M0Z@|cvh!Zg;^dMY)|yb17^7hVlD|hVWg7uxl^r( z3TaTrVmEGN5%;jP#{*2@^j{RCxOTmsS4>UagiO0l=KV3YHOIK-=-BjOFvIW3WkNn5 zg)tE{R&9ww*J2(uYxQ9ztdw19eMvz3&O|JAeJpqg!1m08Sny%e5!4~zS$aaO0Sl%) zmFIL8xh7wp10q&t&1GFJiQZlu`gjuj6g(HCzN7JacSD}#NbX-t$`#=+=h)Ej@JRVL zQl_VWGjDp(^NR1%faeweB@_x5hv>5ipOf%85ub(l^aeeL!xKWD!@|8uFj7Ha*WM5* zr#+=M^=^=H&Jlc=1WN&*>c(0Z87#NR`L6h@@Z}}c`dYc%-9rSk?C$ya7#txO>9hdA zAw4)9?OJmHdtToKUj#I$FU1w463%pBWG32v8krCdM4rvfba+>VgI(QS&Un-~fJd`A zS7r`hcq)hWHk)AP)&6O_(CLx&7WjZThas-C#9#b8Qzz%p|1(_w@ZrbC)rzT(pXcy) zM&)$u3UMl_?f^E`XKNWN966lGT#lPt?t*fMxE#=Q9HF2FUjP?9zm)!Uh~tmQDbFuo z#l3&E(XGZ@)ouJx%Ddn8>~6!6WnO;YH7?J2SL8j@dDo}kgE;WFh0JSq6myPN^NCmj zCt?BZ=OPCm+-}lMLIgMI{|4{!uAsQ4@ zh)=!k2-6ylA^|P=xOjh3FY*2m4j7sCG<6MliHZT_zE_8bPrWLHgYqO&o2$cUnDhJT?t)`~CGqkuN zHIPanH5iGQQw`Eb@0IxI&HSEFR8NsW{T}j_L zU00&XkmM;n@0)naTkoTzpRcp>lyhdD!W-hJL=JJzLqnx%tv%wMuB)v3Sw?h2Zlrkk zbY1&y#K$}lg<>@rT&DY!JgOPxj*F^hrcXxJKE_4uV@W2j7N&(I{65y!Om#u->3*LL zD&9x#X%d_&Am!J>WbTm+3WU;`7)Zj#1!}6BN%r*Lu;&43Q?1Add0!|*5CL(o6pc2R;}Qj*nGE}m}UG_OTKgH$hfb#Q2TbJ;th!2ubOBxEQ6*PbiDgs!K+;)@{hrtGD`f-n zYxy!y67^+|iYfshsN-g<)fHy(V@$=^rNhN#R4x#yG`Bf(gZ9h)ykJ~QI~xJ0M*!** z&^0DhDaP=Y^ER9*iC+DDZT|NHX#btlpPJF1ecApDh%S@b*Ln5Q6p6bi+hwvxAG*ZI z8rfs%GJ&P`z5n8gk+;j>)&cWDIj`P-G#hK)_i8BsGN$uJ_pnk_wsR9 zQUrM5uGu(MC`$Pxh!fO8l5I@2xHGTlnCz99fQ3Y&7sq7p-;K%qJeUZDt?H^iD{yeo z=B3U(=|mtHS#7GnD6>Zlwh41DxPLyP%}^BW!MPv%yyJTFk-%C-yZvXZnkXg_4*Km# zw|RiEPZ#|VWAPs@e24*)FkP45t6&V2u#&xmmF!na^?3dh(##6hoygKlf66u(lf?of z=IlXB$5l!;&F2x+g61=_1@f4~(gH!ipWSpJeR#ajWvJ*L#y(M;|FJib6~D6?Hbc@? zc0JTfhj(EIM2q2g)i+dtaMCv@m0?qo{z2X};nZ?47#T35egVT7Gd@jyMHg5PMsST$ zw_KEK%$%6z8bemDA(-Tr-)9-U*V><%wPJ7wv`dG z#qN+L#Hoj<{HaC8kp}nBj2kb+PoK>_uUNV)a_|~H*2)xCG*W2;+94 zc%B1|seH+iYukl0jbuw@SvIBx_Xk?)I41YdBaN#n*sdbBAT}NsOtvAb0z+Va>npIf zj&?ahap+aI0R^~zr~iT%I1`yRBIAgYk>zC}zBda_9S~-`! zLO)L`SaOxP(W&l2N=Tcs$mqXal_=V>^6K2PoKHC}ewO2PG;zNtL5Yi>=v;TJfH`RzCaPdQ*14Mvyoy~OU^X=2((C1&2iy!)YJks#d&)-9u$>@<*+`$rOJm|rc z7Y9Jw(IC^=5E^PZ8@lmhoDI#9lPXnm-T>LkdFrcR8|igyV+6m<2)>D{TTNw@DY>iM zl(nY%?5nt;_}*VI)wfkp((|a)bGTt5Vs^|k#n_YMOVN;G{C(_f1u@z_!DwH=X|6o% zC6=(J!rC`poN-=&a!FqsTq671;>SzW*va@W6}4E@SMPn!aca_EljF-^G&;MSX~9fD zWjr1`T@h4^QD^9RBvN#lIAk_;AF=ZWGd7u<4D{#nn21h`c+DA9uEOvj>N(tz{K9ausYs3&UuSY#mCl2@ zlDlf;81VNbw_`kb4u{Y3G(@lQ&A4jS*Eh0@RbMZ={?t-STvgR=sACt8jV6qZJO_ax zopaTIq3>7&&J}Yv{RHQNYNNNQJwh?B!hrGJ7n!B;b4Afhz|D4EW86=7g|zy+hKHHk zuX?~ZMZEdC+*3rk-r>1vWBorVm?_ZoZ)Xj;=%%ubq|%EB0}RfPE`GS z)S}et2dM~O)y<4;=S#io2p5$@fyf#YUL=O?r@Hoq;O{9CFr|1?{timnAJQ5tSn#Wi z)R-GY_1R++B5reBx|JAkx`iEk?-6%?#VudhbBVw){2k?a=6+;q#m8`Y>w4Ahh&S$s z^g4L08J^FXB?}>R2nb<>xE;Gpv-VUlWF?bFkjWbx6>mIbiI$rPk#I*?^=(tjWo-Wh_oqyw}+ zk7I?27Nk9#x-%%>zdjgmJcw=7ARAB}Oop2!Nmc&=BIrS?^-KWwK&`F2M`h~Nh7ZIR zs=nqV`yEhI`0IH+=m-f%1fJI$?0CYMgY~w6o`H6Cnu!=iIM8mEm-qb5YGINuaW@^q z-@EIp=4`q-8}>A(Y&dpZ!^FK^Pq@A+>NmpIdz$fn9N+jfO3w8(-)nq_?p=7VrlDlX5ic134Fpg!wN+6mu>4Ye6Vi@e9z#V$yVIj zjvvF{2~W7&69EeBrW!E;5pKB_s<~#ipG+ZwDBsMckwlH4D->C8rdE27VnMIj^Ga|M z^%MQyFcBp^uhbU?M7&qVdu03s89!deyE*=F{aB7a%$|vxv73t2n5wLzOz{&XBCRMG z@tV@y887UpE$b2u8?CvXX#0-}2072&Hgk@2QpwKUvJ^Xp{5W%0vbeIS*9tE)4_9lL z>w@72Bl{}M7*2`ow&b2*o%4M2q7=3W9ZE8c=L6E~&Pm>{`cD$uzwKJxbfe|@9d^gj zXY7vI#FqZ>wD=#tYt*a{*%AB0cwZ^@rjgZ^7VawE62P4+A@7glg%*d?{a6q9I#Zw$ zhtvI{ah7#>jtLl+yaH^C0+F(uI^wTlQ$sr!vu9>nlCV+-B5rf;k#}847`S}n4dU4j zbq9*nx_{iV+T)#{zOQT z*m#?HWbSbiqdkYw?wnz5q{;$DC~`EXviK2fgv5QXLo)c+i znXmBx>m4pn^?nJSyJbz+Fh=&w=Z&JOv$f+v5PHdocCQx62RXSaCprEqk`=xM5`PWh z(J(!5i+x+9#GF0%Oba`>GKRgAVJqg$c}L2)>`18-BW3Uk#TY3=S3oH=XqGSJNQu9S zy{QrnGX;2`>Q10R!APG)90|KUuW!R{RhTTfn~vinc(Hcm8AI{cAm=Hu1|AI5Hrd?P*at%Kuzp8Ba z;ktujyp%I2{?o*N?6p|GSnX;4DXS7(IW@vY-Nop*GH)T7ud(9#n2WEE&GaP3^GfSt zBQRkhQ^@X(yW`pd;f?i%P196=x962zC%?>>P!G|6MhS^z`Z)cGRL(T@v$fYFLzNd! z>%T}^rzP!><*Vhw<~8*K;qBg{h*8ua0CB_%?QWtBI!3C)BVuF5DNL6xnR9 zht16NyFSv4?#ev2f8&h%DVbkUGKnev-;1l;U{vCAZPKUVy$1i#j_~id!-W7*G(8=n zjb9t*@1tSj=bJAcFlbz|W&fYxknC$iPwVBhPCc!YmrcBv?duHS&JDi|6t?MOEp?|d z&|-IdeV5(wuk;(UOWt9%nQyIHFR|uHw~kjnf~x-zre=BXM>X}aHifoKtX45QVKer< z6iEV5Nl3f=2#d;9yb&&LY8*t77>RB0(#AbFR)l#Da0qknL0k%y3N2-r&&7n%kacGb zfP;zvIA{Vmr~_<8i26-vN>eGo3TiJtL=s3ovq*6t<$Oe`%=J&VFYBBx>Fc_8>9VYg zI%@a}Rjk5tC&$-7TM^zJT3eU$JsVK@JE#^T-4MUnFLLa1UA4d0G}T<`YC8tQ?z-4G z&tc!QtmUI&+hU%MX%E|ucRuGR;Ci_dXjFQ{wWefo1?!!9U#O)2BMqFVQXqnqki5@H zg5(wp+`~598HE;RG5y*L=F#8P^wSkV-uU}-h|~oo^a&&W%nCziGw~Xwj4+jnb|l`S zju(l+iSf7XmZYf$#KdVGpzJ#iD~i11R-oO94N7AX?Y;5%gHfOT1y)HJ3ZeWesY#K= zmInS(F?p-$Va-$TM`)gWyFaGdN%U&2+Udru+9|v{IyFb<eneQdmjG>^4zBQQI2Ore-{bbzqumUC`Z??C?@@i_B<$_OspQpwhDi3(IOGBM<i0gP(8Q!`s8VcKBcKpifaY2uh@gPs6%u=H#!APn1_^+x676Y&g0_hS8}H$S}HbMW#`HVd$-rVX8j5GV>5^ z^<32G%!3pdx}E~dDbS0+Jrw9b;C2ceM1VTJe=h>m@%=jyppNffj{tRie*^*Q`2IBr zP{;RULnC&R*JEeXFGP%qeBHe6dNVJ7iRQ40(?z3dF<7eSm3nXw5u|YvnM0-4PD%Mr z1+=f1@vU8vss@Wf&vT%G)>tmfiVT_P(i5G*RQQzmp!pMwY^^d$z47_Xu1P{?0Lk!4 z_@Zs73Bp@HA)i`}6Z^Ua~pH@iOHY?k>Z>kNKEZ#Ll` z8Muz=7;X+}p(~k=dg830j&*%yK+l(2GYn~9y2xr|xFKLbuL|jTeft91`6-sZsnf|n z&*+;ufs}t=Fx3jcp_H$g=r}}sk@ds^3_KSaxyy~7EYm@i2Gu}GDB`^?OYa()w1$#a z>-kpF$8!B+34H|gkHz%S5Q^-dm4#5QSABahvfUK#GMaq*$KVCyOuPUW49&bCz`Ou| zaXSB$KO6QmKf??=Am{K?Q?udd{c#T0Me9W*m`C*1%odpi)BLu~|B_!W`np4gG36J^ zFsA&1Oaslw&9mgZj?9wtdig9luNTge^SXSNoYy6@#g|Yu^@VW;TuuQ*ZM%@lu1tUX8t)>f1uHF zKJF4;&VNKQ|EcHfjyLJ|8~Xj8etqGy?i zTvXpyu1nvM-W#)MxvfYFK4Zi7rLW^gLCU_i8x>Z?)R*u!Jy^th^akEB2%T)72)Y81 z1{3U3&Rve&G;Xg(9vY@)0!V2n(lgt%q*b>)BD^(F33&Au49}DJo6Xp3)2R0Kzp07$ zKJ_AxV5kpn}tMRclIxUR@I@%t064Cg6B!$mV_*Kl{N0R=b^uLJ6 zHi~>rM23gbUl)-_C=xz06%d*IUCPK;N6F%ujTCc$Vlrzfuy?jtcn4YlZIpzDg?C^p zK#h{1FhK{R7C1CP2iDCN6LetBY%xIx7Mrocs2UIp??50jZ?<__UPjY0{aHSe>2G># zc=$`hNq>KK0EGMBe23iy$@gQ$0BEsu{`gxo0QeC<9t;=&ZzsdOO|&7WF7rIIiwP<| znn&Bk2mQCHMg~01D|qUoIof6q#ZTFINIq=D5f?vg=Rp}X;=)7mH=H~OF?9FWh_z*4PmNex2DaD8 zp}Vz44&BW)Vr>~%S0fmrK6H(>WgwI@h{J4BLp-t^zH`nT78EU6J|47$nJfpO%HE%B&LcdEW_lJGiTf`m8FSuN{7RW0j3QZ4I0P%Z1`uzhzYyCpAs}8Sz!R}Z`zs>Y(re6#FR_(ihZ?=MuaL-o29@_q|{#|Gx z{{QQrlVpX}#BV-LzYX;JJpG#Km!jWSUmUsS>-w*<9Q{|*$^ApLl`*NnI&xKDYJ)qO z+KcOJt@z8LJ_nBB?`Y36Ey$O^2MvbR|7>?e7SA#3X0WnE>daA@Sfs}C{cxnh@*R$p zTE2Y|ujPAo#A*4yCNg-F`MVhYS81yp={H65Rmp~uAe*q_jS0%)C5gk71^&U}n@fm) zE(g!|yW&r}ot^~VqD=A8DFe{HGm6bQCPhw~YfYE4$U(rpNnbY}-!pVq(ra<7fNvQ{ z2{YBYZ-^D3@R7}K53Ac8#U{nyh=bj6Di^5@cSk2h4p{0Ijw*Zcg0a6VKGzmoY-~yG z@j-iRnz1c)#Lr#Rc&X~^inomkMD~~o1iE$MW#63W$`n6H*u@6K6x8P1L4Za(yBwl2 zjs|DakLM7TOh79G_j|?Jz-5|2vlSm2b#Xnc1M8`0ti}(Ryj)_fA z`Fcc`m4vie1$pVuPlozjO`E;Au)1-A=;37Ro*`kyga47Da)|mUl>#}rNvXts_6+Oq zsXpr%k4|`=``|>b#mYF93)T9&qnC^B2t~G-sl|er%HWcTXNRzV!e7`{5TiH3(F#3$ zeN}Xx5xzcJmiessg7ro8j?6=mb(XOmiLA7IFHfb8a4T95@o-8UL_;EV=3$+wPNmvJ zrlX8;xhd66-7Z=mahe;FyH&C3AvZAC8HKp=pVK%WHNl zG4k5B-2comwiK@z%r2+@;S~=4qWanReSm}nsB>Up)-l4uOgOI}6>mIMN)vRCg$rK6 z6Q5sa<<}EwKY51tD`!R;R^a77s)4PU;8<)hn6Cz$Paew5m7C3NdkJ#&X?b!`%*ekf zo&^;Ogsl+Y4Aa4+?+jexN4Cx}_xN%%%IsKekiE4H@pI(&Lm5SQ`8u%44ML5X4==B^ z<(X+LnB!U2_?s~ABXDS%7I_~6(HTDKKa=^UrI%#?EXg{rSh`GC6`A~c7%JJh;UUkL zK0qJFhT?y+J@!8pj@eM5zd9C-w(;btvfbU6H-bNy`_$Djq;^;9;UCYHPE0pXG2Xn{~CvwIOj0l>*GR{p^ zBwf0T#OH;xv=Mhg#Qou|4sq3iW^r`^_sPZm#Xn#2DLy5spjA~j2cF4Lv`nd@-)F&N z$}~EQk(mZ)c_9RI>gMgxPx5^iYW#Be!^rPjKU<&fpZ@3^$fiT^D-&e*ihg$z%^iYm zZav(>v@hUiVJ_&BB`>`Alch@34KVO6NFUj5Gv|+Qrfl+#&a$RPS2!FlcmmvQ5t03| z(^Wz3Pk1XjJd~_2mD!mQ&d^bI=_sSF_WCl3X?tBcLU}Ll=;H-Uj~^n2*kpbi%oU;` zq4^Yp>Rjb?Yi5_uC*Tl&Pz|{7OoV*WAn$#p8e_h96Jvz$+7#=N^1XoV3K9p^;x@&2 z9FE%A#}9b2Ve;Icnr=8%x212hnM^YJ$I(_T@qNWG-5^*jS~#9#XAsvgA?IM)5fOuR z**ei%{61_i6FC0lJSBQH$1V)0i|VWhB6^=3QshLj180cW`ny@tEZ{>y;+ie+!fT4r@bba+He) zg7BWSdj<^z@8m@!5W{X4s|x%9pBiST*QdDatl99OI86^45F?GLkmMVxtuNd7FrFd~ zmJxr7-J?SGE>HSSCjD(V^zgN*iz;eeu^aV|%Gw5Jj2hU@Pc6GQT!F&j&f1`N<3xVK zx?A$E^i7OVcl<;ZZFw`#sJ?Q3mG3Ct;IoaZck;NJh|K}}eJYpEIkSVmL;H%8$0u8m zu(=3|{Eo+6ml$`{hQaEy?|qitLiu{|=6JZvv-5c#r(F(T&zpnn(X)euXwSa{y|hUP zYpTBw#?Sq%&4 z^0|wpeauj8L)pfgVftBLR_k-c%2^ia#H-i!B_ue;CaLrlEUgWD@oL3DI?5Y>fp}XL z9Ls)B^hy`)$B2#eT4v^OxQs2YDAhMuTknlNiCM^JnsA z*TyTDCS^3faUWz+nM@3pB?IM|N=_`-6U+6IT1^Qk08qZboJbs+z44%h$EOngE3kFOQV?T{%wY~zKeiPNE1}o9&l?6)O3E9eJll-A5}5^ zNz^G-k3aWn6~TV*eE=kO0Q}t>CV@Ew-SKxITg*6ttFs&i*+`)T@q1y1^ z6N~kyTvCl~@4krKzQM=Zs!;y3rH+1yxC^&$hGv8ZA3Ixxx;K|P&WTbnl=2VF0CBLQ zqHOr6qrMbUARZ8T&)xzZa9ZtTbJTz#PzivQw2USh)eg?MaNXPRi91o zRrqGovrXsNh)G1MJiI%fbKv??5sa1ubK1>5mJaM)iw(PO+9AhD%9-U8ycUO5JP5s4J?;h zUrAz2g;0{Y;yvea_0Z+0uTVpklim!;Cya-*8Rwuuab19XIrPIl9GW#1lS!g5=ooMw zf5+AI_VDnnV&m;Ro}NNj69fDC+k~M5kH@?6kZJ_{>eIw-6;JDNDt-K|Db)S64#SiF z562y+p_p7ivWKg>E&e$-WonD}*pByH$*V|8^CH71=xq!)2S zi3LtbBt`0-CM30Mfco(s7b;xjY0QQF3xqOas4r%q+pj6(FCxpD7Mtvu9=2<$ab zaf~}5(foteKVQ7hO)calmBu{dQW)a*%D`AAFlmF@TjHDDxeX@meD;?(9WCS@bOy8s zIej4G5u+)j9TX9a;s89%;lZkS&k*N z+8D6#}=`_;m z>0m*kD5&L9wHK?Px6**Eq$QFRqNKHI(5L~T?r{P{iFSaY^IPAw_c?Rsk+j_FKR@_% zavuA2)?Rz%=|OmKGWz@jyiMX2I-y86ABFFB^zKA5E^teKVJ+GI#t@z2hOJ zbzshkIvx_MxZ`eg+$}pMwtZOdcoKI!91m29ci&XaqGQBW5y>~vaTPj#oob4gxkQb* zt6J_SN6J>lZ?w=Pv%~a5UVF#db6O= z7mD}ZK$o@X5)V$t33tTPQrEJCHdOJ_n{4!}g2IlTNWw^+9~Y0kA>kTXBp!N00W{4l zm(-<{Bfn*a^CuFMz=@a8vbgyT+9Z-NI`9^LK}fwSycU}ebh^+5!Ti!8iSX(x%eSOUNH?>ysL>D-7#_20zc z@;fr#x6Fe=j5yUgk~97;1q5gyJi5Fe+g}$HarFj*67lLyvW984jrPJIAT6#Iv?9($ z$524^)?4zmU%B!iB6|6Mj;QiS#xD<=)Z%PGFdFf^UVdo&@_#p#|B7CIq;z?fw)U6h zbWGF2`w8|k49f)2&h4KF4Ya4pZTAy8Wps;?lUU;}lfwaSEE7~qHFCN<_I(R`>bqm< zNzt3ayQQu!Xo^`K{TPw_9vkBeRc-Rv{Z8ql2p$7Lrai=G+CCmcir{h0MDV!&#Nct`|Nrpdcu}sF zN#diQ$YzscIYLL<7s(XI;(q7zK9^LmUd@N7a+~mQ9}Ye#BN9~w>AIZ75Ad0>E|1(* zq%E-(xd1dHnU_>w0g{Mot$ak`AfCD-6*Vf^PN32(9HTU*8uUt&Po$?q2zWLm$`@%Q|7Iys{lGE!QTWCzk6*NJuuJgvw7*s6#e9cHuIPq>HGOv{97&0 zE`U-M`6%Va0aH%#BNk+HlYB0>=Y-^9Ae)zL;npJmtFez?c~#E- zBxiXN{|}*5^PHddbI4g93F{goz|q_fgG;1C zaa%nHEShY1YO;|+>SUI#p3{uZ)C)Fi$UE@P-)i`KvXu*oL_daeCS*p%-z-U(r8o$Q z53)$arJrNfQ}qe+hvlDlF|W~VE5)Vg@ZDYnUojDU6);`uw4r>{E{6B8HB!#L*DPzW zh8sfPboXcAJXTG=4^p`>F0z#)Zi_t()9MyW__mGZb`ef8a}w_6*Q0LiXGAWN#Ouot z|Jlkhdia=!-p7{W*Aku8;~UBY|4kD<0WO8eb^CW(n0u zm5EPDJ8?##vrQ;8kT=MIluKQ!API#CRS+LXS56aiROyk2mlo=}6brAfZ>MqY<_u7^ z>8J*eBX{nAlz6S?``}F*TY2FNM%u=RTYqr&K-```tv~6{4{ogIo6uq6} zA3O9mr!X9ehw_3reuSwqQO8xwj>X=&Mt?kycM2=4ZGbOlK79=!!Q#W}xGMnFkGx(P zu$4LxR`cg(m;5@MX$9O`d@e4qopCIwCI=KFDy|eF|HfB<1h*a7)(oh-p#nuTf>UjX zMxf&A!B;?3y~z}VJ1(8jM8`LmCT+T?_bWWywbIFQ*YeuQ{kkMCu43@XlsV96QFq^Z zXPi^-g8sq?1)}T|zC5gCF=vkzk4wb^2+wmE;R$K%rR1FH1-cJXm0k2P5o<| zhrVt_w5=2i7B+pizm-RoW?@4zc4Moxiq-MZ--)4G?R7^NFg`}k<`+T2QZ~U~?G4zX zRWaX~gHYD7nzK1}>n=#T1&l;oKDCcBC*w%P@+?Jij=J-Z&+$uPf+7w%}__B;u z&PwD=>~4o83Z^R{UVI0M08=esmN@v8gi}DQ95ICUkc(|E3<#$I;WQvD9YI}K=Zh>H zXyVWOWU9geTZ$2#ruTkSHIUVnM-SPaC)YaAdm~@_Fqbrd3Pl_uH!}O^^!i=VE2s-^ zC=;zlRW7p)b@GO(hCy88RQ1}l0 zj;^~k=0M{WJQyD&j?NnqurA6rpfnHMjZ~R$#v44VP~_x(Jm5nX4mQN^*}sdYdxrj) zTbL%{fd@_%#YNE`iII+RNQ#0-*lwHMH15+TlN@7i#><{x1zBO;U|T4S}>C)SdvF`@;l zY5Ap|q6L_ZPEGzD(cE6Qt8sC!(Eb){OGa4Q7-68Mz4vo>i|H|3x!MnIsKJ2lrtVG# z0cxtA;}>=a3yjmQZ6vQSJ?U|5;g-L{oab068HiBSy>=e_DV{=bf}04#&Z0R-%q}~! ziNh?h{Hb6C4eaK_C)r__IhJ}BXZb#NdF(896&j1(<-`F!><64)U-}LwPPqNOkg~@( zy=bp$h3X|%x~(u?k$v3UML-@)tg@aI4;?|2M%a|}$Nd9JTTI-loDpd|6dLe`ddp)! z;+Y+kL$*iPYoS4!hZ)4buHoP;G~9Qr(bXvOEX#7Sbz3qB=;IrVb)6(lOUm~IC)qhZfqw^S)j4?LcIdZ^e8&tgY+6 zWr@B)ujYid$3qWkzK0OV(cgvq@uBX-@{02V;yR>(@a>MR-)$k}>VOEbjYWvvJYP)$6>ZH;PnyA-((_> zFLTG18*{hq3)9;fS9~KikOk zdsQ3l#yfj_yA*o*cCi7$E;UVyLc7*3(tJBL^CV%UPCiWBNo5?k4In~fZ2zRVf2S6D zlC#%8nfg%<3#f_s@+}!PKlEV|7YFolcUcJ??Y==m!eklvN&jvbkOpaU?53A6&a*Fqw(d<%|5Xk(>XhhEiu{fU*^tkRrkOJjDk z@3r!${IBu)A5+pE7V03Q;Gk?~5rHUnJ{uz82~lDD%54q?)c`_=>>qOQvUS!qi{Jho zNGP*O<771XHe>iG4(OU{RR!3(Evx1mo3wbv$#a{eyWQ+E?@|ZgNWlfOf_`nvf`8ig z&-^vlb;b#iLjAD=^sW8uRPWM}fur8TMC~Lh|H91Yk)(NrJKjh!i0xj2dm1T^1Vg~d?d*BJ%qqdyvzs;T#%2RC+4b0Mu1`?{NdC|e3;{6pbcwH zRq+*7x~-eobd>i=W(%K%VYHvU?$XlGryyQRPzp4B1TI+=XM9VoL&_y|OLq`;v<63f zBSamjK<}#JEd`mwz-Gae7(Rqj%<#LFbi+%l{>=iWt(YH}XW|E%sySshjuE_}(ekY- zM2FWmdXJO8T!8x+rM>RZJ91%3Ns%e9)4rlc8UnGc;4rHV9e13%W-3dcF0XU#4D91@ z-Wy~4L!-+@{`C5};GVFdkX-EcHhI>Zb_exE_r!9!*UZp2=F#N0Es`~1bFJGiW-b?w zflQGH*&1!sTM<1)zZs)ZKzz=`gd6aB4!krFo&Z?Q%az2rn#6M3=ptWct&f$*ZfT5; z6%jhZ%Y=Yf);de`RhIz=1G){a zc=GR90%J+|vOjwD4dwROP>r&y&RKMe$A8AD?ZMZF($h#lz$jkl?nhu&1;z~yB`DG3 z8<6bJp!}o4-Rbcaa7-E0IOjY`+xH(c2r*X&=-hvxP>QjpBq?2YCAV z5WjrWE3yCyf${c!=uq2_sA{QlErDy$8NNUa{_hSIAknO9|7dB*r_PmfO#l zPvrK)o0?~BCF``@%u2);zJOhJ`3qntcn26sJ)CS|b*JwB5nzsx7~kQD50+3I^%JybxW%rq zQ!WkSqVw2i#g;l;G=gECM>bVwP05qG-ui>g-l3%vE0M%JC0nmd>& z)@2u2f9CZ40nzvp+r|_eSQ+OB0r7#Cl(|$!Gh2X^XfHNW^(YQ&iuGH!>Uz`+v(Mn6 zl-``y{c5i@r>n$^M!Xs2H_Il{RUVH0Hp|MD5#?c2psOrA50w6O0r9bHZt;LsO2W)2 z?4eCrEdO&()#GY$is8jXM1F{A&nYTh%}QyF6ZL?2_cyvi5z*wt8awYK<>;N z67y7P)|Fm&QmG=)TlTcN*$9DJpU#kcUph&6-o&|{oGFu{E4M%L5z;N1IvIi`bI8ex zH`6_z=r)NDE#~xe3o-Ui9vBn!RVQ0GBt*J;k;SgD4@ZV1l;*IT?#1CRS*6!RCLlii zC&J_%rH-7`{#j)+=RfDkx!A_QQ5lMMGblhG5tPGXRfb+Iv1shxjeRXn4b};!-e^vw5N=VgF==K8CS!`l~7mX zpKoLSiAVx$NUkR1pvr|U@#_nBoQ&Vd<@7r(vYvjgid1qSm$vokH>mZ)Q4Y6I)l z>la(>d}M45(?d7!OeblW|LW8=pmAZbD8B@zWOR!xu{hkisJQ-Nep{8Q4%ZjF1u@z! z-zxkrIG=5q9NxUx!WrAMl|vPJ8c;R4XSO)P>+qU`*%rOF<>jd@g`XM4YGKv`;eo~Q zp|1Z0sgZ6PO zAk}!Q^Tw;Am8)fgIPHT($c|x~R7j^57+6(_SXtga2#=q1*({F@^5H)hE#LHG@R^<^ z1iR^j^2~W9jqi0*_J7PaBP|H=}{6U=yTS+wW(5uZjY9)M1Kd&FPQgtG~a}FJP2aHjy zYer7kxw(o3Y0i_*Ew-S=VJ7ahyVwvH4RlCf#06{ov)sBoH)K)vP;8i|1Z4Z5M@HT1on2Ue6z;{*#+6#(Iuk2U2OK zP~3g(F~juyT197=j`qFF&o2-kznJ&R4?2Qx;Q*DNY(_B=v-iGAlL5-85xLAZ~;K(#T% znJsI7j=A@wPE)1iOPN(zJkBp&Efz6}hAMtIk703|vT$;-9gp*C&4Dmt)`_oFrIMLtEj4K)k&?Y!AXvefY5sstW&zhDmK^=a6c^_ z7vDP|r?|EVUxQbcI)y-tgV>TSmI!?Iy*}6a)8#X0aHCGmwZ-fDqP__`QqM2wy0*j_ zt>Ry5Ovy=oL%@RtU2(Ag@MWN}DpeOaVZjBXHL{$Lv@e1eN(#Wvxrm7{+RXfxxO$^ilDk~+U&(fj zCr?WGA{(8RXKwg*m!z5>ReFCNM{ufpXh@d|5ifvvOt4UE&m@4I9ZKVrn&V=)eujo% zA>#R2gsxIQDUqcigm;m|SIwKD$Yg<{~wOKZb(@;Wbj3sHrKvoLGU=U0vQH5T!O67QLd z@O0L^WwXn2R*OKCfYc006L5by4@vXvQbzofd- zfVacUf0+8aCfDDp*wVDo-|q8a;jgwcq!-V@`)mI&s+^g>S;?p|37PLcTbX8x!@*4l1V`)J0Bq^2Ar8qSM^*A~N!I59giQ0qu*@F1)nDNDaxkc9oOHGBU zm#xImz?$si?}(^niQabciAV+_#My9N0Y*lCQeq>{hfhAgwffOOmBqd~&WucW1{*^r z5{JQnh>!n7G94FS5L1WH;Y@l72~1`GW;*jP5b4srH&hP zOxbcCVaj|n-WOrVPsV zoLTG9a}mwhp)}ABY=j2+h;F4Gj4gHZ#iijTca$q-0-n$oIw!VtF2Acppar6!HCdZo z(sn$jhdr&!cUf88C#COc4ub=8 zmi)T4cs8;$uWlWl9a)-J7atPtUYb{T9-i&aue%V>w&&Na$Ft4(b(i4TZTWQ@@a&rW zy322X&O?I!uGmr!U)&a3TE!PP#gw%{;!CA6vSR zFY01T>-pl0*wQ6@F)OyTfiI@VmZED*c{?JE%YjQx3*!n-1Il<*z?U+QaaCnpRU20| z##OCxRcBnyHLm6vR|}1+dgE$|an)d4E!VGngZEf+hzkQPf@_@pI?DG{0%O|`M=PY- z!gqv^U>98h?3R!%mq^Vh>t=|TKxkG0;JLW(Y+bto&jCYS+`xW)L$McZar#v=GnF`P zs)rkGIvALsc!Etzj`VEQ7e%Vd1lGJY*kcZ!`T>*hq}FA0+?vmEfLRZpM9n}Vzg^*E`0pS;K;}EB4Gl6II`!^oCPeWOl_m@iZGP4@2-0KR%O4Crtj> zQ|H6%PJjZz1jJw*955?z;Wv+EHKZZrCZp95S2l7(^q*|$X0!xr78qr?@S&SgKwnMQ za9)Cq-?Z>y!3^#QH#jhvg3%tB&BvQAjjQQOdiF91IGd%*AqT6?R-#3SMm;hOA4j{E zkQ$R_bV0GcPlYC|$Qx>21k>Vp5;R{eW>(~@tW}6yp)dFO1xNmzmth4&Fqkh9k}fnx zmexn6PLI<`e669tZ(E-M)S}BptcLqoL=Y+8b3eo9aAZ0Sp^U-f8-r}@itV2*PvM%w zeN2C8qx<)$6!$(XE|YC69j}eiTpOd(vMUn^Z)SQ=Us=KJxbwXm?MFir^CCqiI5BMQX+UXGr}BpWF`FfBTvo;yw$Mmdp7CjNw9%vPTO1O78} zpMVYztTlZ?RUW?+)R}=PI>!KrenD*+(KE&EvfXkXev3uizE&T+3xf~pn@gpnr44zb zT#!G?vqYV2?Gzs67mn(qq;_YU$2h+KnmkWlc2_R$qb;?Fh0+DANc{jK9CAUP%}0(P z$Ck*+`sO+#Co1DXG5=S%-p*qsXJnb$IwR*7Q2~Wv%O_Z8+e@u8pE&JwZhP^#bZ9I` zhsKyF_vs5{^z(9|eMJ1anj5)v+(t%ojg0DsTj5q6HNN|K(@HCmPZ9p&YFjGf$agxL zl(Ay{(Umu_W{^*jKax}3nN%ex5rOfcx3Y;Y*Pek8Mp9)`!Sr=ZpQW-S;vS_AEd>%YmNs~_S~>Bcb9;p4&B`Ufr1 zbJ;_KaC&#)xK>qEYrZF?8^e>yIhb&Oq?Y8q>v-I||FcUF)&|7F=M4KKq8hXUEF7<= zPYdnd|EjH7c=){xm0gznnjLW3>t?9$W+Qki+-(?A?LHAe4onQl-6lY8D+$Q0T4*Z( zscHUg5|A1Law`LJ3!X|qZY4l&BS3CpKyJzdccm8VSl%`q0@kP;$(i&b^tJohx+K-HUBP{gL&HMn$Hn-Cvj$w+=@~9cmL|Bx*pe!Sld-o-XRub;u|-_5QWRCvHJ^DO{x?gRra zJl^{ycqQYmzCgR5!RB{st8CTYAc6PK7PTCz;)!*P7=@@)74NtcFWT|D#ko0g2ktsh zc=6Qehgk!UeOZRh4dSaEykiq z{_dEOOirPHWI3}0^GICT+uTy7_ygwRYP0=_gB+>R{Jma(*V-x#4jH>N*EVy{albpY zfeB8XB~r^0#=>T8**v0I{UoVGc!ALRZA zz5XNUf3Rf#x&fh^Nv?E!*G&ThV)wHk?mL6xd$i04jdI7h53i zP@Z+F4gSuz`MlG#_l42~pObjw5J)__5i~G|)ART}v8NfC$~V2r)J!@pgghDpk7HruP}%DrE#KP3uSV^m z3|wx&X7ivuk}wmnh-f~-Wzy14lz{1N^4w7c?+_d}c^lne{l*mQ_c_K72RzEs_C~kX z?14wcFnja3ygsp}5po^$S!=1|; z^hBqinBZb%$%R>IxelJ+!ydaB_gc)*sRSI;JXgB`T=}Hb5o{^`bJXxhsI)5k1Q^y- zxM?3k((mUP=`4yrRS4(_ikhb_CKS#^{Dzr~zDfU-p_<8KNJHsFqAG1#Wp@b0gg!%p z@ic#RTKeZeqVC4|p!k8g#aK$$= zL&^s&uC@axE*JOjW}7(D^Ku+17R#LfDmrpk_*%=-DYRl{5{HbEhTEmYPb?J1&%a7o zWxPJZ&%Lq>yFY_yAkep%mka@n@KYKkq-D$n<(UNh#63Kd5CVQoqCKJ+q+@qEEVK@R z(Sj`(*dMG4{$PxyjqckSquC!URbLXLhnVSddws(aqg`JAkQt-lDN(QE=4_Vv204Pi z#~X65si3~#`%H7^;yf4BiPL~}Iv{SHu2%TT>`(5RgQOhp)0TOl#$%U8MJ7tiQYQF& zlq$~9UAkgJ_6RJ|?0#4IPlMUESK%u+js43BPWy+Pyb(xQ&XxKF^}heFHtB)Sh7%=S z*+AwZA4!}I_hbL$z^%7(k&a^|%794*1JqwcbXa`D|s+h-Lr^%4D z+khLiy2}&>g_sE=q*`JiRimVSDo&wt-WY>l_nR@_n6-8No9x#;HYYTydlzQp{zB0A zZb3twq~RTglT+h`%G-?7*k+99vQ~V{!ZNv^0ezRCOh85)!8I-K#PX>&7@4%G``7`S zd`;Enyud9i;TAm7P=-NDlx`U8_a9@vVH)-yF>L?v97qBKQaLsty`tq_xA)ufFi}QX zX>xO(3lH7)G&tnaO7|>t%1t1xhvTeI?HZv2^er>c5|Z?Y<^wOaX=K2D;W!qU@qC3 z^4LeMxrORa+ZB_e8pFp$(}`8HtRR6TWIrYO3TL%<`7Dw(C#~rwHI#-gfSJG?Q=mT7F`BbODeI;LDXESt6a7})l?!wp0iNPQM z;9SGaV(Ev}#OO1kr`FX}a?2yF7%NaG-Y?1JyaVF%AI& zjrtfT;$H}9xU+(-!_ z39(Z8ofm5e)%rke@iLh8#(kc)^{(u@+3fA*;aNn5#0!&%jXI67mgEK4O3}o%txqpl zu)waD`3}k)m86RRMjL*tH#^5iY)*QuDiTAHBl?o@a2qZf*gbk1pFsgW^9{KUy$Xja zG?6hi(SQ>78>>!kYQ&HK5Ew=|6Z_`)fsQ;pTT6kzD({S zes_FxLzzW#TAqX}U?Tc1Gj1g|*(?NAW4F+W-$eU++X$HR9KU+yRg#;Fy<&|{`b#zVUjoKa~j(XP#s-E-Y*<&X%Wy_&ysntyM! z3I}(MjQ>529{izJy=c`p2KVVsEwmTmBV6%i?s(9{n6i0JBSB#6X)9cD-*z64JMP=8 zt?;mpX&3dhQ>r^>Xt^VesmWb5Dar4$u4V^A7H#e1wsuilXsFq-;GgybGk+2H^`eqY z)Qk;?WQ*SN7@wD`_(trU-vwj))R7jqcb*N&Pmqz8e}+jx+-wv~JDU z7q=nLROmsDEh-0r^W_lV~j-Ata&4< z7Ph$MD%;$PjaMLYG4g{IKCgL1MH8o;pjYk$n+VlgC92=g(R?0>t$)N4DcAguz>oI@ ztLA%z1KT_p6kXp3kax!k&NLz?RA2vjjN#rac6^`Zs(Aa2tZC!lpxYbTNkW-?*5vW} zcfnVYmt(Jumxv7PhEz6?pHdGNx|95G&R3F;9PfNZ`ut&nEUEL+;37*zns3sE^UUzq zt+c~|z-dULhyn5_CyMvwyz(j*k|7trZOKZ1YmB=7YL=D%glAhViuMFB?5OkUS$MGC zg|tA_(beiTNen?&lp;k%z#Ci%$&GL+pllMHTH{K|>p^%6u0%I?1}u?tW!pGGiFK`# zxUrJ~@+1maCAwOo|PYW=z)zM?_DUd|z4 z9j_gImrfyg0&AZW6gD2kT(x=dYoG$9xi8x%kCfOx* z#ID$Z>Spneua@XMhaav9K6yPiU7!ES)uvCbi_6Wc(G?q=%*EubTh0Tlc%88WtD40h zzhhyI2;p3C$q#G9v$T8Xg)V{b2TV~+mNup6$MNCyZ~EBk8D2|F@TxY!tB&Etb$P^9 za>Uifh(GWhUiJm?5rc{$2}lhtvYv6TA1NdPyb1ycEJcVHScSRrHhZpo?+B(Y;; z6&F7&>0IfBoIhV4^9b@fWrcFQ5&Q?WdcrGc#OuqfJ++YHIC)@o5(p(nrOyZRdmLYO zTMal58De&GEuUN&t3*d18D(}$wdpMfe{FElM5&NW#C1YF8DyaWfpMC}w{|E8NgkkE z4$vJG_wFc|r6PE#KBzO!0VGM98ylgz_Hdprd0mAlwLaJL4IT^kpyFQ|=qz?VXzaTj zUW`zA>^=jPed%dFpfY6liBQ=*KDXXCk>7fppChQT9JD9CqRzDXs~K}7mCfiPQ)WxW z=FriYFGCZ16cfv7={QybjdIi*4A9&%zDRnS8htG`^D9GU46!^2_Pf}E!La;dy*&&1nK|V2+ZsG1c0w_LTctpEkF}I&-{2kJXffN zp3zMl#k2Sbj4^}gd@^XY8ic&o2O&Fl>m3(Cv7mox9~%(YHRq3DP0Kp(k+ zAL@8Fx&?SQ1}P;pHZ7C}-nn5FIXM?%tK@vQjjS^JW2B{Lg~?@CJfYSLf-9JOmPDm| z&e6fnfnjs`rYrF}(F?tZKV!mF<#+s(UOsyPBiOCpi4VO%aA|+?D9+LGn~k2s$&9#0 zwz66}pifQCh8%Z_l||%xQMrTbyy`A*AL7q*>p?OG;Fuxaen1AvkRu*oC)OALE1M11 zHyGbHz<#g(2UO$?S@Fu(kHPNp)E2#3wz7r?!Q*yWjp$aLa0*eiG`Q9b_86b{CyP-+ z<4E^6eh02QyZJNmD+OhoSfL*jY&Kk^NqAqj)2cttR@PD7mIj*nfDzrp*(_%7%txrG z1e!GV6z|;6AEk^0+jnutySU@C#9L$dM7T0~7|dZ$1Di~yu3+1})H$+fAX+VYWzm^v zG&~|LE4#0dF3+q@VXvPJ_m)bTDc4`ir0~iHOQCZ-%SfN$EzVWaLH>g1obo+o7e^WL zQ(!_VcAY}7#}mUr-y^>gxj=J*n>e;D--$i%ytyzQ1*BzSkof3}^9MYhC4=;oE!%bb9yH?CjQ*Mp{(|BrT2y=- za;gz?LF0G{?FXX;?gJ(L`-7Y*eIA>IT%f674v`u@3Zy1I67Afa5@{+eAGY=7#o5m- z!)#aj1&Z(7rx*w67%A3$)3DHnP7N5OLQAcrUu)!I`h`nGD0~es09Ebx2{m2P=}uho zO~df~dI=u&Vt2xrKkna^EBGN!={KKvd0xV*z+F5*H=b7Ip57pz8q2|$N7H^!EVneb zV5a-6hb(z}|9OxZ($YW(TpW>Y>z9YI~{Bf>%7hWs&QdhtLF%tEmpb?>;DBYK;x? z_C8!B_%>J{@94#aEStb}ys2L6K$&=8i5hJekG6|PYmLi`efXVTelJ|ywDvAJ+5s9Z z?IfrShyCFm8!K>p!#xcFSVHK@jK#~ZOT#Gki653~J5Ewg3|F?F<}CR;_W6`efvoCH zWsIhVVt1{y+`a~uAdM^e&?Vzt7FhdfDab{KwDlRzAl=g_D8k{1d(oAvpq z4(fAJAK+;-75}q!;^I7OQY(|I^uviNEeU8V>Vt?&$pdv{5ydpQ!74f3MrT0BglePm zlAso-S9el`rM4Z}!>H(!{03v*s0{F`*=W;gcEp3s<~G4U8`u{bjgwsG8$}32j`sG? z5n2N0na0W{_eRs;>rnaDhqBq^A1uu5pc@rNz{OdiuW)d@VzA-?(SdG|nBB?A2URy; zLN{HKladoNX8v>;{XQU^)J^Jcg9qmAJTDD zJPnpgi@LP+0%#{Ia6pV)X#}@z}H zt@c;*?e;GEr~m!j#diDC^zWVpcKZ+L-)r=5)VOrk~Sx8tNceAk$Z7j~*#)5eA%D^cws_(#mB&Mq6%tQyC6z!d`0nH>5csFPN zq4c4lfGWs)<&zuKK9P}6=e%&}Z5jp?j*b<)3OR7>6xo0z3(aAQ`{PJ^>>y^CD8F~m?+EQi*#G<^H9L_8!rm6j>nj~Xr|9X7sDRRr5 z=5t3T8^%oRDp(vuCAMDJ$`h~4jhCZe%DC;e)FAI;&PD#w@=d)Kxu&G0os*rzT+>4C zNDW75=QE}V*wh+@})AGW8oor!S~aQ z-B4mUA~&4WU%1C}jUGq!9tTZ5iU+wrr#2nU!lRwNh;)c)`T3Drj)fbF{QW1$r^m{H z1C5a7q({S)mPx`!1515gakm_B!CmE$j#|Gt3q^-@i|UJwkgS8e#$-s=!DjL7pO0l_ z4r^&=J&-z6U2}|BV0%D(oeE(|4F$!UD{)XhVa752`>rqYhk23&hTQkj@aTI>Wetoi zUB#YXbv-^&HO<(uSsFfLq2Yx00;>cDk;g~x~!+`jug8J@$ahzH5#h;7ic z%W4s!ZIH!G-9~HmYzc%g{qRk8}KY0y+%86o0j035~M+g%9{4$)2$Z0<7!Pmxh?+` z)8%t`(VPSyp!Qvbu)_n+_$6NX2rGTg;dvj1nMC`}!qRw<{DwtYEq^q(EYV%V8Nih; zo;3Vg*dR109s)je;0fW=YrvTu@0oB0H>s8SV!o93DB{>U_P(b?Dqhd+xDAMrS5bev zxjt?tOc?1Orv3bn(ed|lJ^pZZi$%txhX9(EFq|fn^|EPm`F+OTlc!HXe%2y-*EeB) zMTPu~Na&_}DM(sBGTui|A?oMAclx>v($$q*!0d0o7W9xHrTO}ydG+_l?jjj}R*!G5 zc{Ta=CZ*o7pLqfqWxEcg!4V8bPS=pd2>F?qXd-+yH5d@j)>tj60d&II)8e6l)FhH< zRP2$+8OTgg!Ramrh$jw;>{hV11I^-}bdma%cy=c`@7J1Yg5ouP*AGLJULLlC9kBW| ze=jnC^}=ce`M~;vq7y~sYWk~MP2$Lfc8mB@Yc5;pxjJ5ix^qb3>n3_O1W4(d0VCX3 zyR%vGcXru4UIs~h{md*(P4NVN3aBq(a3NVE>k#)=Z-TZ{k-QfM8FUi z?p9y)?fnY1OXd?re$S%)sPo+u+mCvfu;2>G03;E!O4{4Tw6}Ab#ZsO?Sqw!flRH_N z{Lng+g1NnuRmm+|nRlxuI{j`Tou&uLUs!Zn8dS}MuU=-Tqvam;jW3{G4-uDE3&N-} z=caF1l6i}_?|zpR$@H6zEYLc3OFgxl1154aQfo{!@7;pU1`kqKNX{;n4n)h6hzmmG zu5iG3kg7@k=~xaAi`=)^v!{sM-1d2UNgrn=FBQcP-369lad;a+LO6F@Esx=edLF3? z-?@h<0`C=z4kPXib;PG-XQszE(GV*XyJmzcY_LSnHNAIl zrrCc|$2$4!!8>GAeDkp=9Xvzf$7!y3ZD~82b6A&iq3YQeg^(fqWsUo3u&}`5@gIWU_>h7n^3ctsmpK z50?-#;+>9dat#-)(_lmbrvz;0W4iWXltZX|Px3FRr?tY=1LM-8G_RqP^Ui*t&DtJg zGcHiY(Xt8wi9V=IwZz(cN%!gMM4`C94%f1FW z@P7;(lYFPfei_m?kAAI@3i`E0JgHL%!kD2HKn-l*z)ErsGg9v)PtaP9F%u{KQaM}n zsFC#|FR876Y>s~v{$a3Qhkw@ySw#~S?6ho`vSChkcFt0}BtycCnGKIxv9jWs%PIRLpqs`GT zX41O9K@Y$pK(_%?)5air7+l53{W zOLOcouRjy1H4~Ymzdh~n(cdBIrJ-;T#Kz1uP+^`GDGp`%cmVY`f^a5{y20A zv}P~Li#2|R3`a?mF0}u~o+}*BAP}4$fh;v!Z`*++>ayX3JRf`=#!rir>fLgdRYIy1 zGojBn7nmU4E!)e%{$hUaxEv~$Z~cmpc@Z0&yW_zoRzPQBJ%Oid2(U1q%Sh$Ms zp&B1$|R~m^2F(H6^qva-XzTGxU2OxdVIjFoB(?ywNz)gFNS|m1?0$~ zoZts--7AM7`1Kog`cqTJW65({jjkWn6}XR@Vl72o;cYlZ*-Q;1Dt2+O06pB&`C37^ zC7>ERL}f$HoUVUz>N(>~xS)Tw6i^}iIJYjQ5C-qO(|&NhR78ZF_-=3olOz8|zfNd| z$EFZOuaQP!%|(IP_^2wAx?COz1awmeO%JTcCuW({*<9FJ@*Or#Nm?^SIH%)_<-+%Y zFJ=MxcXN%zU##dj?GR@1NN(nn8j8ZH*%=SXWL`@+(X(@rZ#XiaJvoPPaBE{c8`6UG z<;(D;L$Up{<(B-FW9qoVmg>&ok*+`(FewlQ0^)1^g?KcPGO2)TQS<4^4|gAz@zKFq zxM_!_9dEM5@Y77llaru$5}ZhBe(|{NIZL#6{r{o8DY8AQxjpxI?I9ji;rx#{J0oY% z;z@l*Sve@R!_YWt2S$cpTmX&X)*RxCy-tsfk#0x?dQ;I4aYmynY+dfhbRmWZF1Oit(sakMx(Y0)y2E7f%Uu7+!$_3 zDMU996*GO}t3 zm4^7#R=n|JdGJeRKh9-MDH~yoY2KTNO}~z5KhyN+DdE2m@I*CN>ouzNrYX@@EmQb!1<43Sy*9?gEWBKyyN%D}I7+tJ)V-qh9>*DwA$W?k@Tud`+jhicD#VXf=YaCI zGUaVGDDQm-kCh@u$xqu%M0N9!Zgi3TJrmWdu!IG3KiD18pj(Rrj;7UY$TbcG=H#LVpXGvaduosQoW^M#G$tSE*D($$%{0cY8 z2hn~z+Q))aO*?W;BVsL844W(BCizJ#wB^`}07huban0ItzSxIfTX}+|C2kiyOvl1e zeRBd2(~esSD=o3GAaWKVJHOWwXiD=W!ZD;cQBVLV*ZqiB+#Iv1MRia6jY9>RYdlCk zj$v*p4a=ERavxm9AAG&}gK?AkY;rl>Bt2P9Q}+2DfchG9Dcqz!QoK`PJ2dT7xDAN; zT>olwecUj+$+smosq;TkDxZLnFZ5Q6A!$wKj8Umeq{xK$ysY>_2F`%Ea*d3cqpxjw zz9%j^Xjze>d5SrhD4cZ)USNnC@wB zqKWKh+o`l+YIXyC3l<-qNSb!YW{egwn_!vEFU3RMSw6;ORb0>2_9FSD#cJp$x7zX@ zbxq^5zOV5;N8jF(HIHxpc;ibyXByvmrN);v#s}q6341E1LF-(xJKcZ0o%N(wvImJf zcA%zNjNQt!#fn6)roy?2`(DWER=xy33y1yn7=r!0gN(XTG)f1A<+iMT9Gs7z5z_Bl?aeDE zuwTo~@5(H)`MiJl?fzUT`2E{K6a3~E!f&)EAAVh*8wY--`Q3G_#Q1RDUc?_gG7*2I zYZv4U!=rs6<&gAFV{MH3K=TNVfg<>D^+q)rPM4iOnn4`-exZR^0`J~=CV%Vu6G+-$mmNu%tONhCieXtmwR<0)_7f-m%U#}Vgr7x7cxMrU*yM?LNH z23?U;NOaoCjqEfU*_qrZJM{Gt(0i%V?q=~nXXSXoSt?+LQDa9kAiE8)Cg!GYOzd{6 zxybh92Y3sHdcoAJYcKPm9MGp)%0k`21ZM@8r9{gUz^o%hHD9f;85`E^T;GYnp}r%j zFxaUL7jvGsBXR#D9LM4j&Hs=VSmF&XxntIv8Tx&_H(0-RlBzdPL!{Q>xc|X;Xd5D5 z__vvB$a`~*V$O80i8I|x_}_)E+iCz|Yif?V<^j7T&s#^OXjfp~^GHCP|J=BmhT=U! zU!UMN6TJ0Q=veukuktT|rWVh|H^0BgNH_H~&`t@5!jD{mkDDNRF^KjOou z<}0edh*zH|(CeOgcD`Qs(Az79PFy|u znPiovy!{6jKJIPBAA5^RhTJN1cCx(%gD1=5xCt%vSfuto4NGl~!e7k;ouzR`KG;P({+{j(Oy0o;3Aj`1ST2@iif|RHywHS_vVcgXOs~iDP3y<&Z3~vC)!a6Do2! zJjQ}z;6@2ZaT$+!EFeCZ8+@t!GeO2i0P(XwAs{Z~k3Z?;{KKT?pD@Z7eJ07!Uwt@R zr0B^1UN?W}JvU&;V;t;sEnkn)5=tyT$rccoug*#6h?Mo(Gt^xuH=Uyj0%~fOTMYLt z`g${7{PqSQBY|PrYA`FK1kcs{^#O4aU!=`*sDHo95~*eyGE1i+5tnIo0yaU6sGjHb zpOyKr`5<1MUK$MuK9e6Fmn4|v4|oJjGG^knr>V)$@=R~8%%@(xc-35RvUbDleCqWW z3VpzIvUb)EgL>WjG#@~jsn)_rvLz3obbf66`_otD7_k>UW}VX{G41IBo9$%El26ix z0^%#Dn-obj;9qwZYPX(Jm4@X)^F3y;P>**ODz%tpqSj={s|1G>fIWr&L5AP|2_glsAKDRm_ z-mCW%!uzNB@cz}K2D}&VDTMa}#qh4&QwZ%S*}0Q1hV%HSg7JFHBWxv1_HpyW`Kde9n4&ut|LF#F} z`mZ-YRVq8D8D6ypyaMCHtCrzaR|v1-B&x;?dKKJiP5egNNWIxUXpo>*g|^r?fVxhw zzP(@qnk_kH6qxA?`KvQC;KEYHA)u;ace`{I6b%Kfh>=el=newe^T_QVOc?t;YnypxT3*$|gC z(wQHj+9T#_xJjO)Bv$<}Z716!Zvaoi=Do3fyWZ6m&7IuFL*_Pc!={PU2A7wUGy5A% zwooa?l^!%#!VRZPOmyH&oAXW)R4WM#Bq;vlRz83}LkfH!;|yVcw*ZjSE@@yq31_Kr;jJd^Q9nMu{*M@5RnNYAh)S+#mDU2p!)n7Zu`L&Cz^(8!SH9xaFwS zdMDcNVwP{Z0;|D4EbSFB;LH=K5-?Z6O>#pS&RV2#AUcpVVTKFc-oo87aLPBqYN^Gl zAe6U{CT`(+9jM+cp8Fin+C|uI6Nx+Jt6TV0{ikq5z0y1e+$7&|NR8(4nhuZO^zW}h z(@o~4ag+QOe46=y=iMIw0L#rKaFbk*&Nqlbe%)Yxjhp1P94}#*IrZ}PRgzj@8fnR{ za2rGO&ny5Kul;+u(Iw_aag&^aK5ZJ8mjvVWhYW(z%$4fRm2i_hVwb04_-@mdFx;%S zBj-;vepW$=b`Bk;5{_ceCjq5}=B9Czyvr^_=Nzx;zuYoz)7Nm*^UO`-COO-#Pr%*Z z$9K&&m%vRj1N|uXg-!zERi4V*7?k+6L_STQt)|<|H+SHzbcvV4Ym&peIB$4dC`dT{ z%qP%pow*HqJ<4UkocP}kWp{MrC z+9HmZxk%na`Q&6%Gq|}yu!`c&X3635-l|ho2m^zX%J-%vXA5C+T?iu~#%^s$c{Nw? zGUB>~Lvs;qTr#{R6^WbA@@e#(Kb`}bi@A1w_gS*=SS(QB&S-^c}XMt#$JgjyDm$4hbhp}_KgVqCpfc-?oSkFcNfP}KYYoiKotIhp^AMyH z#*Ks8#_K-Zvc~t#&7Ao6 z-S+*w{{QywIN#U%{o{ULJv&lOGGc`PYR54t6KX1t%!mw-LL?qJNd6M@jaXaP|AkZD zjLd=a%8<+gmRRYQ(O_J0vQQ~ zb?2RT)SKXDlW>zBQGX`L!6WL=>=6af!6V85Uf@_h@N5!ztF?;N@zAdce5m_t)MfY` zN}C|K;+P47TMY=7Z){~+kN9>3#a;=Q@;&|1JuVNB*h%|16~Y)*F5hDdOaw^(Xx!hc zg?eQMC$CQe(w~VXZTuDK7&20&li?g75p^^ZcPc=Jkp2j{7SdjSAt3YC$FXoj(f&4k zqV}7N)S%y%{{q1qGzi{cax+7Qbep_%DFR==MT*Y|-J-p2>&D&$buB<1_T( zJE=9N=7V9y;6h(0g-7%}%}OZnlz{G`Jk zp7(^qZq^QK{s9rZ5JhEhj9T%_xvgQ}8gREK>AHP@~B@bDmvstC5do6V- zxGO%+Y`m;wBS2^YsSA+2~@sMJ6PSo|H(`Q-!#n z`1Ca5^rU96*+1=)Rh-n7HKl~38YhPB!|5h>LCnP*#FclS79cJ|K5C+?09>Oo8pyZS z=tcy+UTK6yDC^INOSt1+`r4lMxo^qv5UFw=*p^3F-+_kYZ=Rx5KaZ73`)EIftE*GR zlM|O-PjKvZnAjG1evJ3j>t&ptDbr&a#_I8BdX_nO<`8F6X3|55N|jL|qX#U)TaWR! z%6MC?-ag-0W08mVB{a6V@n%YiavXZn5df5euIypy>MQ-ur?$)%vn|r{K%R-0P!}8L z<4(&xPDYJPs)`zJdj&cQxU^2T$OLUNLnE3g8Ly0A7mvx4Jy{aQ{LXp`xqQj*vgT@~4_= z+7CunBxJ;J>*9##3!WZ(ucQXTO6{3wDisxlpPFejjn7z=8zEm5)#vrX$Iry z*Px@}1HB7mbz6c%ai--7$Dl+NYQ>d3q^kduq@d)}7DNaMIb*LnB6qbo6RffsjqPtj zh|$9q>e@djcJYd0qb;zPBgq)o^1VvmNQ;JU_P^q`?=OEU^q2jwR@o0MIEc{@duxnq zHEl_&In(IyesOYa$Qp62*8F1i{#RV9iF21DK=K7@RV?yl)+lU0y~U{vP8M|8i39eJ z&Fl^0d!!Pogsf+RCsJw1=!}K*V+>P2rnxx~E1RI4q#+BQCjtWU`*)R5{CEjKB|asP zs5E0f?G|tSk^>y-JdIA=%=kz6-bi#bkM!lF8Cb`+}89Ok`8g^{CBim~Wi3ja-BGAATZy)4(O?jsp!h_c466a5YY2g} z=;m}We9c)an_wWDF`p((-u$L;wN1SfUkbJP`fwH2FnWmq_!Jz{ssMG9d~{v z2-ap?2W98f)B%)f7Dwi(@Ffy7V@(8_Z8uKh0rHa}eggK68YvrY;u&w-zX=cA@d}W0 z+MNT=c#snaEpw@<+Bk@cZ4bI6ir|U!3Osqp^u)za9x**hbFJ;BCmDXS!}P?#wRZ9o z8leZbq0YATo&VN2e_mu7T{M4u`Ntz?rj~?Vb_we6B+1dY?XSH8A$xyG5^?Hu`5M5$ zdyw_AxmRFLb}!+!V^8xDq%<|4e{732=d;gKRKc~eYd3k{G%WT^@6cqQ4 z<+LBC_xSo`G_3qX}y&PAGZ*g(}5`27NRfmrm zDPBC5r!dyxH&g__{u4M4BEV^XHSbZA#EbV8?oo5Cl1v!!B+57a#v(~G$COY3vh}zU zaNHqbvB~N6yUN?Q;}tz=ba{R5@^+ccmk(r)aI9@=QB?`eW{;O7=g*z%4#R4N`KVt_kH6^m4*^Et*en>G`zGdmr&Z*!X+nC5*(p z_utOfNA!8-VBxjuAi-=Ainyi2ir?D63{E_x>jzVF3>-H>faHI%bF0Mh0TvQ;q;3}T z>Uog`#Cd!%fUTwo76oR5`uElpeeZ<&O@+U80cqt5eoHrH)Ga04Qs;6rhk_X-{>qrK zL7MQ?<+-J-Ynp~lnx^4^*sqO4LdHA7F8(_G`xrw@4N%!yPGTe|GCu7y@P#K#ieCj) zAI|2vKp6V-B6tp*06d+sE)Q$)q&dK#NDdn`z6QpBKP+F<=7WQb)RUK>T_> z$ap#^mM%p9B{L`G!@so%{u9KrH}6lW*K&LFEZU#uY%Vy&NL{BA<4)xbr6wl=cPbvH zh@ux9OAOpwc-V2`2Q@i(BA&xV7FPGMj+JQ7OA2%V*~|q7q)Nm;a>?zjTR(e~3N%~l zE=}dVr@ePfg|f8CF4)E~ayhhKdz`Vir$%Qz<7J?Yt&Y3((2QfL8hNl6OHZfml#luN zVA7f^@i@|q$V$j;1!2FBz_GyhZ0kL;J&Kg~oNK4oaE;Z44RQY~qE9bJ?-EiCbVZ2&< zvPz~W>ZV&&bMa+0skyXw9eTA{oJB1ePo-%W_re&ZH<#RJ#abOEsYkcAa+4Ty0f(L) zYSe?++Trdx%nv&Y9uoH>z0iI%&)lE>MLG|A1}(;hc7S7t863Dtb}>UXeCU<9e>lAB zWE>=!M=Ki7%8vs}BP?%6#sUc<2?f(=^KuGCt`Sx3oYLYn1^S$po6h5qxEn8i7n-7+!_m_yYrC%gd$_ zmEql{x$fY_B;cSRGGLpb;P}~>8 zjBPj17;aJ(>Q?-I#W-f=uzp)Nt2nBwAs-dd&%xvR>%(Sl0K5-E&=2d&4{^%|_%L7? z#xete@b>>!c|o52sm?Ykf;kQY_}z^KGJ+x8Ea<`^Ca3*70pZ5#6w=3n}K`uth)zwe9_{JzQm`tNJ_mww++ z>F>MjCnxrO=iT!!|Gw*szVH3pmu%ZmXkQ{d6=}ae=eK4q?ke#g8wy#j7Tw;amhElo zB&>#emd)iW-STE$Jh-qJJ_VLHlQ;Z7^4>o_%IeA=pI?Ci24;YX1c@3o+9;_;LCa5@ zL`EYrb!KELt<+yj(=pOYWuo{4n=l#8zthenhZ~b$ z{Xf7*)A~YuY*P3r{#`ykqU#Isv6?$y&YhR`HWe0pAjzlIR>4Ky($iz){fGWej3`y7 z$?yFi;A720h4}cE!bee0K0X2u72@OmJbZN33IYK?<M1>NHdh(|!@-V{P)!bif6QPh0nzS0BG2PtXuBN)Ps5aedlw1419f^~?)z-< zJ?LrPvxpwTOcA2z#pe|qA&k*|dEUzis8a}db{*W8I0QlQi5n+xMDjL1XG368aURY0 z1R}<3lT07~um@!e1Q3L_l+V0sJ#5bI)@yyRXP3`@t;VmOOSGC2^<0V=UGlk%geOT1 zPy`YYlt+wDoXfpK?3OYIbi|4%mIySi3LE}h7TkQuQN|KGpJTb@*NYmZVuaTPF-ziqi1wQ2HI0+FX}oV(I8J1g@fjqNZ$a|<{PrEHeHYqaoohcT+DErH z;CxYQUP5B1IDx|$*E!V~^I4p6S+3}rc9SAE;viCMTP_xcB0hyg=@m#A<2X{ZiGxV3 z8Fj0a&788@lJXR%tg)nQ;gq-~Whu(?RVqRH{<8aY_rNhy}jT{sr>Zi2d#q`a(8uo@P2W zA@VMn6fI@L`iB~ag<*_h|FB2Qc->|mR^iO$rpAKZF8zv4tSm}jOuN)k3(Ejwg7X>+ zcCGYATb>VzjklW4W&aj0uvW;#M(U%Fg^jmgf&r_Qu{^z7h$rKP%E-UREksU#<_{S^ zE42yzS)u0&s3I*__iq{&euJP_`_FT-O0PDizX`~fBgV7)qv;>-`W0Zx8Gii7+5%Lj zPZo?-Psq5E*_oW-$GvL{57lsF*5ER)r2YAG=3S_zYYXtn?w@3=c|~GA({y$p{>gaQ zNpdG)ObhJOgPkm5?Bm_`Z3j9AB${hrzIJwfnhVjxGEvy?K^7wx!nj8D`HxRA)(I-U>d$F20BTDivO| zd;2>%r$@q%gYsf@XwB$uiN~n_r(Yhm{;!T%|EBmU>X-gMi>&@F*)co34=qJgpB}{t zXi3<3iE1@nfEFAC)q-{{uuMk@>Xfu1rx-LF!d~!|UT>FkJB>iXq@U!L;H+@Z^O#F~QQE%Az;MbO=Q@E5k zc6Z^b6&$(JS^Q?>hT}FaV|9Qt(|j%w3+U7Lj5#Mp!**_du#f~wyPg`!g!njN+YFvA z=HW~gK3!p+E}Z+F+$#9fGoc30Io}3Sha$$?Up$?|T$8^O1pV695d`fM1pV@tN3BZ2 z?-yGj&l?YX<=}2vnYdea|Cfe^+Ycs;S+Al~Ij?&+^^rx*F0qBAbS5TzczPdc+w=iRK139xR20^ahm0F$m?| zTqF#?%CxCkjmzxinCG$7U+&8d`*VH4)cx8Q34+`6IM@26l{{jGGCHkLm(=o<^y zr#^Sb8u)YnkF4X={@feP%O|X9znC~-78?}9deWE>6LlPnBMQ5rHXYqEyOAjXwL zWZbL=Dydf$VHLhzmQ;KfZitA;7(aSVi~=89JkBn^|9B^a`eRyZWSovIHU!H^xSV>l zG9oM?O2WAi@&2%MTb@b+pxjm=Yu?ucHv%JKa9G1;sFRNTuo>*FK5T4l0B%Nx-8iN1 z9C#%Emy-@A;0l|Seo7dFKbr;&7<2Y(!9ESQ4F|N~pcXXAm;G81K8dar`39@Psc2tB zn74qf7~{%4f<9aPrB>Rk^fX$07n5Wwm}Dz+B&!FiLSm{YWRGFh5t8vQDlKGe-TzNI zKC1ukg3drIWL>3;g&!p08T-T+OzgA&?;(eEvp4nG|Bw6o@_qUH`=(go{?0OI&@(CM z^R{fZ<=fmH4ja>7%irs7j1}(nzmtV}1vd9aOcwcLu|jtG2i)IY70GO7!{vq}R>(*5 z?N8|p!uWOtJ|D}R!$x9ZX6NWwFQzuil=+ij!z=gol>W5-?!s*@KEXGh9EIA0k-Pp9x-!dD!@N?x)` zx@g97eGsO3>VQq!Rzdv_D^e1Md%6OL3#ss#pJCwn8YNTVAO8shY_a7`A1a{2?vQaO zF9Zh?>kkMj{2mvwUL5#WS?GYkQpu-GDqR0hg_85V;ufZ=UpQzt-WR?yc<)D>f4*I8 z{6VWnkcA@&))LDdKHjHrb5=|Fu?@pcvEJak=N}rMuikNr@o|hCAA7<04DZe#pR4Zp z2;;N=mHhFUaK~xJXWcS$eEx9zM;o8$Q2zJ?Zu^JE=S#Q$pNx;1Z`Li9CR_h|*=%7s zv45-sXS{L1vVZhT21;H5m4ncgtd_BkcsTCfRmc`YV*B20G|1bT2d*m&6Zi2(bOoD! z;|%W({*ZiwNne(6>M8rN^d)>$V404-wvUB;jL&-Ik$yObq!zhbpT24iX?ugFE|sw_g->g|jA zRp^$#U56&(*Rm0woxN|2RsYR=GCT-f)HhwQ?$-c>g@fagn|3} z+jER;&pvv46HeP+b6>aDav$cHh-SsSQcj9(fEZ#}B@r3KncMGURjYEc%i52bF%f-6 zig*5q@%(sk0wZUaaL`lWk@)5zUP)+B*7rLKoS)_4=l@W?{>z8iQ_9yJ+pu2T-hVpz zM07YA>Xq!Lan*Q}!?;GO9?j2|5dxtGj2>)dRP@gd_+KAk3Cmj8D$l6x3uf)L4?oSVn2h$KClvr+pOv19@4W%VL*Pc}A<>jrwQh z6?*BiBA{wy6N=yI97UhB8nfW$zvkOlFvOed~is4c9L8sK`VAbl%jMOjid_?>Yp6AEp(Z)^2 z-PB0t#?jW*Nu#f;!f`->M)JC0srM#%dbcyHPKZty4@Sa}xrtyHbp`eO9V_V1PmZyI z%JxKjY8<_{V+FwfSx^XWiDZjo-_6C$#@va+2^si+L7ITDMgN8aUCc$lyb;q55&4JOCUg6o($4DEWoIcJi0(A2N0mo^= zpV`}qzyN%bz0Lm224)BQ;m-_fq!tw&noLM~MV_o@7BpD6bpcqcjICy}#cLP~IsL>G z8ewN}@D+RRRDSIEP1Fc2p=;rifzSq@aDDzN+46kP%zSb~~ z1O0+P5F11k0|dQ9-}K~xwyr=*} z?9&j|Os^ja8y^k}eq4rq5wWvmw}h9Dk^XtYV=7cW&dNhL;|PgU2}vQF#&Q9x>MM-D zdzYw(Z}5z$r;xt6$mP_Lksgn7-|ravJM1Y&=m$<=4_ZKvj5R3}k9n2O&Fio6MAAjrE+Gb_N|(mey(|YE)&sqdxm$zQ>v_@M+0ny%+4zt} zo^KdIAJSP=wNEc}Y9-+<%NFd^~-lIsCYPM4UR(pgD=SB<-gnF8XLd+YVOs(Njy&wQ(- zw`t-{uPfJ<`qgsm1YD=rt>n?s>qB>coEiI)QygN2TT&zea zraGGU;DyEyKm(@R(6^3lvSQgLo4(a7SFe5sA;cgob7AhaG&9zF(a>XuDfjGFe9&N> zPX+4OD)GwunHl6LDgB6&68{t-fV++&TBuyT`p`hAj6vyTP|DFZywCJH+j>2sp73hb z(_`GzH7GvnoD=jdb|)#P>#!tU88&`&9E0K3YgdGf@8B6Ww6{f!C-96s%fd!VrqRa?#S?zzikvc;U|g5knDU1r;)Rg@P?d$jdQ55&LCFEb{VDS8{Vk zsJYCoXkF~0iIA7KWTdJ|UQtXwm4U#3UnQ8ea}q6T{Gf9V+}B+{2sV8)=jZz4XQfi8 zFD#0XJb+}9L?oBUufqGrS-p;tJ&@}GZLsddJkk2Cu#vsr&2hZly0~rX7EZf7p==b~ za%LWqrt)blEgxMUx_j&OUX6w1BEk1OQ{rI!!mESxXNTBvs`7^sbENUexP)S7XSu3H*xSd zZZPsQ_a|fubP~J|Giay0E4iB5!FA45`&0C!wa4Da(BrpWch_sFdc3zISN+0?jn~&F zb|b|Wzd~iIBfciJ%93lTqp>`}A6*Hq-bICw!PfZQuH=H1Us@Ajf!LK?K`&b^@GWQfmYeWJxaAcV_#z6vN=wa736FwLgdRg!sqA&S{n*K))yvVQB zu(sn4NisbgJ80kEWF1|tGOyi<|bLW;t-AdMMl<*Ix>)-I7 zEr^qFAAEmU9WmaTN}q6ib4FCh_LA!`XB{?C0TU@(2g9 zrIoNO(d&*+fwDOTvyt=$-Vw{1kJ@b2w)kus0xgLTT^wx-mit{Cy$YX2_#`cbRx`^| zBuum;EA@!$((GD|ORI6y&I$WCn2MJrjyh;B;u_JW8|EBkaDtdiq@~seq?Ffd_Bn6V zYaBnzj1A}Jh$!Gc{|)LVj^qMfdm<5$kh9L0kzL{?y7;`V3?_6Uv`V;4i}u19xJRC~ zqhPNn2rRvL4Poh3-0L9LEO`KiG^VrR-FT%1;v$Dy1XFFtc{jp`h;i0(P%56iJCgXq zguX{+MK7TG!VEE{MK~zN0%6J{O==hcOdl#{7{ebj{5NuL0K)W+c-o2G-2$4gQA&e7 zAD%d`^q=!^u`hEYJV;^F5}5}mEPPpUNU?&lQ~l@*LWec)#;;++jSoR_Kn4-c1xz7R zXmxkdTo})L@CdR=b7FI3>;>WX*@sovPA#kGpzG8iNVhY zBY(~?hs2Q!hA`KJzs?F)I8ZfN z;*q4*U^9O2w}ax?Rho#$jBpgq3o543@-soWHP(Uy%u_lWXwy$DuDrwRba*%IP5Im5 zs3amnkq6*mraZ^JdRv|ZF$X<~`L_6Kp;K}I zUSR06?KZJa49TG4L@8P5SI#yLRa*+oQw4r03ZV7)*~T`N2O2+~v(O1VC-P)w8*SqI zc_MyS$gt4{&9o9*$xcrQ?dv(SufcBoWV+op$^a;RnMY{Hgo|W|cRUVX9cJN(oBib)HQr7 zhgCbYA4BZ8dq`x;9H>JTa<%uo+X!nZ;^nnTEaI^!8f-MK8_B+@eH(- zHAaGvzi>nez#?)ilnl>PO9|`- zv2pom;rHjsUs#e=5g~siY~o6Z4{Js{s68U2tvvb56xt-2N(z;f$)=Qf{r>mg1I7}C zr{^!144mk)=nF)d>Yh9~>il1x+P=5Buf$>X56c>>BAR}ghvm2!f(M?BV>H!{Jm%(X?EbCfAw6<$FgK`9bA#$kxsuqRLcBqxQm7%U_9%H-oWNi8+L+** z=MlC!h5pD6p2+t{HsT^k7Yi3Qo01xBHsPxRLZT-pB<`F~;?E^6smHq%ZvJasBBXL+ zH-2$1Glhrd`Mf84^me=jVqMnAs0rkXw`jOJgm|aDG-^mW7OG%?z1}m_hqu z!zyBlPk^Yu@EfI7I01Ti*vy&Yd!Bwp13-GUptKggT*dbk!~vAC8O%F(KCv6W+4yQX z%rcU4H}4!%1I(FUDEV;7bNh3G5^bQnPpYbP1|ww5K1Pg?kabfBPFTzd@RI%?qO(ke z-j2KxBm1Xe5~90LWb@;3A|buYfeA!=8X6ZMQH2b%lsPL+nNtV_I?I_M<9mUe%*m1j z4WuK}Ewgf8Qptmy^_i=)VmWxO;bJLun07jx{&g57v?I_q0;v$A#gU{D;hjT)rZ@(7 zDAsfY$5bLBsH!_M$aUXOK(LIn|J0aVJESmaZ2pAeo&2HLp{s><#`yZjofmQYrfdHLNrk-frZEs`~KCe1&(zkp`W6M4O!!d zv-tSo!H?L-uYG9tar>2{_3?*#ULW5)lIvrqwU2m7gL}by^Wk&fq8JfYDuN)qKE{v^RCrVvgOL`TJ9hn08a-KTGMI|?rr z3jP$lPKgjlMv-qyKD0>oI5D52Pljv1#F6Uw1r60=MGB32zWfIk6;nTA2p{ybz8G?xr#M~in< zfZrj;+qADiS=Y(i2!4gh;xb}T(%~&OKiy!xo_NSwpB=pfA{&~`7c`z zKGdnACuH1cFE~})d)PcxoHFXE;`{@nohrV(_q3;qZXkcB1AM7@B$(tQH$KYKQ{uF5 zD$R2~5=@H2K40FEpv)8|k*|G~C0FR99trMG{Ej#-J`!x_Bf<7l9SKVK_((9d+=P#h z1d}T)@Tns~nTg>GS#pIw>XD#;kBy*%+F3|Z=J08OP2rZN-p_}AP3qDd(o%Cqe!j%i#!5M&i#uL@aCCMi_E9C z_tn!T^J%mB^wj$~k&p$!AI+w%`A)YyNhB7>r=@y(1&f1!`Ql?co+7c5aR93BFBp)Y zbjt;dR?-v-?dB(M3*3U~DZB`|(wn@?E`?BHkdZDVOu-8_ zAFpnYkctTPV*Rb7&Lxz@b8ip8hQO!i})SL(zovJ?hU zOFhmLoqri#n0ieV35f+b08R2^C!v%x$pV~p!x|bj%`UKs^Un6RTs^Iah*?M+aloy( zz-qb11W_Or2zHbRea`-RE#><&?Hpo`Z?hP9bn`5-F_z&#+Ja?Fe&4GSzsP4E?Lj$Y zq(paPtCy&4B#93p+(CYQ$ z<0>0pCUX&uy=g0?v6qp;nfU0>oBUTZi+4x(^5h$Fxy*4hrY@D2H_nyVb9vaP;MJo% z^Lc?%?~V;CCbOh?siZ*eMqXjg*t{3{h@!gzm*!`f7K?}7_;q>{v!V9@h1ve37|eDMTSPWyymdM7;ca=8 z7YnYiaav+G7Cl>hf?PgmFF9&QMOvx@t9@!0|90{(OBL-rt=c3~nzEZCBnOkM6@o9QW5I38jv)fW# zY#Zz=R&L8^J}hP&i(Ux#`xkB+ZIbAO$|A;_bEHAT{Y0lIL%6w9_3uJ#zgGQ}>=mQu z^I%w*E)u($Iw(7d{t}I>UXf5R-hcC6LH4*KQQ2&c^Gl<04z+V{8T0%?y=C zskugCZOgj~rUtw5&mVyFM8gxsloZ>o04hqbfUF3X%M-hK?{Bk!h=*7<=`<_B1YvX_pNSvVYK^J9@b9`uzn){ygpAq z@$lcWqw6Ost@?kXK-mER7@_C<0v$dCGUMG0uYo>Zt$HXC3XxQ@M`$JbXqFrj+^;eI zZ$b;jMMH-Bm#|sr3me(jhS_Ubyo?r1l%wsXSePm>%i6;d*`2@0^3i(Gpzg2uX+BFS z;jgm7FYYh=7=fRdC=$EzEA%UU=ModA+k}3l;O;VaYT>J@kE8aB=@3yOWM@P|*eHKr zbW!x#xWLjgE(w`c^o(tpdN|kDUX?xTqnrG5Achc^8gA?`POa3YMS415RS*hid4Rc20H~i73C97EA z#czlzgoY?R>`;|x?InCZj9&x|O8WWqw&Xn}n@__B{_G$Tdm5kQzA5t0=FG1TYDo_l z!f$F*P*f{)i*&4ni0LBw5s6C z`R7^975EgaRMeS1KndwCy8@7AG=R1Uw^wJGU3#B82l+NfLYetOla?4PZoI_kJ&Scy zv*b|6nxLLamGYP!x`#DX>08j+XYAsPE{`xC-+3ysS^lad8~DLULwy-rXKvGyF1lY7 zH85Huvg9b^LA4-&WBLssi3d-gnmFnsc4(_PPTn1Lm5Jk*G@c`B^X{m7)2hI*{{BSyn{z^k4z66Q~z@mx^=)?O1?>$X%$S9|1j$+ zFnK8#1U*;g>`ducLv=~k>?G~5)-fXvVB3eh7^8Zh+)ki-x%7vl^v=58m+%%}YCX>wiU`Gf zfo0x`6WK8@S&yoJZ^#Jxv!gv)^dOra9Ms&>x>&Js=Z_U$qyFc^=HcXMcL&|J z!v4fY^r!!{{W0&pT249!zb_fh0zk(Ib+LQjsR11^0E%7&VGuFgCA9vS2U|*L9{kac zUAJHQe?kftRIp5NL(v~Ho^)WNUeD))OtAf76S)qX&iWr9( zlA+8W#E0bm_ylWlku;N%ye~NtgD8aynBO%^@dsKNC$JTtT?@j76p6L=#NdL)Dl>Ux zt$wrC#tGJJqQVEwPBz|3MP32s2r;D`=NJ}(*~UunD8y|QAEX72uyv-`j27=89N=~v zv0qQ`1?n=3GR3&ce#F-}nKAl^NWOq8Uddhh^wMc%38f z2AkiBzFSA?cRz~1bt2l3OPh@Pwc=g$JLZjD?~WpTPYjM*U!scwlef{Y&c(Fi?eyEh z2_uNydI3(^hq|3`DB!-wPekrSSOOp00iYN>Dfzl=tiTBjo#7bYG@7BWwLaDy@M`_V z^9w?$sP=q`URRu0caOd?bS=%GqxSd=tU9gycEr&*fhZnlEEyS7f(aewxb}FZj66u` z@v^)srsY)uwtOY=8TtlJ>9xlfTXH)ZFEv;AEA2MZAbw z8DH#tyKMiubJ&z`wB0X9@6V2~KWq8$RPivolAUtbHxDCWQxbE_!^l@z#Q4T{t*d*3 zjSqH>?rFnW6S3F?y1oPnX*-L$+f7l|KAjfht6aPfCOWExtL%n{jWiWcUx@UeC-GuA zYKF-pkqMr)$gx#P3UUn`h9n9DMa{lt|HragV*mO8$v?J3$y4**LKGv{N59cLgo2q*)q z*On67i5kP)!t!fv!Y19g9L|fAyLb?G@gRVTU&6hq_Fde~+s?4rq#Jr~@^KsX&0c!i zAb?^POc)lWQs@-R-VJ364M#u2NV>`ULh9d6@?p!eRQqN|eFyWC9zC^{9<)}#Bt9t# zLzpXF{6le)z?7ZZ#i&|MgrA0`0^h&!Dp0Su%mkGZxmO{hZHAc$NkCLEX{NaE67_s* zC9O)@hPG=}?P|JC7q#ZiSh=>w_R$KRE%rc$LbcVrAP68-$LEjFHCr~yushVScdjrw zAj5&B^CCTZ?1SIWdLwakpn315c8s*_O5-fEZ8x?3vKW)+FebvD%bR?fXDMEIWJb2@ zRPENS;E}n;`$9X9%p38AsU(jKlOBkwokwOPj|_jxpCfI8i%Wk2*`uDW4LncR_2aPpeo-H>UUl0!wHV4V5>1-{Dw}uHUumnF3 z^5yRlVFMzOUcO42ffO={9I5n;ZwcXIq)JE1PitKH`Z)jjfszEVEVQf5c_ZB`7N4+j zwwUi{(1tK6TGBWL@eigDYw|{VH?Lc?gJ$l`>Aa>O{*=7_m` z@g9^Iz$HcLoNvGup9j|x=013?=^Sm*3D(W|;2N$5ak8529zB2495c@bta zQ(A=avCQ(37qrwCF`V>q@7dBimCZE8?L?gm6RCFaEFv}#fo2FXh*BpUj1XHseVM?F zH+dm+Vfbd8(_!&Y!Wg*HDfv$SM$xB$U#oRPGrZKpuccZo<1Shzs2ifPx8<9HbVJ7C zO+m_~W4D=1EMc?=c@y&R33b|878R zHO5u{D)l`Bi5Is~ijB#CnJDy!44SUbBf0EA;q@AG>O{zBMFDJ8E}E<0HTQ^VS!zM^x0A({*%D=V5@ekb> zyl09oQsKUF@V>=F)Hw4Wa1xp|JS zpUj%;h*0W(@2P?-rpo>>@4kiHrE~V2_x?oLY~;K0w%Xl({e}qkHSS5Z9&d6N7CAd}L8TGBrbG;J?29I6E{>hC6GaU~0tp&= zsAN*OG=7P3)Xi)8`OG|(67vMW2QhbJa|6;&@0Xv$uHw&>8{0+hS+JI5HZ2tERn~mZ zaxM=C>QP)Sv0B@`mb+@@OOCS6y!>ct{ z@RHz5?8Jj$F1L@j3Fdya8^zAl5y($?0b24^&aE*|pZP3v26dMcTQEaMyvWNV#(An@ z&M^WV-J z>t^p61of&S3H2%tP;`qT0e0oowysDJMJpcm9B~Qh0e+oA+yxYh7#BYwWTn6m-*={T z&VCeEj;Sm%k^Fjq-4zkso$OHQLGDsN98DRY+lE`W7{7U5f)Q6>#Ph)z;6|G) zU<`6fs{*6V3dW!b#y%5_ID>KgUnCe}T-n>yW49H_ab3bRco*ew?m%LFef>BZ)7xo= zq&X-pFpLj(y-^V{&IQmI$(3p(S2EBSaeJI?e}x#g!{)fHSE#9khtt4`ED__?Z%7V@ zU=nk^lCh0_-6`fr*M=qPCE)97I!LSnW?{P6E+@8dC|0Jk8Msf>9^=}p?w1qzV4Vc) zAaf~|qCHuTH9kHuh$t5}O4iEtgv)_iM7f3BUN^&escO$y&@gH%PVtm z>8;D9^l{2zPN5ZkU@F&JbPNd-HMhRh1!iWcTdM=>AwmR87jE8`{}tWRH{u=Wo2a$= zualJ%GV!cEHXxd7-ie1#)m~QB_*rh63sL%BE@CG}sm2ALcr|V?^w)Wqp{LK~s3i&q zynd(6W)@BCQO*g8r8@GYAon}0;1qGig}qqn(ds<8!b{(H`Y^gty^v5jZ3 zY4Qx|*hpQgz;^jndrtKlgJGw!X&aaog%3}Uwy}@eoWftZ$ z-&9ssVutqOJd+5Ggi#P$FAn@#!S-=o721Xasxe~tmQR-TvZru)nA+RCX9at99DXuq zao`0LZoJzfL3gV&iHe+67rZ7-gYVkjh%s}5#czx}YU>?&3Q;-A>47?5nTsJi(w6fl z$j-;uy$Z87;d=3R3M}c+}h{ys% z&!Yf-xd0wy0r1bUI0`U4Az5IM3k<3PgSi49+MqY<0W{2!rP^&Ou12;PkihH|VPd+H zL+_Z@wkbU0h>aigc9h@qmScW9UcCtzJ}4>duWVVs**2vtbpvR&_WW^!CzU!30CX;{ zw=f7SEMNS*OS+&p7f)l6C9!lE`w>~npEeHUkVMQJ7Qca3YJkVT}{uLs5zKd%fZZ&uE2r3 zjvUBbW}eJj&M~|5GMzSV_DE;fYP=;zj9(3%giu|9aoBUYS}Wa3l)PAQf8spxgw4dH zajh_2zM9H))l}j>99$8ofzloW!Y~Z9=Bg1WS~(6f+i%+~RsK7wG;gCgY~pm@*gwcn zoz0N2eShp=fX_!^FKFxx+Qdfhj>NVtaXGES3uis>gYhou;9-nen zvH4;d??}{jc$sobU$xod5;&i5ux8;)D&)I~P4oQMyQ39YBKiDWuAJG`#$qOMX22RJ z$TQ81H9Se-xQwRX8RSX?Gb&GWfA3&I(>L;TJL-zd^u5aK0ow`z1(nT5F(BTSj2JM2 z6R0OizKjuymxxt?WL&*TaA#*zdAXfQneT@9?{WIq`Co>9y zB0_3LqaVO^q;N)0=81y5_%HJ@b&&MkG|Ioo(CC@lsPb{-$7VVNJzgd-K|}$(Oq9yo>iAsF^vAP!f%=#ceSgH9tGXsP=dM|*=A3uOhBmRP zRdEd~A3SL~_A8Zh-ndW9U?KtKwLMdsu}lqEzfjq2GnKb0wm|#AqhtCTX8$tj#SXcJ zu;*!B^g@d#95 ztwrn}w{W)|Hg5k{aJ?S5=lmE~*(tN5=vkQIE#^uN!^bo}o3aA7s-6u<+^gLMt z0I?dwu%QItaY%T!Ti~g%z{5_&jn|(kfM=Tpo=OWm+ZdjIdxqgj9C1ltx-GygvH;V~ zz^r{n0^^pz9IyaWZ2{&01G7W{Q!Q&0Dh^R&57&6EsPTd(8{-3Y9=6oE#8T&BuCxDX z>73gwW)!B3@!uj*XW1iU9C(@?dxwpepGIWK5eJZR{q>FXXM}wsFq$7Qp+=-C@A`d*kbSZ z?nt7Q#Y?WUVez}f%~!FI)Ohihs4H;jiAYFiWJYwxEHzWfpTOq!l#E_~i0fZztsgJx{ZnkV=G~||6o9HOm0UB7 z!)TCiDzy^NsVWd)JAS=8aAJHYwcK8!wO3F=`WkxGr!1M~y78(%;U|lmtN607t3WO}T zA_On#j>+f{U-D@_fgZ)rlGlJ1x8Ti71J56i(;8xH{CKJzUgWfPMi}SQl8msFKv>w9 z*y|U_%24-0h229!`fBJicJq=UeSYx(cz3v)kBv9D|Me6S7Y2`c6E`~~BhSa4QX8VM zH;s5gh;Yg0d7>;Ka@al(8Zz!kd-V`%#_wb9*3>8Q){Z<2CN^Hvv>WfRco7-u?5(M* zaygdT8_!Sh7e|8Ybu{h9XItYByOQ(dgf!iEB0*2h<5@6wh;Pbp-dTdb;8lTP(re)g zKK%$peWuQ^NLQn0+>5i0V6*}g#)l6GskkncY!$^A_%|Zqu{Z9oOtmSO`S*I6F)5oS z)|d>fCYu4rQF~lS&FV{f9VMryz$~~bm5OCgyCa@Cb(9^kYN%jwMnc**p4a8oS-J7X z>u6)b8*NN@ozMK;Y9Z?%5@8~`npaDCp7^)IT9J_6IZjT@$1TfFJgb%+T4~Wly;fJn z6MYT7)K*Z-U&``2s4cAokt8daT=}=1e``u6)s{9+)l=)Tz_fLbO59%ts}Ei{xIWsc znk=)l zwT%d-l-SL(gSTZot*i~DspMQSmwHc4s)weGLPh0;8y8znND(lZ)573$0QCHabD zof}K+@q~@X9_LxFC+7hOcGZ)SO<-q06JZI}UQfih8QHk` z?lGL)Cz~MQt_{@|VI=6$S|9R`O~zjbVN|G`O{d7oTGc>rqO%l1IZ{~v5^1}}59z*~ zAK8(Y%5((u$TxTIne&?Qr+bvDr>&~m;9Tcn4Qelfu5pH2LbhNrUwQV2Ku~-P9D=^iTg=*aAbaq?+^HKvtEQT z5BV2{OV)}oiD12*OZ{5VAkib2P=dfEh3i$+$SqcghVIka{AzY#r5b0Ggu7015KIGc z^@43Dg-vQ4_75uWu@dkM zRj?7#umo~jE^GgDZSgI&1;&^Ea8g{BI&3*Y8M+LbeYde(ecXC2vuy}lV!SCnj&^QU zK)-$&k4Ab%;j8cRh-wp~#3y6w-d|w`VtknQ$yvlxn%DTm2a>P`Sq%X-7nqg7h_UHm z*rTv3SfYJ;Ksb$lvxEIG9To9FYg`L!E8^yv8|?9M^ePsF#*IvMf7#lD|FxOA zKh+W1Lhl%70i4F`7oq_%hzve!?#`k?^X{m135Iz(0ZF@@tN8>o%r0C+#EpfHHGKRq zgRe&P>&)v9OC+NC@kZ8RWc|$R08oEXW5J*15b1KeH6Q-W`s` zAGbqRHWk=n;`Ta2E(`^(2Do@lqn(F$7Pl7cQ5XI(G!8KI#`2^Yg<4$9=n5PX(DX4h zwB8ztqcJRF@a;LWj=8df%k-A|KQ;H-OgYS zHLnNz?%H30@GXHJZOKHBS&zPCq7Rqja^H{9cbe#Z+;(63ULo?(_-Jec%FAe0b`=hZptRY5zimzJdVg|(i07UBh=z6ohCKC8inO=pd7;lcaLVAAGLXCl+^ zH99mKmh&EG$SyHoqMH~88sD{D)7a9U<2HK??cxisfZDDq(pkLK9l-P@PvZx7f zqZ(0~tS8&FH)Q#;eF?EivGhrs49=e6_)fWq8w|^n6S2y_7th%^jDDV}#sl`h?nI{_ zUOCl;exkrBYcB=Vj)ehF1>S4EDG;Sb2}!MDUQ#}G#kilT=3dK{tih9cSF)6Gz~}DcLopK1kwKQbN@mZ; ztg(MBV=A`9#3Hu3Ha^&yz1D(7K0r&|IoA0w>@lcY%`|x-JNW4Vit_j*dRRp~CNV8? zYjFrn<*E?)S?`_%#dvu*=XkncmC`I^d5>x)^ zpUmw6Q5%OAM$6X%6=!E=ic&QFN}R8T5oyD?<4$RRP!8y;RoIYB%qE;y^oZGgtMq;o_OxOFuUih+-@avM ztpZJMwkBUbmG4WqiF?tn^Gxq{Mt#$RemINq(WHWd8Wn9|q7aK8`ZR{KM6=_%6}uo4 zT$k>f6n4R-!4U3Jl{g)G#5MhOmD8L{Bb>&o@%M=FcS3LaXglRrFD(P|g{rtODj&Qp ze`I71x$Zk3zuuO;;@#oh0G^qioZd(N4NKKYQ5-by-Ow*y;4aGhNCKb#D9E!p4PR|E zed#N9BJZQD(TxsyU)ZqkQ!Zz=JozmBLtpJA;NN!>m4Sn41vq@(I#rJ&~Za!Yv=nkRI_I}Rc?y9bXWm)DHtb8?fIA6&`u*25YO~msx zA`cE~GYdqXS$Mug|TkvH4yNdpn$}*4Sa0r^WIh;-y zv^bqbMf7uE#D8-Bu8~rlX-POJ{*l3idc{A-#6O1kr%(JN`Su?CV{u%CJz!#y;2Ang zw7@}#(ZRziq-E4YOfB&RhZGsJ@V4x;V-B~$9*Q_U%gZA_aq^3kU!JBf>2En@Lp%k! zA&>V_T{J{<`WUs4ZgK*D`!Gy;@URx_)}!6v_*qamsD~>OuiEv%K`m5)R}y-|RV2V@ zHFN2eX4!Z~=RQ5qO$_4%?D9)}^x_Qc^S%J-`JlFR8ON>D1BbN$Ew-HyAT(U2K1dUG z5;xnK*fU-g?WA(!WVvI6p!Ay#S$LNo+(m`mT$rA!T~DZ+u1FuJMGp`?@LC(#mFQ%b zD4Wc;`lB-`}BHWAd4s_m++ zaB~N?5pV*1)%0TN%{EJKKnz`hXL;;U)%OXhdR;|gznx1~;5BIQ(L|-vtFATlByd zOd{2%GVaqBora7H&C|k*^yrqvUR-0+LOwmX#rp!-a-y?k>Axykd`b;L^eMg8og1O2 zXoP6XJfH`kQoucx==3V!o+99;NZ`JuaI@K@jm>&p*_=0scW3^8GaeV2=V>+6y-k3U!KkK} z#9puJ>n7^!6wy~^#8 z=70s1>mf5Y_WTuys{ z1@LZbh&9+!fwqwGwOiz^9A8(BODxyEu3A=4;W}HjkC*&vzgY79A~=B_E_ua){T?|= zI4{bVn&r#P@)e?drJ1S9%ruWb)h@z6sX%K;SB~dyJTBajCwOAe81`v(rHt&YT5T1x z!?ZHi@uxPej>u;dPTld^$~Ff+wXMwKZDo-j?AB5^yi4rHubcQ*e(=RF5D#VXWtq>5 zo{JTs7p$dEt0lVh7Ov3p*{^f{Q>;`!qA1Oh{WeHI&5Mb>QlK2(g$g?uTa_M5Syz!)V&iI=#uUo=@7GM(sIJ z=DBim5DQiFRtllYXUn56gabF}t6$h@&kwkjMhu^Gmo)+d7SrzhYZ}Tl7?ZSKIG=+M zlHxPuP^`(u<~%q|Y;b@~vc>Lg@ID&jamBA~J<49366d~wL29%d9cJmqLz%rV98A6u zx5#(Fe(Kk4H;*DLs{Vx&i+y|-=`*n=sw-REVF7hQ!^6hkx=v;@cgI#SW{1=rBNvs4 zE$7CE)XgS<8(V}l4rjt?9=`2_+_w0%#9}u;Oh_#DaGMhv?8Y}xzqhLhPyp_4;X(iN zC@%5}|2Ws;CK+xui1UJZ{L0GmXg^5Py~l8{blfle67G5HjKqmR z+{YoOmq44fGPZ-yyi*pqt)NH#Y*2pIr?@B1ZNg>C2ynZgasC!hz9x)s%AIH(9t;6T-Rm;7n8XE zA>%5{W1d&ND@M2WmE%!nnizk{xbvhLjO})=W!(_(Sm%)xUy=$MIG^LG0g94$G9O~6 zbC>glP85Vl4x_~CZ1FZG5ao3%cr0uhz$@*CyHLM?_&Re7?|&WpsQyKvg|K)SZMev0 zx&k|c=F)Tfa6{m5?!+wfC6qYECvaHWW-qsUDndzCSd5P!RY*KUe>rdw|vW4`}+*fDS&m9wb z9U}yz3>p4z91cQ*eKFho!u4um$HUZ6`c)e)YvwIPG_7OL<}G0~`(lshEnr%}V6~Bl zyfy_d)AC9VQrauO7eKKhY4j@g965q4!S zh<{>-TMdlx$U`)-9-e{Zz>VXjlbE+Ys-a2x=qwYrWBL;Nt7*6qoRsK3#N$Q01qRDt zmz&4nWnT{%ME_qT&LE~%^1=Yxb$k@Xr-C>?-rFI%IygLH74H z_U3UVf5J0SW@a2@o1oALm%{t0gXOY8_^k)0J{U26Oyx5@=4y508d>`$#-{&j_@?rN z4IRzoHVy0f4#ZPI$`0CqaQDkSKROgY3#U`8)a`2Su9KrEKp3J1^S6GbzqM>2*QLxW zWg>iSRo>?Zo*T~pJT>q0FQ(Y7Yeo)U&%%K3q3ejBb_PAK9~UgjU2piEn1n(J?WdVC z2?s>bNO>}|WMZA`o=M6ZvoFINuPgKX7)LIuy@E|KdS33Z82j}yA)<;6a9xli@F9IJ z`<(@$F@OY@XEr2L->ju#aPgBc?7S!#rP$*N&)*udu~2$S&Xw{yxwX(HJ|H%6 z;dW0fO`b#tPZ@6uTQ~-NEX(_~=)neiiq=dLz^M}lcw;jvtI?4|SUiG_et55n~j2@986o59~`n#;P`7C{}hIhXL4mobNs&%cXsw%&jR%Y0<6JrLDw~gv+vT z;Ob;optGRHGOn>RJ&$YbBlh^)WyHea)1Pq(A+SZ%v?T(~4%JkyYT8v$({D1UX;=Df zhpMUm+vT#VC%LMpL{(2wRZpR+N>x=yK~*|e)sg--Rn-9l#QO6CeJ|Rwc$j=4)mcBO zyI$ibWM9O!Z%z>_KoTqAakD;^c9QHtQTz6S+CR>AIz?@r^@(1pt=IEn_MI_$e-&5vxaj@k z1mNT7eVyw4wu0VY`WAY>Eq$#WGpx_mc$Jk?G zlcQiKb6!1-H33O^dZ)Z7@{9no-`H=Q%)SyBvUC5_XrcwlcNn1kXbZL70wgR05*p8d zV}9gZ`)N#(eq%QMo7snyFqdtLl|Y~hHWA!S7z#gzqH#9&4>{OiI#!BI?Rbm`6KXV3 z%6R@*SK#|V48g=L%uMr~R7jeb29my?xu7fXESgf;-Zk>F{mDSKXK5c(%=@X<+Y&wj z9E3Nfw0+MJmlKB-{j^*zjP`pU-OuZs?{#8i2SgNBWISTW!R&w*?Su3-KufCdZ^*@k zniMDH3mx|q(^3ojh#_alH9zWJ%iGTVI$Jg@oVxa6m>(G8WY|)zk*gMt54E5#erKii4}Ezy&W)VVLz?;kEH-vYwLM@Ou#-F z+0(W57z7t3R*o>~l*bD0!~>OtkXINx{w^DPQ=|sabvOHu^sxU(zfjOYD=nXe(<=Wf zO=ws}16^7oKMU-%0R+ZQE=V5L4l5Jm@`!R$WLF59OPq5Rp~TO3T?9`dm}s%m3nY!* zr7P@mj4P;16+Ffr^r6Bs#+|@&jYmuFV{~($+PjD4!27k-0eXIg#Ozm+xP%5}uW)8g z;<|O1`HEVY9UvX~9K+-g1g6)`4eOz*NQ#?g+xddgt{6Gm7+pXH?R*N5v4WlwyN7c_ z4#?z?2M<}syGPpqG<#oSn3DVBB_g0&)DOpDDegzeSa{1RFqhcPQv^JT4|Uf1w3-t2 zOeE-+&)ksK41DOa3nL@(y>`tg4tUi3-Bzf7>2r51^4V<0q-*oz8y^@kjZIfONPs-$ zO~O|HTg%{HJ-G{hjCSLfuRv^nr{LBB64Jl2;{qWvp-}ubJ%wj2=w>l{7F6Ty+upI< zn8b^S!V*A?H_o1?{3y@Dl)Zx+@8HHK=|-xO|fQzO_QUr0aO!^!OU1I&S|P zPttqib$j@)w$LdU^W@E{i7 zInC=~V(4qUm`$BT?PurL>kAtf-;9`4qAs6Y8RO^kRI7?un0j*p64#~$dNX&)85X~Y zQ|CtXnkwQweJoSwm#7dW=Ig@W$VVtqDN2mb_Y;HR+mTKk$wYf9-i0+uwKp*OET#>904t}aQ+8pVYZ?mVLB4z`0NO8RV;wV|VU zUuvP(%(EkPe|PipO`|q_q_3qL)hN-o19{&LWIh3^yT6jZb?1HS&deHfjo=f9F_4``V)Pzu7o4NYGQS*}F^=z+9joH{$NW?8+^C(cXzOB*Q*GFtqj-k(f9!QQoep zb0m&WCe9)1OT6VEv3qR^ZjsxVDWUpZOLY~@h%cUSSvLvl#V`Pa6{ovipH{E=YdC@r z9|x&|RtjPGJLXlAcHeZVzO&hyloer&srM9Ly2_99|+vYWDJ;1@a4;A6G$eluAYzpP`vyL!ajHpef~=T8MnIVKJpK`eXmNs+Yz$6TC$(oJa5!^%mYaQs=pCoq2EzafMIejm%) zh*(p2ER}<&%!H>@!ehIQ>i$=<15Fe8x#VtM_fk?jM8+j z{cs9)oU(OKB$g%tJ?8rZwLT|MfDNSPTECWaSzN$84T9e1ryL&>waoi3pHozIG)iI; zznTc~4(3b=Ue1TdZ^Gk~@Ys$}CI515AvTU!;klA?<={bYj3*eT63R7=KkFPM%@a1- zJ{Zw_9zJ5#*V&w+@g9R3zc?Vx2qc<%@#P4KVOJ)t<-1uUq1G%K%k;_0@S5Bdx(^{PyIS-59k# z2K2=iuhV$1Hm|;INV^}5pd0Tl!s(U&88kJbQOIqr&1h>1*Y||7>I4kujhXS?Gaq7@;^K%8}Oa7 zfqvCMzi6O8606Ivr_F4jH2=eyvVrIAvVjA2aNx$g;l>I^pD({eKvwmTnSBI2eKrYC zpMa+?66;x-SBXtl@(HfQENG~L1{Vw(;n?>4f?a~RncM9_v4>~I+VZpf{Aw}Ci@0vi zw0>r6Req)|S1U@mE&s!#;zJs)@?+Kc-~M{FoXl?JAA3fuB0o!=toM%C&~D72BNu;VUMH59NQTmte534N$+gMc!->k#hv2wa$DG8x3u|;eVcIpQWZJ zYgJ7m@L9<6?cv&7XW<8$2k6*s*NFi-CPwyH#8P5et(ruM4i3-|Z#2nB%*qh}%rqNO z)Ry~pvL;uZTLI9k0O%DI(i^sv_=PCZffsSU)As5*m-Bz<@7nua&S&ZG#Rpu@_vvrS zgW~;T59aL9^4CLN{J(5dX6iUXzUF?fGlTmnMSV}&M>WMMEPq*E`Q;C(@+Y1?UHL?x zM|rQ7l1T2PV)@Kk~ zH`qTr*e6_aXoP=tgKc18z;_SODFY0=Vz=dP3`Pf8lwt>}kbPjyv@q!NCiucx)HfUV zGY23)A*SoCjmrpX5qkC3#_GiSf${fV5gWQ5a|PkPJWiaGmW%zDa5s}jWIXGc-3+%1 zTbXX+`rR@->s+eJac^a8u%N2nEmT$cxGI8hP}Y#Cp}sg-4NQozLt;ZP*Nbu4Q$YL4 z_$1ZB&5i1^r^rWw7qr7Cf&GG;o1@^{A@I#^j{5i4GXmu}8yyqrxRd~u zCJBlYb7)t6VYE>7ZdSY#+P}x8eY54n5>hD8t|VB6_IWY)GO^wBp{pn5uZbAXEgl2& zjvVGQOT;NDrPu2d>NQUYNZLV20_tRoKpk2nELu><`PjgrC_O*RQjHK|OJmDt!dyhC zdW`c07^>JP_Z`EgHP`sc zhj0lXm)Vv1eg48z(EiP$eSZG`hblGrqj-}9UyH3EmEM83WZi}Nr5(W zG(`F^Pcbb-shQTW)cwB_kH1$>GRy@{yF!YbI(2Z-gD3S%VOhrU0G}y zuM;&JEol}xC+C0V*gsDs?-rEaF(EwQmmhhwg>i(t=*+T`CdtZH+qGl(rNb&ynG&43ZH8z;4GGjyeJG1fO(uxiaJM&2El`H@OUY{Ji@1hMdp$yl@ z1~$$nP}8}iKg`%*2r&>F%b(}^Fn|w({4g}`;gj8eb)m1Oxct22^JfaKAYSG969??8 z+96Nsax=D2N-s#LD7W+Fxi+DEy1V*+^n+&#IW?R@>CT-r`MA=IBW??V#NmW{K9|xe z;$Wl*%a=ZQ#uof{ziBg1Z)cdT;$3nWhs*CAWol7ZyzpqZqzjI`yWlRUM@c0H6u&SI zMFrOGSuX5&50C#<2hUfXb2SrR?wCrv7vJXU(oi^OhA}>nghhLo6n5rO14KAF+U!wzCw$yU=6rS1r5;sFkMizxS zp=Epi`(+n@-S8yZHiwohS>oq4-9j+=M`up8>gxd{#Z~ZuJ4o{T$kdb<^w_iugAXNEMtDj!Ma%O-1vME0ZU#L z)y0V8NZm*cDW^0WBKHXt!@?FDCJE4uSSp14v6}p~Ivj=y?v>!_9K%}CKHNQ=qEs8k z{Hvlk=#SUbtqJ*iZUv043)os8hAF3`4=5|%-tEOY>vX6t!cMITFVJ_fw}0`c~aPSS|%V=Vxnm&n-G%>;JGL?mvC zR@l@I*yynyV13${H)o)}t&?;&`fQYz;yBCt5)1UK0$U?dSBR`8>oU}rd7Na&FKS(a zS}#Yfs;B~JRkXgL=H3~0by1^ZH!u{o`(I;ZcQZGB51(wdzP%DGK^tJH^uMd5(qGWc zk2*xlbUD$DBsTcKKcJRr;+cHGG$~De7+0Q5fO3o<_B=*XrFLyc*edw%l&F zyp=7t>z31Oxm~rKwp(sz%Ujv0 zziaei_73^!u+`iGZo(WsEK`=tkxnHv!jmhpYl}pT82}}qKc&`bN6napm7UG9Zy-5f zz;(=wwv9V7cbqD+Y*nt6OTMv$;#!ia*?RXP&9!Vw`dF1)i+l_&l0M;6K|gJxwvebT zHc{^&ky4SeSXNvoqig> zSX^cCa9|Z(M-cg=A_GWQBXbh~&o;65>)2hSDDha&l>2Vo5H*?4Bp1{(_kE47nv85C zD_BeP;kQ0Ea^EEzrkeavA0NJNw%GwFL~EUfiB-X5tP1AObA9l+KIFc7=B;plIL(+b zt`QK||f#iB^9pPtR`1re-;mysRTS7$r^c-|o zM0xe0N;LEJz)FQ?+qqQk25=jSd^7{&|NbVcx*m4^R>Jbu>&O;M;g*309S^*%{Fa&4 zSKyM%?e8a|f`S;?qYx6A!Lxdzpt+ZNI;5Y>4&*U2`1K=>_Ap*qP<`?z0_v+7yzAgh z|6!w}-}xr`aprhM{*X2$V^v0GgfI-~_7H3h&pgo|U@838cc7kd`U+5)MU2cb);z+@ zGYvkN9Y_p6(GW?G`oftXW7(5s(hm}$%#rZle_v9R$D+*WS^8*I7HTZlY}JNv%*#*d z(d$xg4?mMVh38Y(rOubR>olHE-qR7d9IX^Zf<=*lDvS;qf6)YtB4Ixv z#w$d^w~@?`A`Bw{Zq|jU+E4{0u)?$>48p z{~5cEgy4}tb1tx!WH@I*{rrMYBTj|l47AR{MA8^cpYWJXAtP%MrlGU6yWkgv*4t*JHC>ye@gW6b3ra+6$bWn;~H# z!}1Fp1a&C{A(vu;zj1PZKO3_po#@HaOVpHT6? zJ;=*g2ikUEzX&yHuZxk^OO>^%fOA}dGwgu#$O;{q8L?^A9xD$|zEV4`EssmS@AXiN zZL-D&3)&=KIXzIjKg+nlir5|*x0|u;ZOd+GSiB6UjN99m%j5Fa^=5K=+toKTTzO^d zZ92o1i(BK&Ku3HH*0lz=8J0`V@G}j#-!K0rd;-1v+vrU&-Pgo>5zQ_4U=xC{G+ELA z7KnOl1(wIK?2!z~?S6O~*=5Fd(HG>71F_wlc}lLNm$-f0LAQ@P;BZ8{ecY%V^1$um zWnQ>_#NA0VzQeA47&kuP(_?#vahWcEWbYOG0C%pB8+)4|X@$UL|MAr^KjQbsCvfFls7IHg7^C$ae!LLe4DF8-t zixJyuCOZwfwBHu%YR_yWwOUE7Div5Ui#MM5T$j4a%&50UFNWqt${D`k--lzWsGT?A zPoKVCyQMF#sy>UJID;zu1RHBoWhzG1@53cC2;420%Jl-(S-diW0M*$7)!BklXA8DE zTcA2ypgK#1dbgjk7>xMt;@;C7XD2EAM0O)JoZUhnN!SfvE>F%dNu})Ch|i$2e!70~ z$v2q@d`5C-?mCRNza=4d(6=hj?lZTM5W*nap{d|}YlkV?No>1R6*1y&>I-Y|rM^L^ zf9ZJCkM9x6?^GkR<9jys4|^1jlHK)>D(e4$W3M}HdAaEoQo+*A)xOY@gZ^0GEZm+8 zDJ|QGZ873o%~+>Fl5UH4wP)Sb_vKSIb$t-YS2)D=f)nODoWP^984f4-A)9^qWsYEO zeFs90!Y5a4lg4pE#v9gsgPX zF{ZHdyUmIL;pLNXeoV2o?UbdBy`y^-ihswbhqGZ z2X2@pM=?gzH~Nb7R-=97Po#I}o6-BLoi@Ec;w`6lllLvs+xC$LvfoW=-(65+oj#}; z&Z0Qh)tfWc)vGhs)vG<$pKy)!*7vz4&sbNJ%3CqUr-oc(TrzHLQg^#V#NB=`wv$Hk zAEk8bGTIMS>7s{tcT-j9s_XmbY6}!y9k~j5p9@sG+BD-^rPLOM+1FESgzg2V(7my8 z^Fvl6+o`<_GN2L$v7M9z@twJMVLpFH}NsN!vN*43(~@66wv+;6`75vp(Iu8Q1#QcC&TSIrix= zIl8!Mj?>hQFtzi;W1~=e-ls3H&sKx!Qx9&ANO?caz9mick(GX`PrZMh;~|v(9-}z6-YI$8m{(9f@7}81QClBITF*&; zv-O@uXH_(TJ>-aB`g?nLANTE~IJ2GbYt9If;z9G#J=|aWLR48|%~ZWm;UbM4tVpMf zF=ekS1%Mel_9>Qf{7O6hI8@e;m9BmuukJ_4?g!G?k5AX>e(bdSvD4KLX0!Wo$mxf= zeE-u~W&JorsCT-c_7Lh_u9THb*{xEXYt?WFx;{|ch{Vn4o|A!Q*evy_C^<%3iw$9m zDx~f#2F-TnJ`qq*b~#YC5X!gDa&sT^;{!bSxGxrrP~#d=r&aX?U}IyJSI|ey86_TE z6Kcl-cPfmSWnd53ni?B|YjSw(uaj)Cp}DJI&;lO=GxEFO2$zwv-LM87rwfNv57SR6 z)GuHs;n0DX-vmo5CEbf7cgcfi#28pzX`P_X_3GQP`>}B@51z1x<=;W)5Iko6whZX} zPYC~l))Kb`<>O_(V~$V+Ej1Nfk&NUn=PZK*CFkxv<{I<~#8y@)icbiaypCm~Jx0=! z!CxPAE3{S5js^= zTXtr1Xx3r+($7y>(!Jye!viQk@b$rsm#Pb=IAj!8b;LyY-cy3_J155X zUKhUiOpNaz{K@#fUgJA8pSKuiAjAStHp~mUWBC>$yO;GNw!o4j7%QtdR-QKx=e|Li zq$(3K!0U!p0>MBLf&sdi0~s(NgFILjLXGC$NtGAIj`j2eqVb-9#bQp8OXv}RAM5Eh zxsdO^|JEOLf%%$H!6Kak6?7_fpN`^S-BXhBu873)67Mj_a1jKe$ zp|ET5;xrJVSoI{aCpm`eXE?S0nEb2A_t`(0eCL8H-ZG-(TmRP-`N;Sbnd_#A>8rr) zgz+R4ewCQ9?V={Y?JgH?caDqO`lR5jjrbeIopx+H>ucvSst47vAFiDXXrp7sA>Zma3PFoWf0ck+96;o3e z@igz8iu#ARv3NXTeMP{?{hJ3CD7A3UnT&8vej9zG66%$ynYfP$uhY+_iun(u18f)nn0`DsaHF~C>K)5q z>t!vSYiUO%qbI0L%H0kHpYz@(usqk`y)FN9&PL_8Uu(+cf$&@8ot5|7qw|IQb-~j6 z?Z+$cx0Cs(r1IXZjcP=N(E_SI2KEy=!P-}`A1LK>QwoYJBKLHWduaEcK6RU7Bs2={iAN|6;WB`- z6;Lt)mouUUnE`X1x&-oJtbcOe<$pM(N#7VU0=>cQ^7@l3)Hk-c|m-AO| z|HSePN7-=y9N~zF(q}-8fmm*}48KMn`XYb@Zz6UL`#K+cY5o{S1ik6ay`I$U^^>fB z|67=Lc01CkJI6>w$zI+-7n#^=HZD$Nll{%>C-DU`yI1)(i5)`7hF%24YQ2=H%F{}&xT3= zgr_NvzR>ys9Ra~{NTB^@X-B8s>K|?Pr(K6BHo=C4au%pBzkg|p6VVi+;p&?U_QB(p zDLTJ0Z%%M?;~thhmm3?KB)uwCP4Dq)S%fXLmY2uq50+aD_t>kTklDVK>fxc>3S@sb zCq-R}(lR52#OiBMzA4xH*TebMHH$tH_WQy+yR(6e--C;6^0S4N^A2d?oCQ>wy4QQH zYy(7EcY)RQz_Kyc-DG|Iiv^b*+6N^$w~khimeP!ss@D~MGTx z0tpM9ga(xmauTjAPnd5e5B0p@Hnv@C-7w!3 z?y;XKHQc}+HWRhk)se-1Aa{%f`fTg0nNa&NTMWt2XF$w8SrF96`#08^$-eXhp(@~C z(ky>t4T;@nHbhE*_2s`$;aHtp3CQYcOWAwZ5fQUT?Oia@K#H4RA)^iBhrG*y6y7?? zHt1BI5clh&4I{R_ZS!^#A??ZE0th=Ro~eqePq9rovN zyprR26ezcE9E-Z-P<^sDoc<>BD5yfFEHLBy%z(GL`ri6 zD{}-(bA&2$gi3QnXvLrVyA3Uie+(H=7} z34|+Wp*_Mv0b!v)1v~CB*PR#}!;IKwWS#05%5Wu89U?IQXrgoWYe-h})U64NE6*Bxx=A8Zhzzkg^E}S|e zP+tDxf*PfNOyMAnsU=^(ZB}zH zJ6hMi-M!CO{}A*#UP-@5Z%U&e66>Jo)EE&Yw4v*Mb*U#>+8^qet!z}^8;!dZ(y#v| zuj;+Mm@9R@S-f;NgBw>{tuea~GbH1ZgF0)tqsQ!VA<*7$BmO?w?Z(R_>)Uq-UhZ-u zZ?wr;bFko8VFP*Fkm)_PFBPl4;2`fxeHRm+6UWR)+kvDAF(PR-OxwXU>~wDdcoXh# zM{w9xaZ~iVLXqBR@LD@s;O?19h z;-_L)>;qTghU0|yU4`DT&vNbwjv;b!a`b>tiSRLaFddVXX|T|5j_3a=flkA5Ah&g` z#?PH8Omt&TE&I-Uiu-+nZ6NjYV-` zGr-J?@#-~v=Bj|v5D;X;N#^@P#+p!Bh3o12r@N-9GJtKBWAR`QXuUqKE!*FwlgGg` zg+klY_+=+&sApv=nA>04Px`zr_H!v;gXw1@b`021)%iZyl>F$lm*?#Fxq8aN#hxzk zzhO`HX8QQu)UH)SZ9Qnt-gviSQ`8=TjR9^HEPBOTW=&t*Uuvq@U)u9V`{mjtVZZvv z?Vyt^b;&jeo}=l_N7W|MXKtetY-bZ`XYSoZ!O=U-8F$LEFZ^Vz_Zlpu!Z9QBdBZ^@N4$d2!jBPbOP0YO{W>j8rM*MjC*#M*OJ)Z8qUwdayK5jNN8ErM% z6a%k8qb;la=xHVlZ{Vs);UC|8MzY(Cb(xJT5Tx(PhDdg;R~DI%0nX%O zMslCtm4Qu0CzZcWSyQBY78Vwm%KC%&aizl{5)XMLF&L2`GLyaN7sN>^166G-*%R9 zofbcghkgZKp!P5xdXVwZgDM_+R13B0Is~x{`qxA`msQ-$FP9(pRLGB`ZzMkkl;9XF z7aT8UAUITf8wid#9Sih2f}=MVqkI@pg5$W*?zk2lUnZ*zApAV`y9X#ZjtY;t1jpH% zQQe@;gug|R^VI_WbtT~A!oKFZJ{Q;Z zHCw-{LdYmPhLvKu0kYhHX1Q_0M!k_fWbd!8_p04go^~v7;sh1QWEYoiwT~vOU-9zs zSVeelrzu;1{iEu?MYBpaK9a~LhxHMaG;{A6((Vd%i!Wj{1&pSk(L_s5<^Lp_9*E%Z zKLTrj83$}H9-~d;gH_sp;qM(4{C((+_*-wXS4@o4(xnsQCvGY~UAe)Y|BmBEp=i{H z+BP5Zy#M<5lYy_fsYHrSSD8hT;7Jejk8J zmi86gS5COoXES%pG(QwZlyA1yyy8`+B%vmio<(}X+W)dwd-`j(c7F#~8;+iW4`O_6 zGP6gS=_~Izt6iP_!KzdnEAYpIobXwioH!c=g|iAnz}7|HvxRZy5sjal-1_(koy%Qj zJC|#nPiZKVVpJU(t2J`98Lv_Ptbo4-Nx|RWd-X7TZa;dp?+o1`%gQ_3(W~rHqD|Ii zuRG^ew|aRPmxUu=${tE~_}j_bdfm+a7_$pja^J?Mt}|fP5MZ!g2y-pZ7qx?Rf!P(-!ewcT`fCI0#+rjsQs=L|x$Q)jB@a6xF%wZBD z#9+$yDRex>Rfl{4?wYd10Hu32gNlSxP*K9lEi4)u1ywcq$+=q!%Io%saL{*u>m6t7 z!p%Q5+wOI)GKO~?ucgeSG{v_Q0`OUY^5lc|vo^d&%eFBcybDPZ(;U~!p(tdPRkdezxBg0ka?up`W_x2alSKFLFUUJLxCYp<{?Gq*{4C~2|S=_dM_-Y zw|hqaD^!_*L|_Y{$MhB<=?FC*93XT&rs+uGVJ7Ay0vqUfSCi0D89RrJ%yH83IP-p@ zbkrUvrjH}+AhX$Ivj-zXP+Hs1)nt2$e$d%bqAglFbXD%N7t=YHtP!^fDqcG_xBDW9 zZxF0-a@;XnLa%wFTHXu2W{s+G33^Q)Rdl5B1;*x3vu%86{mWTLBecS=>k&B#51`_i z(m-UGwW-kS~&c}sEfa5 z+txu^^jTrSx85&9jP0>sSHh|BIlmO2#N0ox70lfY9Ro^-l~7UD1oDCB_ z#2gu7?moTZbz@QLQ2ZVrP$J{? zqazxHQ9U;G`NUjxW z*s8SyK?U1-@S3ppSy~gd_j_Z(D*jt-1kE)8qcLEv2^x)zM%Bc93Eo1Qgj+}}Req+d zW(t1G)l|(-QD3S4t-T1sB&x+r1{zijq{O6(IH1E6-<1cD3zYe#sGBJGPqx4wqQJ(l zKm71RNX_DxuYT{e@OHABRo@P7V$J8-cPMJ?6n9%)|24sW zJLHGsRF75vts4L8BYFt%xaV_5S5U?-lV_aUjF?Iz#74 z2Cty2NQRb1Z7F%rAE1uz{-sx2O3Euf+26AZ5#GkyWPisiK9y-;4dl0PeHqHyh=nnW zU!@FK?-6An0yj(@NK{HT34*WBZV?j0Y*TA*YoCS?fo? zAz;}o09V6zmm&@(-f#v=NH&8?n{1D@)}y+N>U)dl7a~crqZWL=_(UktLz^h-aM9M} z0HpPlzwqnI$F!>qF8o>8f$2(BzcS}M&yNM}od$1pWIIrs=3n|;S5tIH8x?5j&GS92=Q$tY*KmH5Rj1)r9AtK&s%9%csCbwS zx!E|Z*!cUah04DnCoEK9oY-w^)+wysqTW=}aT>3w`NI=zC;TMSWteI^+JBT^jo8*1 zEnZo*S+}C{&q#Vc+~Pq(90@6}rcf}?HhkgC7d^1%>-hXBx*iO-_>g%%GBd{9)BA~^ zkeR`Qk=gS)Tp5uA6@5BTRr7j;an3ycI@t($q&KLtsLh`7l+xz~aH}d@r2l}6n+__S z+8@r~D2tm}{iN8q5V1{b*H<`(bT4kcUV8Bm+bQM6zZ)2b&ro?2`;mQIbpUlXJ0nW- z**jhR;7+wJ=@97xS10n5WiCM9)+_DgvIrXJ81<7~^GCrcTiYDv17xX5F%>!@PA%;T(@ll#oE-txLSF zTOGsdA6i$gcm1!{s>99pk_XCLP^v)C!v8>CAKWt*&gq(=?=}s=spPkDg?u=>w&ASk zsPLUL((KAI#<&EN$d9!YNl~mQ1vXxg3h3_S@7Kqa`fixM2VI{W-gv7Svt(Ud1ad%& zI=Jb@iObkm0b**YO4a*9|M3gWM!4m^JUO`WoR&V)Qh)z9^*#Tn4zwU;9hg+lxAJZ* zZ-Q4sbIvFCA-mcA9P;E=I7nanFfG@vG$A-LHHvf(RUxw;%fn-44$(Gi#YdtBc2DVgIL4ubV_~P_!3EaCo z+egFA)&dHQ5wrwbmEk5A8b(}PsQCSC%l@+S&$iytKa|Gb-dP!c8y@fQ(gINqU4GM9 z$fN$BC|y0ai>$Z;)ZLx1p0bmV7kH2-YxG$ZbwcuN{CGm}kqqVM39oMr)ec-SV*i7z%vaw3$!`IGn)Qnve1G$_ZhmV} zcl)2!eP_1XmEPQiRzI#<^_RCAcnht*9lpRDgRt*$I)8=T`Xt`|+Rx7KCm1^j#!K|L z+|3(gRk?x5tTIpzM%7yYV~!GVn(E&=r2)uH*4_Un0(LLkh3|Z{+k$pE*rL=a@FW8A zCM5`}a*dOVMaZAbc~jEw94kXRG`cu;Sex7unf?S6Obh zu)xNnO2RU$k-g(pTuH=l`dOdRaXVf!c)imM%8KPyeBit9&h*oG^Q3;Q^4Br*;nPOP zO)P|8`sKSDuUY)oXVLV1Z#O%bMhLQ@CIzN~tB#)xKIf|y=)h^qJ^{UD58!87lL9zl zeU^$##Oxsa9qU-}I=1aIGEHoI9pRrL7`uV+uha0~py6ji9Wx&uH8PDXgkQQwC9DLi zzC**W`$YJos|>cS;Hu*%BU1r?J3wdu6AIR5YxIahJ@H^twJ+F&uGwfcL;i5jls4RTy^|pWGg`b_*`6c ztz@0^jwsY?)>+Dmm%gf5XEEDe`l`)3mlOV_8ve^Q{LEj+%wU~`EQH@bBkSBz$u*k~ zE7WVQS-?6MysEioKATInep*7L0P76As)^)bvw>G_BAxvMKo4lp@kSycp^lkBBq%v%7QcT!B3TPZ zkbDmSdm6u<)+@{`9uj4=n5;XbJ~|rO_=NlAPf7?k0?0e?OTrD~HG@}0xR=;_yrcIo z>E1Jc9W#S)77O9`&qp}XWSI-fERjX+eqQ{%nx-C6gklGfx^uufH zCeGsla<$5fJwUaPROiZ3WnUIi0g{9;3uUUMieBQ-VJFT%eptH3)a!>u=39DU0u{t{(l19h?E!ooCxl@i(2Yt9-B#|QwGrzag-c_jUU zk1?=D)0U6t%_H^k;D&j;CluOno~#JM@S8dse$rRpr=oaO<)0bXDwzHIfNj9iI$xcQ z%Szf0`^I5sLk>=->xVyGOW!1VBOqbzI^^1g^DXJVb;5Y>>CF-EhDqwwMAUq4vGMRj zExD~5R82Ueqd^+cESMWrXnr{z8wILfCYnd<;v+!w5bqU+6q?7BZ$6*~2GI4f(1!O5 z(&&Qa(E|hL29sRN1OtRGe_3#;e41zrjeJ1)axuC{54ZWOw%)6rzJgS} zA6Z$Wy&q+Lh4#hRh}tcM1d#P!>k+1vz~bcJ=;U9a9E?f++a}1*{cmMyBck(@LLRlj z!5)tYzLb0_L1JvQE;a)BG{n2LK_#DnMYy2z*+Jif8|JIgBmM5=21$VOxf-V4GQ=YJ zpO&Cf!A~;kx_We7%63%Kq`9;~|W1)Kbv& zcw1aL-dypI3+Jrky0P_>dT&`92ln%H?6v1Ox^)2_p;!lh?gZd`FFIIKV6`e>=Y3ID zl_Gp-G=X253*sR!f~23PLC^C96{B@iS7l&q4S!2;9QcpDZtp6Wg1#R|TI;K`ncmlJ z`S^u{6dvIxJCK$+63#qN^*OVjEADXS`_M51tZEmf;W?3yg#E%ctM$(4mpsK?RNX$x zHc30#UUd?Mg3Z<H{Mts5PZ+jk zX%Gn9@q2wHXuWuto~9EzP3N~hS@46(?h^>NA;fpTH{k@J_}{U5eTKor)wEetVpn&) zj2g#Or0o1cyA1d0@5N)kf8iz zeHo|6Zw&9>j}NcQ7%6nh>!}#e%3e^*56Dg&K+d}F9Z=bxc&Pt%+_cVg$v>TIqcU|| z*%`b+{<*Ak5#BE9927pw*RmJcg6q7uv#CZt_#KJ=X{jM2f1i`T?eh1f*Kt2P;0u)g zS7KM>$iKolx68;GKRzez(}LkA8s`cYwymxXw#N$LC*lPL$rw$)5SHnrZSyF0+`|uF z17$HL9c$lnhF8e9%Rkr`f1*K@+TgZz-YMTE56mfrS^3NuVr`~JSx>GB)E-NxZb zt(WJUOR5fB)eUz_6V!W2NjH7@bI0%Dey<|ujvL1U{;$d3&*iU5keHS~PvC#~U-^A} zCq1AZeP#cZ7cZ?V@JIZo>X<06-G=;@w}t=8jo^yoDYPxv9xw3R+G`|3;U{7Rp;CG@ z5YE8B9{kyMqFbKYPT{xpUMdUp^8Bn#v|#$=y!vMuS>8vsWu<4`m7Zm#RjGFuD@@g? z({h7XG1J|!afGWE#goDGz`Xjtdr{}NO5l*u(kkns(Uq;MWw2}kOdrcBP?Lr9$;s){ zRjGvn0DX{1kQ0045RE^uM(*9xQc%sp3 zMzhOq7TsIB4UlSPrce0Or+ld?F8C#@CvDAA#`vLe*Vl;&E9A(Zqom<%ZT@(>L!W#M z^0i@hdu(jW=CR?{i2T0XI$eHWX`Pc_n7>4FU&Y*$6oQ^>nC;0&+=zH?)oj>ugrD#g zVXUyHObGFU6ls`ACWjwh$_4(I22-s&z#~8^ zFp~UCiig@x+kTzx z9bhXFy3*7Z6yK$oDb#byFZ`4Z#P=Zeq4K8oOKSd;3e08c(VEs-C55{2xd|oOPQ&a) z=Ffg4U6Ws4gl)D9wrLu+1=6wnd1ZhdMN!`pZKi1!0=_E$9Qk{P{C!aVcFEtjcnZyGJeru2{M^bp9wyeR#Pe0+1uAh~aat^#Rr5tL;fy<>$C{ZQ zz=>YM*2#R zQ-#OlSVQDLT3&wso0s>x%3oy5ftl%({^pkZZ}IqL(fg&FJy7gqQtzUBOC?_hDPP*x z%q>lD37iek0}P&;4sM&#o-8=NlOedW(fGm}Fmy+-yM}-%v%;AzUM;Lohf_Dbam9<@ zpyI}+(uz|kP=FW8^S#t2p(fkp+xJtxm~t1?rc zS87b|i>`WV?0Qy~)Z?}58Dc%rVm&`C){{{6h@hM;OD$CL`eatJEmml6n4P;)zDwe7 zC&S`T9)5*~+ub~nKJ82WB_|@Np72b(NU?G20{#6|Y0fF^@d(8A=y|Q@+eOZSsrU${ke*WknS+eD1uwW3Mgu&Jg||NH zA*wh-4swQUU!@e*hT3xNM%wvjTGb6=3V+4s)~JXFIE5ZmYnz#)0BsP{$)Eyu$E!?% zr(^wv~3=_Q&?SwN(rFluvHad6ZK+{>ct?adJV)a zvz)9_13?B)Uo!_!uE)a$4ke_48{c>=GSW|ckeCg^P5d}*Wka!bACQ{kBS7>>lRW1? zOa?d!;nQ{+S5Z<|O4e7X^$@nyg#y$o31n-wzC2n=+RLld)-uT`Szb{Sl^LK;z&*(k zoAl?V<|$iIp~LrHE3N0Z0WyyOm`*yI>-3b5QCk-L#{GjFbUC1HjANDD`Dm zufa~B;PW}@csQd&Z&0fmEZ3@t($KrQOe}AvL ziBA{5kLd50s_$NYzqR;%%;pqHey_hcf|VqHr(csH;q5sc5HV#Wt^9{=0-lrl0JArE z%}|DfLDu9eZ6~|QXEteKuZV&s)nwPL@>NV0M|`@`25--3fYZEHE*Q@vkE|F**w8-g zieTC6qx|rt=2kR`&wnSM^XE$jf9kwaW}!5_#aGT1?M)Zxo~BQRjU)_Ss>2WO=TfS_ zupqNZ$f(tp+?Txe452iW^r%lXVGZ=T1lrpw!u1gBbLjJXl1EGLL+y?8ayP5;&o#{R zDkmJ!ispHhz`tM|7X79(nO?w5>%77A>FU<$dbrnWKJvNXI+t*HA>;c9Mr{dzFZf>j z<=i9blc$BtjbtBT>jP}hcuMQw#?gRJv~mjOdAWb^*ueX8k9ut2{n}+R5ai8o`eU%u z>(kij4cOS}6$tXzxuv@9LU(BwqLp3fW(D0+fkM=v z#`rYBc&X66Z-(9EG$}61(!JOhxlpmN?ZuNiD&?J-NXJI?4+|3PhZ8;K0Lu2T<0!4LB<`3jXhq72>*;d=Uway zqc`@P=YGe!!Cu=-Y)wai86H4`*2pHgn9utCjZ#Is z*Qqvtj!Ir!mb{Pcc{&NnIER4t{x>Mx*ko30=-B%?5o8F$85oz^uVBMgWK}#Ol52g0 z!G?m)VS^fE2(SUSt-?t?C!C@KO5#PhJc>9{Gc~0X)XlGfE82*oI;BrX;8QT-%x&L; z1LL~G%`JyGvWg$1vh3<=nek`-Gf(s?Lt_>Dqs}AR?q4n9_d4!Wen*X7GqJkoq|ZJa z_NNEN>SLoDkzofjjHY}1=@Vnz_Yay6J?4Q2U_{4T-iBv*rz=ffwRGcoE$3+)aO;t? zbje48U&@iTOw#?^P(Zt6ZD(QDZ!n#g6K2AM9yeRY64q6FwB^XSXY|hgTl)S$F?w>_ za@AAO3b1a#H56aZfKStheX5U-ZRARc--Ufd>Wt~IkL~*i6pn0{Z`-FjT9&+K(Z)Hd zqtLp(hJ|E2bYNAGeZ7nfA*>nnx9wBy!=+Yf6$Wc2vUTbC=_s$1+l4Y%7FR^H)!y~p|5>U_Q5X=1CpiFS7r z+g(kx?Q&<^?asExoo%0fDd$kTf9dN)LEW08ee^cQci&iTUeyi@pNXT_~ zh^A)iQoUmY8M_E$Ar>(>9MYd!zp5pc7gup*RTf{VeCxMyUD5^cr3y|PAp~D zA_j%o0ZKpoH}3JW%id%rWrUz$u?J>&5D@Mb2UXbG1FIH$6dKbHEJH?0%|v-dF!izt z`7J@Ra@e%a1K5w^*@vTdh^cf>WIO?=lSKfYR}_F> z9d%23Oe|nO|BijSUBJM?&r%a&I`{U{PjRTX#yOMVnL-*4y=AU6C<5COShts1gH_mE-Za_X>`&yxpL;c|= znV-&8TW7WW9WakgyE{_V=&_{z&-A zj`>nZg*$4EsH#EKetf>3Ilp=aMv7f$VcLRUXH+aOJGwa9Im2adQnFt(lY*JW2V)g9 zlPtQtiAfm)c4t!r)z0E6{=4JH-u?f6{>Fx-3PL+&;OhQCB!h6 zE?q2C=np^9jaB)@uZSX0#gV>(qc5m9;tKmBD48{gU}x%R6r;88`3Uk?kvj(Ss5x!4FG^6oT5 zatO*=#7x#0)%n(P%6t@e`PX}GZnA36ItDnKAptnaQLeZuy}WJn7$}pfado4{oI&|e zV??A?_bUP-_5_#5M>o`y$We1mpgwr-PM2wfL+|HluhHf#~Jqh>-}; zVl&z^>cd>*RUBIB&{5NSt-ji3+A6mZ@759Ms18sWYJE4@Di&FCpWC%vKz2?eLF2enILFOl40WwwS zRjo6O1aKG5NcI`YL(0K3vE47K5xqBo&$%qXK67yS4!!IsOKx(O9cZTJWlTm?6lF4k zJXmHz6=%O=U8cQe;Soa6Xj99ME>CL4f!I+(b=D`d<0>#E#`=sfOBmP-(*Qoq$HxpE;6RPF`YFCxWT-Ti$N34?n5e%RPeXwv|=a zOZ!|W7;O+?R~uGrc(+UR&6mm^wP&lh>B<^V8I02Mzz!r~?h1L!#*gtgADz#teKl#z%|#w0)h??W0MbRb8e0Nv~6ZX;jPeI7|JN~Hm_S)gttyroAT*S zE}pcaiDwZP)GB+SXd)r^8BbBs#OkX4(Jk`(C+eEZUjp`eHTKGN&0cd{U9&_+HM``T zk$jx^rl=E;?lLO2GQ?cb5$s}x=JtQx?Zdh z*$b;M`x~)7;UI>!4KXN>BeF}mw_>MACztLNeQd}*BFcA)x*Rm{n8Mj9a*OQcGSYK! z4g(p|k5MGWW^hW8$5HI%jluLJ)}>YsdR)Naf0r>s#sx-19|lR>7TL*T>g?p#ZO>9< zCy(ZS205$5^QhSr;F7A3aY6dfSeeL1dOuq31RUduXJ7tvf23^wX#UM*^E}CuTa3A@ z&Q~f-FDsSJcmCI#%I2TFpv373h{NM$viZN%-3jwiFp;f!d0W-MWtvu~e6XDqSdpew zK0oetL{d@m+!$Q{s~PN5lqLggU;uR|2kH|L_eJ;|aS!;GX!uqEz7-|n{&I->*fGZ6 zg3AS|q6+<1h&(+qzO=`UzClKgAC$gmX&)an*JX!|q%G}B`EdC*&D&+kYnHm@m63Dv zHssYZ$}94=2<_6T!q_p9v=>%VL3n%|b@FIoe{Tpo%keIym20j>*p)8BhbZh_46P$F zzeL){hH-}T*O2yMx3s4*H`dA&FyXD!ZJE!Vuhx0&DV_}oI7&AejYv>3KFNjLwmtG( z-;RAHk@28E<#Bg}@<7Y@vgB2Z-0~o4xn(@$!D7mTeY)w=2|{h9mI}3Gscf{xJjG*~ zm}gpvnBU_miupaBHxct=ZzASP7GYYxM~jzb)=yWyWXrb!rngR3M+9qS6*-hXU7xx- z{6y@?Rr?c=AXy4RC_L#SKCv!cv_bd$sq`@b%gvDPCamc!l|c|Q%?vS*$KAoR8vo< z!eA$Ss~{Fdr;bq(Tkgj@+OAA8;YJjm8gNnKDl=5JEL|qk(iuu`l=RS3 zBd5U18LCgsP$GQ_xxd3yeXpLX4^iSD$}K3Jp?Z(L=?rzHYA?44)m>Uv-G5ZhP&)7! zB>dj==DpLx5Bn+Y_J*H$^p+(!|L#~V|Cl&!ZpS%E+o@;eH-$aN@RJY0lcEvZ1ODBk za2G|4uNk;WI)JN^LUW|&c4Gqm0vBXs>4UhoC_~1d%X?_Ql$S0AB*B~erH5=OjnPTt zsmoKmvHE;av_2XasFvtKOoVKqbYMI|c;?pZ7qR15)D6%C zXArxr@%{E>PcZ?jp8aaF-%kx;zme?DP2*&LjFbJ45gW~2FeXFqnb$Gd_o>PL3O(6> z>K2*l=`a#v{dQ05Y|8T64Uxi_&N>B@HMi%sc$^7-%^mfPHn zsqs`kwRgIv_Grn}UYs=EwuB9TMX;QNfm2&00HfexbJJ#IXzruRNIz3;iA%0E;7ZjrwSLHF2s}>uFs??9a#UHSij$Z>YVOwp7^do`2t@{EGb5c|CXk zH4p!zJ-Jyh!LFq(K~&#}n@$sgXwM6C(kHzsU0|6i0E1@_;5XJpb;=13cj?_Jg~Dq( zrR*51QePqP3p@zSCcrO5FEsEA?mf>2e&Kzg+~+a!9>r*`CPcXdRPiI}Wu6DG6NuBF z3XDGZE|^k05b`|u4hIxaL}ZE6#YlQ!a?0uAxwvFXiqK zwuWzl2BoZF<07+ON}p;?t(K3&>C=Ces+W)dlOFwG>MEsKtxvrjnw7}w3+2m5dNh%$ zkuQH}J7sy4ew94kb{b;chUd5BidO}g>^kpsBN=*A;BW>7;Mz`u6H~VVzVzt))CT}v z=3wdu`S^Q*;63tTSOoXAlKww!r@n{G0%r2nw$s2@>JnPRjLuA*FBwMl#5F@QoJyY# zrbJ}NPUDV%;*17`OWeHh%!gjv6m_MnEJ-;@Ua?aStm2Wdtw!GU>56;AnqO*^sY;QW z7uv=zYTG|z&hX31JmPPfB6JsSQT}WsOszB>LI7kQ@Iz7UKbmZ zbs!FgLJprA@u8MGKIHMQ4_N+%Qco`-U5x1|Io6!zEdU*R>nkH={i$YuM(7-IB!C+S zIEkQbNC=k`EJ~&kAHScQ+Ni##a{=|;)FJ&?`PZgnj&W5^%W4IvjQ^mAWunEDE$$T5 z=wE{|49~koGnT)0q39Z-_-Z#cWO`Q*Hb#iH=S!N>Sh6s$IdvhhQ=`J#k1rwCCNN$) z6cg&h!RZ0l(V=PRDp zMsQl&mpK^T`b83Sl$7&_GuukII8wsJJ-KsaB1|>8C~3DHR0OMg_K%=zL8C~Ahy?bJ zYwRl}iX z=u+v?yHg)g+)Nh5218FnM=EgE(P!6>g7 z`ZR?3_2bMO%iP1-nKm>XZJYJ7IYU+vFdlKshhr`Cl{k3qLW%=kqphHhw~{)6a3=4m zq)tOAb(T2Pxg&LHDRpYx)Cnj-p4;V?1)l#;r^%z`lJaOvK%wUNe1)3NPA-aWs06Z% z4L>y7?+B%~)20**XD0c_LE-PmMd2?h7~B`mBozr18da4I#nRXOAEqp>5M1B2$J+lF zl7~^-A$j;PzT|O<7+<-F@#{hGXPmGPl}*@(S_ajGT|1BT`!f!szVczz*V3=r+JAxK z70-CXhy$iV$o+?>f(KGJm(X8iiKhJ!-mdvy2(kR1PqpYRA27WwT?z^Ra=t?Nt)-(S zkcvAa#Xv`{RlS^&K6Q8MD%Hj6^ymWGZ93hl?2FeH$lgGa&(6gX^Uudj-DS+w-Lgyd z?WeU$Z7M;yuM)^Wh5q{g@`zN2HIwzjgd-A=tSr%_i!<|geC15*hi`l}!KFd5OY{WS zcAA`co|55=I^GbdQ$r;aWT!@%!0(Gnkpjd(Gb#Gr|uq2Dk8V76uCdr$QANH&GxUUW`{z`T)BL{*y3^K z3t4`rbcbZ+{pS;So#g_rvt^4K4?mc##`^ts-}G%RSsc1uTkWEy%UB*x9=A12X^%a= zW%J{8twH&{y!G7tB}I|u@hOhZ&vd1E$4Lw5u@KV{vv+(xR^`Xvw1z7G{mZNTWAeB1 z>MH;A_f-BpE&0aeZ_~9^{vXy?`K{}#{2!9PgUc)Lt!aB$%yiC{Qu_yPJdnA)p#0Gm zPn@!ACF!}?BWhdn9#8A_#eKgP?xoy=)25Cl>~ubjUr*}=W(E)X*ePQ2qX|di@^AhZ zaD3aO8?uY6Fte^cPF*joq&ew{O_ z@56;#yw8Yt!Y^T`5iyzqMpH1GT_L$dDMIQ|I~AM)L#K#}0}p#J3x{E`A#;s<8J2Yt zECJUSbpww{NR`9_TweS5{VdCgC* z{p$tA{p+V$DiuADStk$d^v`kRbr?rpbM$eZDj)AOI~o-=Rt2A$BBisb<0dP3<*Q~E z|JqWvGyOooBh=&hp(-Uyq^WpkKAKdRtd=I*o$2KsS+FFJrmyy-!U`5{udNC24)-H6 zetCYU?ZzUh*)8YVhkP#_1ocoPH#dOe%|~$jXk?eM(??;Cm%%eV_ja0BD$q9{7od5l znOUlPHv{lh6E?shVy5%JN;O+#na6dw*?|Nc`GKPc)X^F_h^KA?sjA#11#Pxh@-;qS zgmz>*S_(As9#Hb2(dj|@Y5aONUt4ngR%>RFthS0??~{&Rg(I_f;K(d$W?-{Tf6{o! zed{b7(V~Hbb=_0;AzVYrA>91pA>3nq4)%V9bFX8*@hbfwPvb^yh2U}BgRJd&;@p?Y zdr+PGdsJu8L~^v}g<06y)}#eWbDzW)N)0x1yGBnH=Vk=!k)nl2M)!A4@;rh?3&b_yTj> z6LTi7S?azB_YcpNiITEIb0q;vrI9{2A4ilxU#DG(h?4j*GZEC~W5<*nFlUI|)S_gE zBTCr3eLdt@`co7of-R90T6%~m0rvRfL(NLWh<@^Q-f#fgcyQKj#0GLV;o$5GI5>OS zhAh1G->D6a_T*}zd0t5#Js&)JiDGK)Kyun|8DVfnN#efWa!cKe4?AJ#3-D75$z>oGh-u?DD-u-$aR!4c`G`7e!uMgsw-clZlXlOBPK$jfh?&>HM zG>8u98~SLEc)#sdGv2=B$JW-5y@|hUo_BDoE2v_Yebp^950QTpff zsw0#=hroQBbwMR|ibe$U#;`HAhXdW%(W|}|&7$2ldvJ8D4LFWJi#j)@NOR`U3V2oO z!zOJ5U@CA8Pso~_<|Z~v5XGh#-gj8RegA*aNI@n?OY~po)XKTmW#5e9y&xjbj7Lda zwF(PjmpnPv+|q+FGY*O&=oAxH~D}Rl+ zV-gWY7j05jT`Pk;$X17@Q5>4i#MKu_nFx1qYeeEO*8EfyOh%*65|3h_M>9r?X;vJG}L)9=)`3R`r4KR&Ao3zQ2Zdx@v%&RRM7M zZLYWIh6JISu9`@{z#BGG2)m50Q6RcTUA`YJ!Lhof6KHkaZwq&e(*IuQp*05@g5P}R zoB!Q1+n%Xj`GI_^LsO}X%0Sha3J_BPVk+<^_iKnrVR((cT8%yg{B*fC{;5nNxtBe9 z?JD`sA3xv6VV6lKx3QWgJIc7T{F_pKC25aG&k01VfG!->6sS+sY;177MK>%37o$QT zwuJZ8tO8_1z`$tqidMa8b9+dfg-~ajmcr4aVqML z57#%=Z1ClO2zlS%tRlgd4tPOKztpQp8a+T+?8|@FROex>4cYk71Y!;L+X9>2h!l>5 zpXe5y;ceOYUMY*Zk14_r{8Sll9f<9NPMBY87PWjI&XlCNDkHwv{vKi7lSRps6gXGP z#vYTJ_9}>GK23g8xg-`EO@1}=B=;JRc9W~|UFMaZfoWwk5;otWJLSbuS= z@|{pR`*CA=NVOS$;!#=#p2h?h&iq_e-PVbzO#U1GH0~3(J*8hGo2ql~#~R}XpVr3u z{k9#U8ti-2jQ0VoqTtfYN?6Z7g=@RXz0ECmD;j)#GH4KiA3)q~tie^CpenjoarO$8 zaSJm>mvrY4OgI1Tw#^7Dxw7?g_vl%k9D{$tVQubb51Zxjq0}U<2!?Wdyc%I@_2iTF zfYLhc*}cHd(_)_}q5a~?#p%LuP1V(L@- zaAvLzM3HL3oOQ{)_0NYhXFXu%-E~qI=bF7`lxaFPLOw_*ri$hD%U6g4?^pWpZkH3>d~Wt08Ra zx+yXUXAQ$;g3Lt`5W3}%0^$Fv@+kivdwDZ%Z|-(1PnN$9Yrm*05dPJp(CnhOsKU5( z5lt=NJUd34)uxu+s=_r@TD!=-Bt`S7vaU$sgIDva_wr#602vTcpWdMeK zscUUTDhfM+StvI{HFu<&V)lHes^txVx!o6k4)@#PONy4Rig<@#=sD?w4%rx}d!DnW zs`CQqaaW`DS+L7^Uv7#zeR70>s z(u?JZk_sl)mqkqqr3bogrzgiedWH%aB%TRZF-_9PzttdZLS-E}GU2Soi{QW&J8-KEv);w-*L^Fx+;n{(k9+^ZR zo-5$9aHdRQ3&+OR=f*GYnnHB>T&$C?p2~XcYl6;>iqyA2*^{$iahdDudXW+icDyat zLgN?1@j2OpuVEvzT{$|+BnB!3$rX>BN%kU3&9i;TUo(&}5Yi(PF@E@A4z&18@Ku|> z>iA)|UF)4;fe(J^AS4fE@fGPCR4dt4k07|yb<(9sY%6BbX54rkl|tKyrt*3@Y}H)>7dB6Gt-tVL_lBHQ_WqrC6XBCY(s zS>9t>WEa2J%6q#OiSzpwe(yR+ZEA9-7pY-MJOn5kPOm9LCFcvO1Xb?%s~LxQj+ zY}{^x+npl+Rl1D}mhn*-{ohH%cP9%X1RAH-G$(jKet9RTi%S#t=;9O6!6$fmrbD;K ze0C{;Rm1~BT$dK1BUUAU@gmTjORM*5O;y~gPik$f*1~JKh+h?1r`2uXB2}u$My+Wx z7pYc7YPE2~+zuDc|8wU2yJU1cVdMMe{QG47{msTB=KNR5{I81`y?OH=)|%Ft&z)LR zgZaE)Yii^!w(xXHcX#mfMt+X*^Jac-=jU2xFb_%>v^u$Pa@c$g^Xn1wb?dzM-*`SS zDoc5Pqq&SYck<<7aU@BU-#L#%HnTkK*KcIeuX19!oFfKd%-a6_QZC$>Ne?G&`Sg%E zxgL0WWVe5a4o#GpXx@zxMe{tkZ9Ku8!#Y0kdbD1?LDj>*N&Y>8fmp^E58bIp=OrN5 z+P~vBzDkv8J(Uo8iUXjtc*gqeSd}=76fsPd0o8)z$s~HAVYi0OzMa@!B1$noaZ*P7 zj!W4@|BkTxiREWL=C+H(BIGo-e6tK5ol=ShJX7m0TYn*O>j@&hHh1rUzUm}VO1a8b zzUx%9ljjH>7`W9U_J8)?34&Q z!G}Ls9L`YDS9W%Y^On}wQ0OH}%|FfuExGk~VEp~I_#2Gh-cB?;>L=VB?AcDqBOk4>r@ivLuC2l@^#dCd z2dYq@9|b~HTBB>QX9s1n?T`X^4i^=uM1jBL7Ag^`p{Ip19YG6A<$1>^E9{8_)yNj( zdaJcY&tOk0eVS;KZ057M--7FFHlEF}R0B>Ye`r5I^LxxQPAiDR`=B7vKP&&A-D}IUcq?&wQSZ3J%(AYns>ie_)+UC z;05yVoC^~rs7&ODp4PaU=6YU3=f z>|C^mU>&ydoJJcUG>~3QD5p~tW&ELj~T+b7qFRXf6F_Lz5NZBvqkZg zyQYpT%8v&**wg-dS+lW&i)26RL~KT5TNCeR^8N54Aa{Fy^jh99Z}(ruM(WYIklwo= z5fvA~eKTh-{tA=Bwn9Ocy;KPqBAUqo}r=EyH3&^1rFhN_iEVF zNa`b;ir>8ziJ>eGtg{fXgr>Bpp+lo*=tsEdgIx4Y(4R{x7k!Y6F3zVCh08xrzaz&w z6>PV++-7cGad+$qDsFuDF`@wnL~0f`jxMn>xO;~4mKttZl`$i9z7Z0-zxxW0uB**y zw4;VVnPiIf0V}b1mQYnH#|Mz(jnYPJkxBv9I+e(6VW^T z2>08o@wjuMPdj|dEiE4Er{Xu+SV5H0x=vGa%yv(OT|sM(3b%?L(7N(+kaxHe8a#O9 zPi_1kfA7!h6`n1B;oiCHzmh{%;trRa!`8yMR{U{_S9S@=`wDe;XTa03erMvqE4USk z50UbnEJ>s<;qne&A~@?v1T&7E90ugPDVuSwzL5A?7G`2maaS^B<6vVSrM0>&=#Ae9 z=7aE#(30^LK3J{+A~IqIqF&B@3wuVrQOb0@nafOyXB7Q@6kB!}+2eTuMT;hLT2n=Q1^#$-rbXD?B)pu<}&M4dO@?UaYtrwgZ4 zldQq-W+k0b`culOxKIRw*z{pfw0x$5@rZ+Jvpjy5Pp`89rX%hIF7CjIFeJI?=}fb6 zzs4+3d3u15Y+2A3uYy#a7p}Q9y;z#l=F;@V%hSC&-zCMC>*_jp;zpuO#`BjHL#FnR zn`qxgo~{9Wm(BSjPg}8|uStcn@MNl>nn!>n;{hswGMmguw|V>hv%C`c^YxsOPwR(q zz(bJ2psNDS&$HcH{1AswckwoIp2r(3A;R>TQbUshi!&E zY%-K5h05)_Znq334{g-7XA$;xo-h?K-pslC+I`m`_PLpJFXE6t03Msg`$|=uqY^v> ze{2a)-;!sLU{29HGHe~iBT{<~$6ZEig>@`uA!RG_WWX*$P zn4h3$b=No^LSAhJY+OoBT#g@uXztY)G%$)v_6&6gu|nVasnGZN`OUoe(ZjQIgU_$U zviNw$cBkIr*rvBT@6r#rYC2tdtp^@q>@~k1$d=oGt6!JwhAooa{xjXFMV-km;tB0N z7w)yYpBSKS^<3=eY;L~Ocxpc}$Ftf2XHPaBY_r|9%{YOS>7G|QYTBG1N*)+{`P6`8{K0?K`4rlsp#-GwtV)pa##kUS%>E21u zWVac&Q!15Nq6LA?S=cGa`Eflj_M5UDv)K-(@ufYg^%X|;bExMFRL|o~0#pI|wv000 zX}mw{q^!*3R^Vj2?xXrMcYpYTiLD!c0R3TEs+diRI(*lrX5dDm)}z!!;g?VF;r@joMMys6f1 z6A$IHkigBd*BHj|s3#C{?Yu@iF-1gsf*y_5FgmCw^K^Xbk*r@MXb z-9RF2jRanX*5qH!xd^ZN6Q;9ydHjv^Ymcv_Uq^g7{VriC$>-Q!nYWS~SWv^BI3qiV z^H|@%ChA=i^l8yi8V5Zzx-2xtW&X5W?Ms`JteC*Y;m^}EI7Ms6=3nrpjy*{2D zfkczaFNV?dB0W^e6xfe#KIBwx40nJ$%i4vr9YRF+eWT32h`plG`9_SP(vNp_R@m~M$7aiB>tCO#DjC0g2B3Uzm z#{Ii%pjho^#cJnn;;+Y*OTXYupgz9)k>=2oGpk_#iy+YC&Jh$96-RLWxIiKl9o4e!7c(ZDqE-OL*5P z1IiFGV)+2sDsjfI@VoiIl@VbJaT;_yHF=H88CFn&p$ca9l*8}&EcyX;Jo@3$p!xOH zU@!Njb#$e&#C{gx*eL5SM8a*N*cGGsF4&jZ0^Tio$x^#nkmM>#c$=`(bD`0?+SV z+{YrVhMdu$a?Un$Ij729gUN|I*(8I_Xob7RFbUt6n`_OH?58Wy{ZL~WRv5dFBe>Y2u{3U_^i_07)q)ZTuuXeEVq6QxK zs|on3L_p;?xQy$-svXs!&UenmAH^*0p_iLeJTJ(70z;W9?;z5tu z_O>L0C&F#)4lqJ|suN1;SAX7&V${QMdrhQMuZ^#++uw}$2>q$+3>R1r{`mJr9ja9w zI>8;v!RdrCNft5h=qKJ{8QsSJq%~ww8z6qer$tvg#72ZPeywwV(YD+7f{}DM8AKxw6OWD*?rXJm0DL$cq|k- z@Xk9Pw<@|Iwt@xScTj^|6~YHngR1fEXb|#0)y(#Y>SujRZZ^O6@_Y>rE0Q1z6jcXd z-(fxM(xMNTDIP6!#H^P%_oF6wK3p??jC=A-<&(>8xGaAHLYWLi5at*#`px1Htx~oF z19>L2;Bj?krz3^@nUX)O>T0tkLx*z%_u)Acx!R??<4F-pVIt=rs8=9asL!==(BsjcXhVaC1(OHfp0Mam;8nu}_G`kZg z)ZNag+sUd9Lfy_y(Mfmrw`~e_Ki!;^lwDx}agF6a9-56NDY7=~E5dmuK31$*3Wtze9Q}@qWbBJdJ*z<>rP(BQoM$ z=kUyfzR08(uZ8mmz48w<=u=G6CljeEKG4dDW9vD+{$eu=4~jWZmKsRg@6bbi)T7hQ zvC)q$$bt5yx>IkxWpETfKxPf<>4bTuZ zQL#o}Bvy3=APAq0Vm86F|FB4nn9VF9-k3ESGhGK}5Z%_DV3(?bwcYo#eK2i-OQ0}{ zIF!cS-JLL(_R$ZB(S%^xD|b?f>*$FqSLh;DnKCFG;E!KWYdHSILpw`g!QG7 z0wb7*e`9g*2l$*+MHvU{U7)X&SO(#_fpc}LjW-R@RH6g(@k3P>ywmb$LjEX1D=sjD zp26CU>uieMiLpe+#r(~zyStLt%&f_wPeS6$fz0SJk3;_v^@0b|$ot@6%^wYi9sI@= zR-9sc$`KJ_nl*dV%I+YKnY2S*I*vretUGbHZ8Gsa;f;NKbSz_nHwkg5VlBr7l3Iqu z>VyaRCy5kA^l&UU(0}+C5Z&sKAJLgh;wF34Al;JzwYnFJqz9@x-u zsY(2}f@BigMyR@x&q31zFFKec!-khx9S;nl`IXPn@;Wgvv4~y9d)U0$BL>WN@Xj8w zQ)fEbX$On#fnNl??y`fGrq^9XOtGoou%>!e{wVLdBGe-!cQKzetVST$`jJ>?zOawedY&OZJE`%%zuTs^6drSIo0N#>c^ww#o!4bV*{EHqkvgG9+5j~Y@9wOG zR%#@oHr}vt%{PIfndH{Ga<&f2a4^YCdVp78i+SK^5e3gZ7a`}ghuJ=!z=J@8d#?l< z-Bw47;;rg1pV;B-U=OZkM8DD;7|x}aKUAy`F39iUp@fftAp9+)*`fqy@;QM)4*ppa zqtt$!VbcXX<4WQ>0B2P37$6|A1lw(l>2hhZ+2?*VyvrV)O*Sm8hUWbopRrnL?2=nN zKAynV1nqTGScRWo%*u{1;mC83f8gI7lflWN4bN+l~JD1IpBs}=)w$> z%^9TO65T|kq*6utaw5SE;lcSf|l=@Z2xR3L9JSlaGx*$vF)J)2wJv$-?W zTAIK%TN~mT1Fs4tfwMVDpvwNE7dg9~jd#GUM8HQe6%Xt8ACv^Op?#I|raqNjC>piZ z{|y%X^}zb`1{VDn+68#l1if?Y0uro@f^qs@RyJAc+i6qTM92GSQEu^GYpG#!>d3=BGCu&e= z^#Bn7^J0GMz)R)LX0vTetce-h%X9=WGUJO_r$5UllNmeC!855EW9-P! zuJ5u>4|bhGRGgWEisvpBX<}|= zLoJ1rGxH$j1I48l^8sXD6t(oNHgl$Yi5GkvXIv`$TuzVI;WOpywejT^|nn7 zyQUiLkUtLg^kwAU!C=oB^`uMe9Tr!7&|zb_#0sr9BbIvbF_fIm;F^)`k}3dsM!VM2 zpJ7%qG0?s#iD!5Bc9sC*x$7lnk9*OGE;*eV=h8WiW=QLG;4(J%14sU(6R&jY?{(#+ zd$gqIl35CJwH_~Cll&U-X}vzYKE`#L(zUadm&EU#R1wya;k+ugYCT)?s%X)ATk_i5 zt|hnUGBbVDdd_Fy@({m~WG@CoHaWlS%at$!>Zp|p69ch`*%Hl9lQR;lZJmD~@bx)r zZ3k07g)Ano$u-=h)F^~G^;ggo=Ozu_jn>)XE}52ctk|XUEV^V~3^L%d9(rYp5KK%a zL{ib(Twl}_3~T2L+jxQQtF7Yt^;Gk<+!UsjMgxVlE%V%lJiDdo0C15 z#IUi{C-&ItLp#o%b#az*N=hdPSKWRbhb2X+M5auY$h4WRw2}N~=UlpmET9=PpfJ)= zK7L-^l-;7LCMLw!IzI>DkvU?&EHX5F*j~f6ORL)bNJ%}&b7U?tb1|3mMl!>T4ii+t zPvWz*6(*TqborbK%bW z>zfV-|CKXs4D?vvxKj)MSL`4USN~H3XUOWUMm2t(MMv^>mVXGf%((n2u zbO8B1aH`7RLO2hDo6tntMoWC}l_`7SXK3a8`X3ozTRC4iRCE43`SX{N!7wkT7VFjeYFOjop z^_6DKt|zW7fK|bV<(hwA4~jkDXADw8+}HDDLEpY{Ez`F)Nlzw`N~;ICX+`+5YCKAq z936sgBs-!fy_9KL5+yW#)_d`rc(zRA2b=?l6r(Df*gosE#nRqx1E-?&!ei|m|#oz}C~taF3%Ns2rhHRZFJ@@&@F z0rVgbf?=hEKFtJVN}sov2hY zAJt8HU~GgZ8pZ-fzlUepbPidW7(lplzU!Mfx0p}LAoZ}mb=cxd_$E-9l?>V467zPD zNQ^tFqnqkF3$nVD`p6~fqdC=3?atE4o}%R0d-`20nPjKAD_Gd;uyN&{!8)g(7Xm^K zu&B?;qCOW3W2aSQN5~rJ6Gus;waEq(G@Z6g?)(ULJ~d)jRe3o-i=pcMj4%GK0Ye(n znyPr@-o_oNendK=Kd9Va+Hq6KqdjOzZmYPiYOZT7cZ*PQEn9@;8E!NfMSW?o^XV>^ z<83b$<#-$C$Q%AQn;HdUTe>LkE9L4$c2LO1CPo~FA=iR`s;E?dxw-8tT)4GBXVIRQ z|E=b|o~UQ=kR_0Vbj}pW!N+rfd`@Mw+435JAPLcL5})R z=#d9x0<;J_mSKypfeFEdT|DT!ged6n_6hkrF2#jBYUS67amQvI?k#J%o<@8Ub0|2j z@rdIxQ;59PoWiYaP33`o7HV$cns@N09b8*0<3Yc|1D3s^o-UCHdNi@3liGw$JaSm2 zut*ivni6X5umY2-!n4)|GhR!~FPC&yBMBh=Fl8hLsK6!M>z(oUzYLlDDUD?j+^rr*Xs6jwm8?>Ne6ofR8L@h*t_8z z%ix@TY&_Hu3J(S+{`#9`_kdbEl@Jy7H+&N@5;tw*eGoIu5HU(Bo7;Sbz;aD%gEzcP zB(~w>3-JNCL*3?2M#qI$amdnp*YnwINe;!72eio{$hDxtT9)E1B1{1!;aKYevjhV{ z4y?`Ehjr4SwNi9r!l)HrEPqJ!J7pD~D5ffDHU}Wg*kX&nolDnB>CNG`6skW z?=^eqlOB4*ZHsvne^{Io3~@|$Jm!De+??<4i}R^0iSM0O{l+NanHxBC3J|opxa|Ke zE_>1}%P|j#kw)1wR@pu-do7o}A+Id^1l+?}_;8HK>?{lg`Lk~6&IY2sJ$DHA0DmJy z`;?S@_MQtaSjRe+3R+(bqiw%i0_AMSLHPa85_HnHEYe2m1F5I|c!4n8j zvS*9QFGs@7OmdIg@|m@==WwdYk8Yzp{HI%Em~UdsB`$^GUab7qB6bW1nb12tiDw*7 z-iUV2A|%GkUpGY=vpP4-nis~2B$troRwYe8GtA!aOE9qc@<-kf2=?6Y<}qb~pm)#5 zdHl4S@=YPW{nJa?^asol^yoBvk^DDyk1oBa9iB7rYH~m(?d&u^lfJ*eX4}+n$U2ja zj(vzjraWLc#NC1xnubZ@w5*4i(AekyrKq_#x*rdE;8KN$rk!^t+%lP0`OEF!sgL9S z)8usGyd$dL@owPy{YyX}|RCWJ-J+)8IP`Wio2NECcbm zjRqcN^gCS=X(6Z0TW8DD0P>uu0MvJwB!a3BbG#q(_S@3bw`e7&9xlr>0%3``eh2)! z)#TesP5;e^Y+CX-H*f;Kj~(T~I>wbDC6L7P z?$7SKM(;(wKreFaZd3J0FFp1M0pM6!SDARJjH(2U>Tv0s?4S4Pw>wsTpfd5Bvc%79 zTJHl~`w{$}?dBmn%tLmBYsT|#FSXQze1RV1*bBYzc2i2ulir$0m92Tc<2q4y==GwR zX{DyuoMUe=yg8e4br1DG{Tg2n)7asbvXHn_cs3Bmum2FsaUyYGf_asR)G8O-&6RP# zAWNY?qw;4+{tU~Xe))4={`AS8GxFz@{9#r}kM=E#o}n2Ho>~?>?e3WG(nWhWKwOt1$%0biLDH_-_L>l_Sv173XXgWse zH$-$&*D+-}Xb&CJqunc`$F)!&TmAMWj56v0kT!UVtymxKdJ!l7jyLNF7f?p%7din+ zLz%5(nI1hsU;V@vR-{HCZiV*sW`+WzG|5*)#`Wm2Wzpju6{&v$RSq7s2aoBY?vmW?AeEebptWTSY@TiUJ6@QKe9 z({{Fz4@778yhlvu2PPaE8@lUB{yn<9^J!!_*x?lec>RHj{YVLQcfdWyqk8n9)*E{o z0Ca0TyYRp@2ST&Ey#%4wyMsR-*Lqs%fn7L0ZK^t2)svn?nwD%w)?TD)y>a>_-0nf$ zrME+w?zOD&_QV<&7#=U?*S!RTGh#=evC);(q38&Q%^Ttkc$m>`i0z#F?ZJb3=={o1 zw-)TzLg!Pg1?3f%==bQ;>tPn*F*yd~>(`Xo?9(e>(>kWK1JmY0>uIsT+-^OEt*5Ql zQ=|2?#d@l>o*JyDjn>m<>uH_!w84B@XxRq)mIbkFL#LL7XxVaEVU#N4 zvlFdj4_D=STC}D*f2LuvZbftJ&3cdjX|-TWO?PK*y06!hs0`6<_#yThRhwOP&||an zcjDrZY})#SQalL}Ejqn4cU}%7|cwQvZ! zDTtD&hiXMV&9Q@@n173|1orhgtZ|LsJ$F>@WHHwr1=fNB|1Ei)k8N3?8KzzlhdJi! zFW7mEWx!WHuko9je3gSH3?@RyVIqXJm?~$bpY-zMdJ?qBo@6ZP1$A243q;X4UE>s; zX%zz6B|)kZ&%?(k=h@1oK(*|&b2HIeNwl9+G=5Ftra>2-i>S}LZ;VxbVu7O&VC!H+ zo~5;b-9)w=Y$x4}`g$_Vz1_&|Zsp!?<{Y!wtsba2h=z|=bR*4_p`?EL3iX2n4fb;J zUM|jLcO?_h-1>r$>@oVb9Yp9-wo~zV(V_3-*YrQsZ#KAy}1d@1l_wbdC=xCr9=^dRiDR$lpWL{P# zH*>k!r_fC1DG-98Krdc9Zr6jufgYrFyiZT^geBK8h&*S#8@OxJDA_xMlEMB!4_+Zu zI3GwN&E5T%JccMiD+HBI{1V3s~`@{EgoOd+8;{7~C4{!sK z{14sg1G*K7)$Uw?XwgbZe}Heb64!y!bW{)TqN6x#BBtz&S$c4KB~J*_A3R}$u0@^O zA>6o4Bud!xzwo3Iqv625fIqy5rN}z)-&xc84d;qX>VU|@MIiR*FN(f?RAk^enc+onVvRLjfn8Pk2 z>FEqa()*`vY$>vVl34cBYSc(Gg{J-!m=aS#P1&Yt4R=yZe<*WfUB z3GB(NO_hpiY~7Z-428RHEQ5-F1Q`(XsBurTh^3T0A&ZxkU7ZwHA}4i24VR-HgGDp< zK^Jk=?GDX#1j1hk%QNZTHd_qJM#&RaUa0i?+OP=EB1HyQhag{In=1wjzqa@dA}5Q) zGO>l!i!2pW`h}HqX6>0@&zZG<{&n80IhiX(J6aExRZSFBys#o6+rB~;ED6^_BnslK^4@A5yRqDEOS2hXGIK>Yxp)%3v zI#)PW{mJ>YyXcJRcr3R!@%(JNi#11jhf_b`dim=gy?c(m5R^3%Vw+vSLJ0hiLNXKg zZV$%;)R(T$ZpYZfZ{~)#M`Dh)1rSq&D?53PsAw1lB73E1I1)1!7*tiX224vZb3&$r z4aeS!;-L&*GR>fHFcYW`?^)W%YyUMK^o&rt4)H3>4sz7@pDP;B>9rA?CxCUVVilL8 zS?T7Dv!5mgX=PC&EDm}05FkopqXqL`@r^pXrgA5Pv)U21XW$zxiZK5IODo9t0;z&> zt&Fu%ZtK=di29i(K5mvMubajPwqTXbu|AAXxnA0ymvRr*R=T+<(?n`!J`I-4FPtIg ztZT-u$qRT?GC%ZfPAk4sbuq!Jcji#_?YwFl?pfFdBK5d~F+s1#?LVAzh~DpelX{5P z&;v&axsD$C@o-BzK##4op5xc2*HM*&b!#_MBWVP`9IRiv4$riSI|pmmR^jls)y2ThEQI&~_JUnC+#+pkl{Uh2 z#?g!LGlYp@$8OjEa-Dp{Y->k}uKQH|I~=%n=1hEchf}TJ9g*1BmDjJ$th}{E<&~=P zR$Kg!IlYzTM$R>LtsOpwrj<{#xMtSX*{UF8JwtQsj5J;v!=>?rSfeHScggU@<_w>o zd(d?+$C0DD@i`Wb9c!DPN~*g5NSNfVdw1m(-4%}Qx^mGeMHdI!=k%vajYxY|QOx$d z>1?M}a^(?Mky-Wn9SOrJ2048dVlU;?>bCPFw$LeeKsH?V6$GCK=6d3X_`B%ATu(E+ zo<5lVGkWCp^p123uc58V=4-IFWf^GMXLto|?R0Vv2J2h?7^xrT99ui33xjnnE07wL z8XQ&)&{(HscB`9XYp*=JUpG01_N;`)lCoNKy6eES3C*-g9i~largPL`+M*8VK|3Zg z9p*l^18>s}+(${@sPa&C>9tqiOLIS+6W^(wkJKkFD_MNde}m07n?*PQelyNMllEweoR^CHk*n1>0nb{#+Q9y*3Fo*RGxu%;?18e zzJELcaRwWFCl0K&#px8Y7Hs%=?!j7Ccn@6`jmUWmpds~?>;*K<#wJ`T>^XiJyfl8< z6A~U$Pe8BTgIr<5z8p*baj&Xj z-i|R%_F}ZHivBu+<3wRa<*4WqY2NDfZBrfd~;E4 zfA{>{+TM=ZZYWce&G>qUctrOSSqyoFVJIl{$9fVEk=U-%i-k|%Z1a&0pkjRWP0`~m$xuOK_G)cDGxng9H|Fq_;1qC(a4@ptR{3;msUP4UI( z10I{Z`$?uxp2S9a{wH29IOxgBnYEr^K(dU9f=lkr4f1t4`RKBqJl2!fdV-lqS*`70 zv4x38!rFRtCmWb-NU%*xSw~HQ#3}O$V2xMf@WwW5csKkmJNtzSue#tgB z=z`)`8e-2c@zcvW@yNE=6rl(#1GB5Pe8X+mfnh zD&5RRhqT~%2xPOX)~-PD^K54&)gT3q^^LbYgj2_G;=r)2qe)DDN5jS+AI+t1NV1yF zujDdR<__+ge7!Eojv1&-Z>}a@N_*J| zpO3y$>u^k?|?_r_z3TacL1x z`Ud!zt#@!tR5OF5)H?FAEmoEi0$-)MW}EqLCBZ806~@DsJnGR|1^YP14pBWTr)><< zU>AE>zz?U4ampA{#w2BwQ$~?8Dk(IEOC)&8HE9>*>Dg5dnjG20D@z@C6#i5i|D4I; z$OmG!U4=LzW@Kwc9O!M%m#Sr>1}>Can4kwIQxY^c6Ok0_s)SQQzIAPcbg08CzNWff z#7gRV?XSN{WYgWY-0X7d8z=+6KvVWcmlm2XWtK@_X9JDSJ(Z@(<+SedAYh0Uwz)h# z!jYxi9IVK!JiUdZ1zaP=?Cj}MVcRDxvI?8x_aW8oSOc<28Ls8&;IqU!uF!)D;hrZ~p)@7={bqg< zBYXH0NN?goE$&w=Esob+t8N>q3$wf$S3pgoWWYFJO{p$SAx$` z1fO|}+{&+Ml3AAmPBnY0qbLaBQfMr7wNG8OGan2;B8Ry z`@Vx95pf0Hlz^9bvYS(v@aa+6la4TTabm(4bacj{_2fWbL>X9cEGS}pc8nM5Rm?2v z;*M)_gH_;<6Q{&Cws8=En3>7b(mbaCR2K`WHMt(21Lw`L&Rz4L%h|DzghDPjs+Afa z)0*~oSDN^1=9_pe$(Btx7=at&5fU6QT7IfT>*p183tmSrKn@HJUu^G~Z*at!LNdS1 z+w-@g*ux9ZOP{jaoO_|6fF3M>4Q@4Hkt!LIe7JY~n@zkV;De@?s9+jQN#A$%Yef7A zat&HzRj$)T=kLUncbggiGB_J#bdg0+GXaV zO}ES=_c4ThPBI6@&MG?=vz!}-IS3VI79dc!mO&3V6*dAtk%>YWjVXwY{Sat7X^xhr z+(iAkwYv*=CE3p{6`B{i#|_{pBUR9(+78BVWWKYCWB1g?easkE-GJqYfRo6Wc(Ila zLMU4cO^+n`iJM}EHNquaFu?KH>zyl`T#+!u8tQ;>$IYxQ)fb9i(sns!d$-#j`^005 z?5$r#Ps3g3y9pWj3j8fJy+71~XYSl~S2!7*Zv7fEXdgGsCX%6kgWI#_f4%~<6 zZ&n_VIBszrF2s360x5dDP@(FkfgN&yu&l?%1M5m?;d)PB;&l%v;&aNZ0|_{Fi4~bR zOu4&7u`q$|#UQClCi^b&g7KKnSg>|VD~|GOqQiGNkKJ2d&BB%*o!|=jVkL2{VP|t} z>!;=yepTvRU1}%GOV9}|IEL_06Iy5teA`&F@q@p_ys&fOj`zh5!3gri*Py;Vr8ohz zp~?js@}?$OkakL)Ch6?segfG>lMPFK#8%@V;O_o14-BKAI_Kf)*EpLkjZ*R7<@8#>=78QtsK&NJDD8r=d5P0;qtkRy>bB3MVmt7 zLRQ+UlfB)HEj=g@){~u=6tSFV!t+77O;0i?+%GlbZPkTU#l{!dAS%=EG21VQlu8Ww zYk!zKa0RWQ_QW~W8cbOQaDGiKV_Dt=i_IqH2+TKRM+DV~QnhN}ux%eg{I<}U^*=Ix z@vkKq9-&9j|AjKfql_|{LE8g_V>;^uwTMF(cbQODWCrV9HkGN?qn-*54!QdBkOi55 zz6ke*rJsQ)!x(sb35GMTe1T}}NL0;X}DcT^V z&HCsvwF8H{&dEI@_Sf~htZ6=FDmvfI87I01*i}JvLThT}6WfHwPML|9DQDNVP>I7s zV;l2`_ikLY`XZ5Z2O;^nZ1yd-W_^yvrx8cENsgS>jngTf4!pJPF5??txs=@$oQ$t( zD>wdDJum4xFiAZbf$j9fV4V}Jbb1vdV6)NlI}nM9!CEJ?wY*@_m)OQnv*xoTqvzGx zo3{qXh1g6ILuG)fOH}p~gV6Wc%=>Ps*Ot)F|11%{rVx%W^fVKj$~snaF@+fL+|36% z8Zl?u&k2q>D7%%*YH%(w0k^5@GCM)&t2O&kWoNEpBGIp$Un^a5?VQ?T?3SpCGdUB_ z;_8VOhEF@wtMSuFIl>kVq1lLBah$NW6WA9}FIyv)Ps&0E0Bfr-Sqb^&xpm~piwAHq@*uv&AF?#x4{p+CO@ zI$_lPxlvcxHDQ|j`~=u=e?E9$gXR2}7b~<a*YtfA?{4w-HR77&Y3PvM+Sq#jW$)XjZvAs zAw-NHJ}Vp_q=WEN-{g>S6sa9iOP9139i}din0q!qIwG-?e?I>?)!%hs7)AGVLfm-H z+uVn@n&5EQ>X@BsZF7nAz7YQLeE2(v3mu^zXb{&>!`{Te;(?T%Qj(5mwcv1?+8!CK z^YSVsSY^E;dhp0#t)$|+tYQ-oocTxC-iDAN*1Z5Am4$#*&Id@@>j1>ZeW)xANTmgc zFAtDP3lLucAe91$PXO6*^?+2(2T1wr0L0IIs45Lel?8}D50EMg5Ptz6RRV}#0NH%? zfUKPlkc!sH zEI`)f0kXjYWL*Iu8w8Mb0*LXcs|IBAe1I%{9e`})K5Q-x$Yu+Wjd_4J_*8xZ^_o1OQAPp8EwRwOvSb)?P0Ma0U)CwR+7XpMy`Y>3z(PFOR z&;)lhy&P-_o3i6S(=+aJuqcPjR2GV@vmw4C?S8X0O7xalEe_{s-)GO2s?=et)Knli zvu_hFr5b_I^uC+1P2uAF5C_JM?|bv^Wjfxc1NH5DScyZsK0G+hXm$J3ZcZ>bVM>Ef zp9$?g>55VH$Y*NSJvMmwrEb6le_Zb>n1?eGds* zQ7Cg+onvDu)*7QY7`TkiE_0##+)u1Xymm8eTjFHcvb&!a1ICAWF) z!Py3)$@X;}=ws8MD)r#*{+SKerux`Ch**+7HV=A3YEu~}!$Qd2{TSs*{Sl?K`I3Ai z+E;K;k2KGJ%2o=iTg9*x9_MLre5S05BY-!DW3G1Fyylvf=?&1VYQa%0ItI0>793|M z^yeSKm2?D)8+yo$B0kKF@dz$seb>f90p=x(8$?UaIcJHy{s#WP^f#bH03z?QWKXft z1&#`pgTV|=sc5~U6^A^JSR_i2fh!L1Ed?ExLb2luHHc#Fo*rH)<24*xX?1W+i=I+} z1QFQrRCez>O8~NKfqH%Ecjec|PRm-^=T$4NU&2e7OAqe|M7Hl`pE>OQjXlFHET8nx zkx#;G>CSC;Q?1}DR@Sea@*77;Y{%xQF;)u^mOwFf2HFkm=w z4xJuGq!g~l6A_zFYQb3e zv^p2RR%#sahVl&7hMB~Nh6n4m3b7v^tZ(5beBF*G5wpBlmglB-vf0@3S%_Ul-m^=5 z_7o2JhU|zMlefN*Hzt!4CC22)LSrH_-Qnb=Yzp3Jl>F8G1Y6^=1anyDOBU>Ob6DKP z!rdmp+6&~SV^HF310^om>q;CrYTLU=4<12iQOclV|2UyN7#0KRVHilqY{YA0Z33Sr zWrthxUkryCW5@w3OUk@mP^hI@$~c5$o0Ki`C%?k3s62IuT(<_+60GrqL1Rv?%Pxo^ zdh`%dsmvzLDw0(epxn7%<_&MpFG~z>@EVOzYNXB9a# z__?Guwqh;782$A&52@C$h^T0QTBWJMy0C@sjQM$xQ!{3;D0lY+AZLHk%@TfNI47JK z7WtP;kJL8nb0k4m3HzPDP_VZ!>@9_`Z)X6v3+ycs%;Nt7_7;IX_6r4jiv_z{;Ulnd z4UP~n;}O9n#nn|na})J5hYx0@Ksr80KgV5Bfmr`A&di}jVq8`?UceXdm#Q0z&wF-! zAqGwW7iY1bqCkx4PcRx zXzu*tx5b%x5pxaV?|;tdAU*vdz0B_~Ju%e~t9F+O23-GhjEgA#)VS2chmP_+@6gKB zV>trcg+{G2@TgkyM5qUATLn8uiF=?g8XUcjqFiK`7N%`ou;RL(^TwQ4zstE%>qY=58~ZXxDA`1zt5>Ww*4A*>>VBLItTH2 zv+=@dg$7e$c-SEVh2fZ@Y{vU;1so&I%*cf~-9~^KH{PlSAKW61sdFAqYZo{z34QfR zt7GVRt&)#K41EmvKPH6O5sA6>%)jY*5k_p4lLl}#qXVv=+AI~_s8Z31qGP<-biP|k z+~3X$_xCV*;UcIFni1n)7t8$C`B2`lIn`?=q9+@_HNX0~rmDn5nY-s{8^q=;PA6dA z_fw0>c6UF_)q*V^4!6}ZERGUg$%O|~{i$M=7Mvmx7FX*_Y0)>a`?Mw}R(z8Sioqri zmU}bNMsNC-t^;GRpzf$vma+)x@yPB4)aE)1tf<4w;h|n3D(fLmupZ*PjN^HA7ElU^ z61}%H5e$I4r{X|3MA}7wsPmo+;2o zj7o^Oh!Oa%I%o6?ra%=zXJ9?lU!aG81Ec=jR^QJ!b$IuJdWbWoM6W+j4{;`Jb<0k* zLJx7im|3J0UO_oV(jJ;WK7=$(N?uiw%`^yldz`Yk;~zomyzfZ!a{FM5cv zNNmRffK(O&QaK+WWv>GeANQfMG$550AeJ7Y-_k?$TY3luNTmSc6F@d!Js?%{0aE@t z0P%Als!9V=WdY*P1Ek6V#9shNl>p)wK)hEE$lCb;sdycLRC6EJmIh?41&F1G=(qF` z{gxg=0kT#AsTM$t&s;Si8|DMV{yG3z$9>pP8juYZAeJ7Y-_k?$TY3lu$OZvqod9y? z>H*n2A0SI#2Ot}{51UH^ve^Q}(nIuHdWe2Y51|0rEP!kjK#p8JAPw^Yvg~yLQp!)nCn`{qy9#8zdJWrZ@)#dM`^7Gjb zC#EW`_}Wuurwaos!=a2BRCy{FRC!9a>21HuX45}rv41CvcwLEs&P}12_!>Pr)AbTZ z59X-B=;MqSa1yJXMX`&@mkFwqXx%6lnlU4F8wloC&b1oC%s2iw7YkaUdeKcYRPRjO z4>Jse>YdID{w)1`?q$`W;vYY-0qEgUTq71RU^wJu?+P>g1Vb{ja|uA;91&idX5z$lKWP?%(2f(Oo{P^6^-n?%@Rn#rcOCtVd-op(CBj~ zAY@HOrxXv#qGciZ9>U&cy>5=ElFfLqs3i2^yTwBT9G81|6AycuV-0)eXUQt{;4E$; zW5N-QVVbuE(;tw-@Rs7RzQQ-PQc>QvhA~dasC8#*Hxt~=vYn*H7{5YVi*f&ml z{eE6>oj*3Txv@4!d3`%^FNkWnz0=tLEu0==Um`?p4ja#XA8&0AdR+N^p4?=2IZhRf z#8Zh)P$kgeq+I8NYiN=+7n7`!gX`qoo_#L$?g^~eT~2EoLN<;IK9xR;)6IJ!+!x7P zAnNJ3fu9*`>C9t*5nQTAjpiJd{o^fIUjnb41|T@I@*G^-ju0Zla45yGq!1(ls=mZa zWw=ZukyJREwcZ7fEH$7*F0D&>XKBvibki-i(xII4$G>(P`}SXxE4F7H<2>J`Qpet} z;5PXOU{J?vVV(}nlWx5jV(+!AH?G>fVxQ=Z{kyT4TUh4quYoG8YBe-rL+T6$K!>sjS3Ap4y7iF1 z2B=fDIyz-W6(%%U6EfBiIt|zn48Uox+mF@Rq*jEu=uaU?PEWu4KEswz(*FJ(m{r+G zS4&`KwPyEZlTlKkK-ZP2KCjFjZm+67BV^Jg0?5*!AydAmrQUgIn8?K-9bEn!(@* z=4LQB%9`z0NLNKKUL8C?w=bv^Y<%3AXs;M@8OqO#LE9??Q4 z_2}t9^yKba2|t3T0>MZ2u5WYlY($5$*;w}iq6Ovl;GA79$x;sqcf6i`o_u9&iI5DeOM1Z90-m|bm0?$&m#~4W@E+LAdoH-|`(9bm?)B6^}f!&qc!( z><W7Ll^T0!j%*1N#<(rCRA zTAv`I?%19Qe!q;{KB|X~a@)Rrm1z4Y+V<}AFx9}+G*S0`X$KXsaeqd4U%yZKGqT$Q zNeU*2=*lQ^xE~LGpBD8Sl}~$w$sUKdW>_DjesS3}%ctM6_zJOvQNrNPSApphEXK;e zuDyfOQ@f~S>dSJKa{fK~oo4+`uD=|2!-d|kxzb2;p_VtV@y`*dXR75}Xn)>-Mcz@7 z`Zr843>@slFGanW$}yhn@j%eK&y58<76^IvRHRPwE;Gj4^Ej{lF(%9=k|KP%J?gt6 zPPUpjiS~e#Z$FWbll#AG;pD(~3UN}270X3!4xF51^%70$FtN*+;%S~@Fwcykc1HY_ z&l9JR__+-X0M_25j_crH`vcK&!W68JKyZw36vWxfI11wIAsl@`w5X>4$N#~^P72+h z!3f=i5t_ybt;yY(5&jis7;>+U%l_vpnDWs;aD4YB;Pgl!GzPy(BkVaJbTCXz))+g6 zA16xM94V^cAK+d19I$7m0DFjvdUM!Ayp%U}SUJ2X5i&h@9#deLceo7Wg&$?JZHw{r ziRYA!6<_HvuW%vsmFmkYv$@Oui=bao5#b@;rtPYuKFKyH;&_kauqkt5{p1$}az(*&V9de@CPVlvau~jPg zt}6u}@$ct#kh$|Z#{gV*7{0;X-JdHHJgwi(45HKhXdTsyIDPmYmduehr*%l{do{my zhL+2>^Mc}t>Y;IW_ZqHuT*Xqy!2#?GE^JMhD(*6O_bd~I3DY9L@9zFDhI=B>*{bZj z3IlMgztE9k>px=gcDNsH+`-2p`(gA_KZq`4i<6C=rgR6L0ij?ueJjsvIW?(F23hql z+ji{ap82m2_|mmv$3o-1w-X~G%TwLQfC0lu{+t|oWzL+izx)EkyIl|uMn!V;+)jws zB9FLEQ0n&Kq5k>s?=Nw)O7PERE5NUd>0VeNv*2TCeadb&9NfyDKCU)O<|a>PGaM`VkMA{`|q>RTi>wgA8AOZ|qs(nstk zhf+DMhfdkCf1X|$9i_7ck^3%Us64bnSV=_KyCyj0?*3=N*EOMOclS4Ka&H460Y+@@ z`|dN}mvkKfSNsJWT~6X5y@)8K7Cos4Pg37b6G*36N~sPTJ7<6!0@52;kYdQdgxYYK z%IGLZK%SG>5l*3p&m%BH^fV`dw;lm&Js{CJQf<_rly+OCD^m9{(KU*NY^HsvF5!LZ zs$p+XEPu)SzN6H4C0`?Ke2_&$(M;M2`sP%AI_sURdfgPvu%}mv*9Yos{L@de5_H{I zQ;B#QaLDOFN9X1T<%J!jwQ%67Q=0;^UYWEb{yF2|)dmlt#4 z1J>@oNo0RvW9TWyJw&V=tb=p#ESF1f)!{IXwUKnx1VAp{&gjhL$~l8BxK|3iG3!TS7H#hXD`wW z{;f5G-ucF3et2=VTVT8rQ`NbRa>96oSGH_c$1|N1W(IBE_!aN7mXwyO`mjRt<=~Vl0#s|L7E03sRhF4rw{&H$tCJRc2&e3dyf5SVb>Q*W2D8gsj!Ki~a77>5h z+-ZLPy?o(Dru9;m{lJ;g#vmnUq7?$sqQy|I@pzb$?M!?t%zM}ggs5{B7jy`hoW0GTw;M z#${Yx=Xe%+E5Wn$@Gm^F_%E?}m83xAmC<{V2E6Uzk1&1Gr5G_)*e~v;-GBX$jK6=- zW-Co^x~Afeyz!keeTi@*vLick)?ebne=~=|axQQOm7U$>_^|c5>BHL*j_umJ08XSn z;u_F$TXuF!;S61C7a~s!?bSOk8?>d;`Bs%h{K z3r#Fu3~mg!1P)>(lZ+yf2Ao#~o5Br}NIRc6J=De94?N$nw;yr!!-*B@+Z0s6D=e&HqkM^iprYkUsq6tsS0K8p5$c|&iBrfM_C>yn)2=QO!>)YHNg1m_dn+kF(K{|AHipCn|QX^Qr zsE+a&(Y$Wa^Zf5cMtKXPDn_KvVF8MVJvO}nS5cYz3#M>VR~}V-3b#HK;cLw!e65lw zMzdP-kw0J%_!qSABp$?#7bj|wD)Hy0C-F&ZtQL3^=O~?1Jd!;zP^C%`z1xgdnJY`Y z;CFZLF3aE7lD!ZAfpO~C9~h@j2%;T9Vm?(W=Aw`1W0$+4;BL@*ViAWd@PqLM3`Ld5g)I+! za~JCg9!}=?-jh!tzX5qf&jWuj1qsi5=u&nQzndqW(;wm?PG6tDrTyzT`vtcMn9E|@ zz(dXuPqyT+@MJ~)chECAXM(>3o98M#oAAU0U0Qib`9;^%340ztmtm&<1f%wTUimJq zcLy(C{3b#qgv1QEckHz zBDPHu4-qNU96Q#zkYO(uP2C9YsHY`st^h}ANf_Vap0__S$6@w+7VX(O z-c-EiPH`i2q&l()S89-J=gysr_TErBqfpMHchNcPqhMN+C~(h(YQe1WZvnI7827XI zwROC0E?P=Oas*iogXW$cS8TrVr(AGg8l84u%aU~}GwTbbN7 zrZ;$ys&z(2I!GmZ(XnP@nwa98LVXi&tOk`CaWB*$JA3YxeNV@jlnBlFZxLPXN+++i9ZpA zR|?x8k@J*b&`w$ieN&l2=qJ9FkI+B6(?aOoxS;qcDE52N9~vgq+{4qwJ#2H)>|E7o zZMH^>dxvB6QaYF}Fj2nL%h!v$B^T~7h|t!f365gwZ;#ryZ?Z_FqV~o7lS>!=n3}QGCMU)0v~!3DX;#X#xjfC z@oe7C$%D+KP*37Bkx({MacTD>GBxjUrzEqTQ`YzMN8a~%XW&ra*{d0_8guD*Vj~NP z3cTso^v4Jl(3^|ZglO@rnvR>T=`c&ij_+M?6Ey3M7;7KSW{Y<{*&bx;qLT%&72o|r z5nEBnA0(#M=2!w&RGKUp`bkax~?{zIp2!U#(%5P0fk!sm7Tk=!O7E3x+bY-%gNyNsg^ zZ~Tk@wug9~phv56hKC3`VXC$mhZD${A+Kz72%I*{bC9dluQ*i%I$h_H2@VGdnLyzkxlP zq&UpL-}ChE2lVfk>it>zSGs+V?eptd58&FVm+!>Q zO?YZy5w8-1CkD#3kgMlnd>NczzzW8b9@NFz%Ud{mvN*^K0p6sglH{AAuahCeG@g(E2zehbq9BfYO z)N7p&;Y7iA&IDcM-J=mEMg_+_T9a?Cc{xp&d(UbckXiA(iXsinklm%}n9`QQ3`R>J@n+gwF0+-b?CMs(tE+bHuKQd2tO(j-!=Dns zR0HzWRA?K!se8xCwy8!KWaR$d&wK8@b7wNKyU(+~AJ4<&+;iS@&U?;z&wJkYocFvZ z1O&_Q1AbO$EVB7^e8l}t{W4tP3msYfGE4-*D849FW^{)a_S6mKDc$w;W&9=u9)c0) z3Phtz%1JR4rH?%m()B?$Ibmn%N3n zjmn+RQk&Nnt>jliy*x|Pc-^Eqt=MIvoj@kFp3Ndztt{hc=^vLk?E}jd49#1BY2>zt zEg8jNR4RtK!6LV~c#~Ej|NT8*A8Jk;ZhG@*D6c&F4LLpkMkqt07e(CvxVhUObKcm4 z7eq69-4mI)17WNVdQZ6E>J}y{8CoJ2$o;x1A9zIlXJv7tx zagrWv;#YNOL1{8xZ9?oaBX*fJcAXKs&Km1AV!hVbjYjN7BeoE|0-uPj&gRf6=7^l^ zPdXz#gcsW&k4Bbl6)kDWI#OM*oSH~^ z!T8ycodwI86R{P9pBowePNDdDkuwG3=SL0~jIZbAzkoPn+JnG~Ixs3TOE6fBrxgOO zdYKJt%m|heVf<(FtibSi}>cwMl>9E@P z3n4e;J|U{Z*T}(vMBog;cN4s4FX;E{otTn#B!sH<;F8|89!gSp&_|sJD$%Y<)eXBjs~cxSgOQp znN)~7)M~fBR|s!Huu|mq!#vTe_eAHshFCNbYgFK6-TBpTM(>Y(Nx_@LuD@ysF2G|` zE;!ah!L2szi+89UmSQJzv0^2%4pKq-B-j?}#ui9Qq$xttLqE4Dfr~9TtSR5oJkni; zD;?_aMdMy;LGrN97bQ5V{`$(SyjM&!D|IK$TB&U@s2@g*shf%VzkUoBPok4>BYsqA zTCAPWb%*wew3f5`Hkv8T<-NFGVH;07$k#u5ZGC(@isTlT+>G+<(HZnxL>kErgidFh z`v)$YZSw^5mK`R1sVZVXoe#O+D7D!hm>`OjO4)Y^X#v~M(xfq zb0jw%=Et9zj{F9D_;d2BD~rvT_lyT^R(mr!QO*02I9b7ot9}%vRSXj`kYv9;f>=Ba zhWN00-v*m__zIsm+)nVJ%n~z0tyWQ0hETLzghJ}(Td~WGSAUJifQ6!fka)O^1j+=q zFF|W=vD*h?^NPb2&|3RxOdh)-^wRq*X*j?-VF*I~O-!FK)hB9LKPqJ8b6u z{{C@j+0q}6TKhwl6I-bSW)BYhhd9~+%(RMXe!f%eGEAgj%@g-gUV)L6Zu7*CGAXy} zhldF;$#AP?@NlhSBR9wM*H7timMRkQ4$<$GRG3lAcTh_-rZ7&@gL7?oi<1S7)K$9u zBXTX#GYdE+JQw!FY)u-i>1-bX;N}^IOIPY)ktwH#%k*oZ%pBFLhhZj=<|`O!tWR8jI#X=1v+i;741=7pScKn@T$6WtAdtz3v>Ya^&)FSVtw|qp-}-pAt(8 z;|?*3TE(N|GUj)0M$-l}qG^NX4h}*|@Qu#>C>Nz}p3r)w`p*QP+MZx5Htd4I>P3C- z8gpHbxrHa$hXJ?3vzIO7;N!rKN5A9qgn>w~O4(iisbK5X!n}_py8RnIh5Oh`rTsrc zm0L)+s!_y)WJOqVYfQnI8R)-!Rdi%^-hOcB@KaWPac21nIf0Qf6afBEukx|q3qDnF z;Xr01WCI>tX&)=5cs7*!BDtc-$Rs`3hVv~Rcj?s*E6|PT_P}U}Z;CL0e$gy#$$A-P ztS64g0xc{_7>+W~Ls8OO3?y>OKWWe5TN@3&<<8+-g+@4i6Gk|q6K}+v2M8r`8xUyg zB^sDV8FT6|bT}U~6)5;0xZw4A!RyU}5lUW-%@TN3(MxoSZcy%W;-o0MEoa!Cf5;UP zf4NH0Z-e2*Ngx%{bB4Eq2@R%ZDEf^ra0FVCxVMDw8;FVQEIGO$(LA&S$7_*ix3bD@ zAYz(r3%ClYeQ0jX^9t{l##E)<_tA6a?PZ3TpwI2p7svL%lXKAn>+~L2XY@bgfYbl=!?mcOwhBDIy9l6JH8 z)i)N2%e9mI^ekK^+`{eVt=CkI+3qr<-Ots+9BdRFHOeg(y0_S*_2$bnS$@X+a11{~ zx>nKV9lL#!pFdiVA7;}xj>9i=?pI{QHG|G}FSG%}W9$!X5SDON;dYzdW?sI)snZ55 z4mp=C{NSu6j61CM|AlaO7$2ml$GIE%%EGYt^zmnHPiju;hOtz%;zm#rOy@vF_$%fS zTMx2~bYR^$I(}BaNsAs>mt7sPiGgh<-lKF=+Io@J*-qS6+n!B!@spKsEa#OD;Kf?6 zaMezc;;IgbAYS8H^@9G3^!*p9ZN5ogcM19`Uy|U*OWnGtK+4>F?F2EZYsXU6JzoS> ziJcljRU^i!qCr!7eQ;ExzuT%)DKvi1cj0uN+B#EX&#zwTJ=?3$sb=-Fn+l&lFtXW& z(Fm%zp*h0OF{o5!f>{nO!Izu3nv3Qf=6?ld!9UCazC*xwNZ>n!Nl{C@$)R6+%)ng> zo(;Ij9{#%eg4GtN2tP2hTCAEZYXFI;=+Ogrm# z3WpH>pf8GL`=c*>su`VWVKQ0$f3TI^{AXLgTC{$tcqvZ~;+`B7WxugQ8bi%uZ>+S zjc#)5E|x|%6{YTF+?zGSlp<_W@)SJ6gPAa_)2V8-W7yITm9K)UlLEt(0d8PM*bU5R zswlOKrX-^=nnhzAdKKqab4>Z=IM3CLI5YlYhuqIiu-P_UO5nX6kJ-dO zY_1=pX_`r0inAd0)~26G@I~~DAX9N{)HFvsfyu*m_Na9q8{8M-F#k1s%(|7D%ZEQM zdDl*n9it+=3!vsF42*!@Q~Jj^&I_~cucqljOrer9o{{!(DY2Oeb~bQE+?t@FIiu_X zs!J%OE|~~%bTD;|n1z(|2qy*3DD1c)44@|`*v#i3u7NoNjbsr6qXu@(aYlaR2}Uth znkpW%E32=Ek&;~f;feFag5vm<_VE~ay6%Ad#tG7cRXAYW&Ebct%@O^JBCMGGv`AI6 zQh|oL9Qi6f@rrWqOm%A5uoeu zYzA`5uBY^ta~@%}qr`{Ay6X}wMwAdo4f^AXy6n@6%SR9~a}@0YqV7xAVTpe1yjY^~ zS1i#8u}3qSj$x?O6S>Qi0s2kWTe`5u(uK3lF1*r&P=ANJCpfbat&^PS;-=XUne|>(&@*~L+^aoykw@+nz53GmF}*51 z6oEaVu^#RI*?G(O?X->`zkNz`p1MAMuy~;&KuYmBvX02hqPVGb) zLPLapL?2vT>WfHaLr{L(N-kn^g>nGw0;VuR@bTA+{59^8M2^0|S`VM!lXf=Mw0kOO ze>F~tdFh4a^UmQBtNt-6^KI8eybGMi*rR?vcaPc_wTb(Rp`HAOd*6HFJz7{3>?y@f zDm!0`g%(UwpeRkNaGROiJaI?}mQ4fSrv*1VqiacsW(XRvL;~)Z!uq9P=-@uqauO&% zEH=Xp)%|l~gUQWX!kjIKkCyT)Vc;pqyF~1MbH)kMeiUzy>W7}Z8H@`<150x!y54^| z`@htG*c{Y1RE_@gwSQLs6&0D9LV|Y=61%YtxDcOxvlim=TS-(jSy*c)1tH=zqZ&tV@qzi z<}`6VX9qY(vrnC_I~`r<1n{U81*i(W)?IS4Ue;!^yTsg zIPP@8l^8ftCbu~29>bXYtPczMx6;&yzedxy*Ul25v9}Jpu1a2`nHVOq+b6d_=#IT5 z^mkpwEwlr3&DD9ja`TApv?8ZvIzHuwe(p2bewW}V`6v+!_hnhQc_>f-gQu?o24e49 z$kM~?IBJCLFDUcX?6Zv2DR*>Q?q<`ddg`KP@%531Z|88@le=HzBE_V2P9p9d;SCo{ zS)8Pl>3@00HSQh(G2j=g9)G6pF?Buj!Og1PBK~d^-|_O1oUI$*h-K?WiO(0G)%s43 z*q8bIJ$Z|8c0We!w=J;8?vJ#!=a~L9vFT5fEq49bPF-B}scH8pIyJ)z?}F6Tk#+4j zOwf&(*fs{GEoPgm1>6Jzu3w;xv2U^969PWZ=Hj!A@mW?7pP$Vrj8BO0={E3LX2oYE z;}bIR34JC$tL>h6Cs@f#xj3z3oYob@sb(CUR;O->JR8t)T4%*+ePn0B_z2^=+QfDB z7^y8E-wlNCe*xcl+j8*T$oOuwS&l(XeA})pjPC}%{t&6!rlYpeidr<{Dj44u8Er2V zzcn&gD891;RrD830tbln6igB>qp5E;n0>RMphRoPo6A=S4g&`A2qZH9E{Kz!hkwBN zM?3f7bHUF4ux+_q+%NgdD?SB3mRZ2Nu_yT)S2-$fU>4)qC1K5e|1lWIg-roa@F*wm zB(l`zGIzaVWu}0NBZV7#QcIDI6kKty3Z6DIG9#wMTr7G5RZ#;VSt@m$e+BlEA3bLR zuvf5Ac?ZHT+V5Ly;r`ry!PMO9ABm~4&27{}tWR(kQe`HmCYiP&aMd)%-nVlY^;-PX zWDP6wEHMhK(wA3aEnTJ?RxC3OD-cR@vxQYf0(K43e*D^_pBI6m=p+$vL}#aN*Dp4* z1%Wfb{ZE3oc^h+ydfzk=S*e(JSHtSxyG5if$u+Qir#}@p7nH?Ld>+AWSaw~32{tw@ zGq4@UR^>##0-h0899X2^yvtU|Dj>T)2Q%t#;rA1Eo(s0wa_w=)Tb}de^>OGqE6*3U zuc7sQIg>l~7JpKuo?DGB;0^c$za!ul8{JNlT+W#L@mefYRTneH@~ads;!bb z=y9sXhAtt@&Q3Zo>1|`3(tUpC?T=&sjl@viF*bII(*mJq1tk^0p#QS5n`4*Ip!l2J z(Fv_rs4rfY-9mQd)yI;tOZ`Sao9*jkjH-iawTahyQLatQa&f)Jq?3u_DF@?KkbHk* z#&~~0@Si_w8b3R{({WI-_jdH_IlJnBzo=5#}*_&?1#=q6xbc)Vw^Z3hn=UuHX z6InI?;42?qYUi5)e3Qz!=i}7+Q_~CrX>|!jm`KE?7dGyFHoZK&RPJJ*zd9B}W3Vv# ztJQcSOsg2R*l$cRXm8mxqOGMk*d;1j!96J4V*=AKB*qW1d1vib2)qW{XR`|om_biL z7aynO*y5V_7+B+A3mup5pJJ@MBIw(xCVrWv@5!L;`2y7}ZNn{T9&PJRE(&s#!t}iX zbeKb@ zPkilYyu7>Naw9ywyJ5NrD~*+ML!}X}!i#%)xLR(gHo`S>LyZxhEjP>tLJf1pZM->h zc&>39Z=Sqpo)MleFPbmHElN{;i@d1b{A#4HM)PX{eJwD*7Sh*3^Q(!zn#`|7^tH$+ zf3du1u@Mf*i$X?t89YJh;g#~Dm1geMlzX-LwU)lta)Z`kU&<{vu9Fw7=UnS?eC3v# zB64U0Ur3B#WuyMx$d6o7mJNEAHhIxjP_ke0ohh>J^hF?qb3s|5>G z794L=79Zb=wKnFKyWWQIChvS3o3E)~=3P=`dT6~ESvSTWd-SvHv9WsFFy%d6|0+V7 zr|X$4YSd)UURUS&;8$$6*f;rL!sTe3&wi+fI_p9tO~kHHnuk1l8-2G}0epivv0$Q)de|_2n1I8o19tJ06ro>I7f5fO%{}k+hut{0%HY;i zbH=gATL;(k6oI!qXryW&7yUeEO%wCcdVH%ssF`Nk@Yw_Ji?f>Cj-V*BTsbh_-P&w< zp1oK58Q5T{c3vQ_9*3T*hqwp02g`NFOjutF#w_x$;2~g>OACdhR^AIumlNZs+ zFvx%Jq8xM`3Ak-yUsRp=spUEtRlk-Bw2;;eaf(tq_!O^?dMXu}dd@0jw1HBxlupEEX<91h3?;sWypddNb`?t)FPh4O8EgW zm6zSHv7rg?d3jmC(|?@Xb7krXoDHB+EWy+Z5soBu}`hu`bk#)n8f>s zA$Z>|HQ8{!D9rgghrtg`{c>da3hCCvn%9B-XFjdG-Hs<*`GVR$i*yE4g=*fK&V-q%04|tu z1V`&QeGAHgjpQqMpIO<1xWs-K*Mr*|e3^tl+|x&A6m9-mf^QP=o@)6oS5r$_<8l9D zB?ZF*pCyKY{>{8)T+N8%*B1Spl0bHUFtcSk*lzP^-EKr|o-A%CJcI5^6{U9Q8DbNA zi@67ZAD09}z7f(}r}=Yclp#M#w;tsVFMS$+Q-1Xho`q=^qbqddH(F_u-r57tFvul( zBsK5@SM5QLWDVSUPO^%FQ|>!FC~ z#B7bm&|RJ#y8JYOr)}Fr(EyllM*j6T=nT}hl0Ml4mvpGXCE{G2U+vJr`JA1L%p3LK z0L{e2%{H5ozX*x>D7atj2KCpUu%||M>y284vkWGVsVjLBz~ntIp}3ISb1pB-3wn!> z>LGnLiuJ;%&=dKJ69;&DiPMey9>)5oKAEu|ixjxfmMc%#4SAyZfG$t8ZD)C+w*zaP zpo|>hB3GVh6TDn{g`uOx>h)mCRNkJ0;|Li4tMbLS^5u)QKP@OCwrqr6c@R?F; zF25);_{GfqI=@)gk*(hwFJPM*mTjYnYrXY*U0A4Jywx<5+{Y|qs}j3v_1ls$_a!_Pcj2O-_R_%H@K zt#l(YZ1`44%RIc1N5@OWct_SZjgtxjh_sED7Zed$HeOzkNF*{|UeHV=G+ru*D6(L@ z)Ip@yjF$>Bi+ION1>HqPJI6@{Aw~wrOT}sz=^HN<+ryEU#!JQAjl3{kDrCIK6P-Du z%uEHNEad zL#~_r!89BI=B>A_lcjdm#_A9Wzdal^U0krRtjMtVClTqI)K%jyf}}_>nz@U07C+pt zI1D*R4Nn}$?Vgu|TKt%&>nRGix)S`{ zTV5tCs6*DpH@1bAYW7a4N(Y^IyG}e-i9N(297hi+p*Hg@IyPAej9@F?$5y3SM3! zfEzFdJ>Ii*8oNIkVxLo^{4k>2G*1rA$HiulV(Wylc`o7iuJGFQ;~;lFdl_$g*}%U_ z4i4gt#(jNOdR$A@_!2?Yq{l&}yHBS_R$M`R!@0y)U-aJ~zM;azm&Io;-cZ#yUzK2= z8n>LwG0C|dn6Z7m50{&(eP3^f&y*1Qq*r(bN1F&r;Y9(%I*N;6)OCCnY&2xOJQKZ= zn3yx>13YmyE*S5+Hjl`=e0IHp%4`L_omHj?LU>eL@t9);tFeO3&Vot%SO|)F8CzyF zo-W)nCP3*`{d<=Ud}omP4sN{Sh1qVTX(!+S1D;X)if0SSV~9DE*`5%$XAy*2+=B1x zJOE4x<_r^~30K2#R~tQp8912RGbMnCmg=uRrfRrL5k{A)W+T1UMy?i(L=QfKZ_mH& z0*p*kj#!wd>n^+A3EVxNt~$FuY_rAp=k@QS@UZt2L{icIhXL*3Rf{Mugwi2x_36@< z6Vg_n+*xVYd$Cd!c7}Tq!aaP;_L;Jpn$u&Ru9q0;j6X2!i9avKPuW$;Xk&WIfm8b1 zr8qX~=VPOOrk8$!+2(ohJY0vHna!u9hn(0xA!YOwR*I0zA9ignp)VPJh={OGId;wF zvQMRc!d*2WcMD4;D)H1T?nZ7-wIveRJpKxL_uP4klOG1H{n`6ULjSVpyCiF#cs(m? zvg$QO%(%2#>dse_a?3OJ_xCZK$Mj9+Bp>` zh*-tOTuSf{BQ98uV{0}d(tE_GGv7#YZk&>u zZYetB=oHkHkwpw((GV$VN92xdhZgX-mD_$H{_|-elgScY@Q1yfiK z@s4-$_d^6fj=HgR{0b{w25-KTeOthbQn|5DvWt1MVQvgrBqL;z=~%gfE}8G^@U1sI zfCHvn*dC{Ic%{>(zax`~tE_=$5(y5F+{aJCbiO)Qw8*|mAOEY_K>|%m@&3%Nx!jMm zF!Q(iFyDV;7bCG{g#0}HF&(Te!%LJnXX-{9c@>)pixMY~(~{OA#ZoSVoFtH<)Psl@ z`-G`r>y7FkMl)JnU?kQcU^^dlZ=6OXaijhi4mTUt5u7S_@-slqt{gLAk{wqeTE~ZT z9B}H-;OxL>^1?-yQayWll$xs&3#MMI3#7M9RDxBBWfLy)Lz`(`6?{sA(U9E=-|XXtHO~ptipLi>aU&?Pd_o!4~|H$ z@O}dprE-Tsdy^c(Ayigo7*Wey`U#9Frt;ca&P&j+Ejo#Qi=wNNVDwUZl?zAGRkWT# zaZz17Rjb3|0pdzw1Qo`6p{%-U#*4-6Q)nFUWU>uc0#Ys1A-%YZVoTj?DN|e_&z3nP z%C!Ht%ACq&V$+#7fw;XcYzy=mJ+${((L?`c(|f4j>>+b@ChcQ;=#M3NJ#^Tv_mGfJ zi&D#|5tVu)&Y=1;m1ZN(H>|p z&eDkM#u`1I9?58V*VL20w&~40h1Z><#mOHF5~$il)2p)AR;7Q!mjFq|{m9&3#hIYs z^s|D~Y7>?PBUzc48@_cCH?`QH0iWJ|eJG{RXLes-e)skL+3s^%yDwGBeUiFFTr^U$ zo{5B-QdK}2u&!U9vHo-p4>A9*1P^U5he*GLs^tJQ!bAc`L1E*f4v)lc0F&~?nS}lo z{~2#Zv#TFmc10k0EttZ7+yW-K403hkF{~T$stef1=G(@+k6N%u&@hBEFI<7P0(N0hh4OQUcVt2#7+7 zM=p$0<0BUMm1d2PS!!%FYkbO5<7~6W=Pf0`zkA^ei5B?-7FqFQ+h)=V22m4c#E1&B z@tKpc#G?&CH)Hu(@?qioIGydjA&(e&4u~eg8#-d-3*FH9iW28y zg%8F}S4i#8^5(f0ML(Ojc`iz$1-ypDhAjkp7_crTz{7xTu7svvsd%-M#$}zY(`~kV zu}xoJ>gC{J$|&vQ?P-!&i=dxRwqv=Wc~?)elt3id7sdhZQ9i(B_F(ug8pN2Kl$*~G zca)olWO!N_mibl|Ey8khhM1#WjJ%9vYQ7={CX-1p$LOP8JGG>>nvaXGPzax0KnC*K zQK|i?t(`RXqb#q1UHwI?Ex}p(siRNn>X>fYU4YAdoC25Y0dwdPx5au$Wr5(==MVI6 zcDHU+Po}br(8d(q!H=En9CJO>DxW=-Au*w z9d=5e(082s0Ty>91Rr~l54=x2Nz&v3n|O!X-y-(SGQ9iIS`5ftM|CP3?ra|>w%-%I1maQqB$7XM za!jWhQ}7nW_Rcpe{BZgpU*;anUgkCpq%)ldfC=#^y+BV_3mbA^&o6E>?I!d;Bn|nS zM>c~dxW>xV$PHYmvpG?AqUa&P)g?gz3F3o?F0wa&;MB8Yoh*|CU%K(`;$F; zjq!w)Gd}Z~-{>9yr1nbo)l}JQSNXG?mcA#8@M4b-5uS%1F(lIgFsZhBTeMCI4oC;) z6H7!*_-kx!G0lFqScG$rpgJhw|*|SD>%^GFo$Q(2(w_vsr?YP8@8&!6V+ANpGwwjlb;aEavJtN}2aq7!#NEcw& z5)4E$gd|ZAs+aX#KAkgn?zfsw{h)Ija`Z6!IrIzZVdErP5)YsY0e>`0$Ap7z*B=}I)I~Q;BruDI9 zb=9-;@gnmi3ik?{F_-M{IC-?l)AfBuj)v8oLz)Z)kQ1+WOd*_GJLbZ^g|Vk?2uSwz0yHiXZKANYp_l( z-w;(LQ+BT3z1c(cuhb*2Wo|?$oPkH9vV`;hLZRW^Q0phjP6Pg+x&>LU(6bJ6qX+%X zs^@!e>wWI&65ikj{eg1N_n^Xo)|<~LMeq?lio$vWyk~~p+Ect+dkX1+Q~sjO3kleP z%RD5cox(}m;(q5W!oz4b^}&FH7{A#KoOSVW@vzesDnK&9dg<&f`4Gnn&1#Z<-+I-2Hi8IY+E|jpaPqG$Q^+x_7O-(4ghz42I*KE`ohG^P1(xRYfe(rZNPYyAQ~3UD z_B|tZVCLTiP-9!`2`(xv9<*d#gS*Jto%O|KZndO^Lo^0wsPbKTii+-ttAMWY=C8-< z8rK-Nc&C1dmZ!6x!C-`faDn?xg8l^pVg0m&qAZS`GL}vv%KXLqpJo4)KR>Vil|Dby z#{8@wZ%XFQ$FwmY>n-!K{xjy|fBowJ*ZH{ik#XkZd_M0cL4)n@aNg6WZ-APU&%vIa zd=Q-tcU*mW5+=3~gh-kEn0HG0temaS!r4gjYv!XEPZw55IEaQp0gentq=UI0F$?WC z#7~2gj-n5a3Q9Vfe3)g9Q7l}I}XSB~?_9Y9Fb$7j;>1qt<8=J{t; z?BO?tqdBiYfsa+pUmYisXJqXrH zs)1gXr|U|lFuhf51f78e6kjuJTHp`5#q(8xj04*)sX?9w3vl6o?w{!l3mRgx>=~w; zOy@ziY6JmaF} z3Vk*|rSJswGo>4+=Hih5DTNmV=>r$<7rqc`ZAt`R)OTv0GPjY&pBJO=U|u|ddGUmp z7f&Ql*f1|%XySSC76BxG&RuuZTvmh_4c)=BxA~OZ{45EsI7?(d#?Shjy<1A4GzOmK zz1r1@;0uJ(v-(Oj5Jr<825MPeQDD_s#i%_7)E*P4J(j9df-m@k&+>xZFrM5Qmf^r)nX2ZqB~H+Wd{dx_~P-S&O+t>eqcX+p1M-4%PNp@2o6WVy@br zl!wO5t4xU>ixz1oq$5s$%)M!NtqvIJutCZireR$5%$XTwj%NnwhjJ9vACjtQFf8RQ zt?gO9qAuW$eXg#!PxCsqP17dhuX5`n*bsf~6y;>^l(jv{FWY%{!0w6PMxph}WIh#J zN!+N@(09%XhBZ8aIIzzpK7Uxu5 zlU#0IWT|s&0)t=AvpU7E^_F zSEv*lt&HH0dOtdnDxz-nuFzsGtpd>+H#hY_4xX)cf#?T}pOh|&P9*G}LjkFvas~P_ zemXiwxfLBM^=49&lu|0WNb8sW==5LM{HLW_g^iGtW&*$_%|s5{s#e=_(IOiU3{b4? zslRXSz2=-~ogL}_p=AqiNax5cH-Y9z<{x@RYx|@J;%q7Q$k|nfu z`j1B^Nau?@@dP?_h>G_giGGO~kzCPFfYjPBT8mwbR3%ZW;!-Ba!NE{iO?-+z#mz5N zF+{c0#fCgxKe6+EG>*Y3GZ7(WSKt1W@4Hz_I720Txo`>JVy@_>LL8zHV4%J^Et6No z02SdHQ-q)`NYyAT&Yu5;XX@q4QO@_MoYZAzA*ZO2Lm6u!83Hdh!P#+t7QCOpAI$|f zI&C)PD>3qE{gzC9lJ(tPvu%lGS<(d4}8kOHxcN2yy z`XwsKWi2Uxp%jkOW-cS{(Wi%JPtAsF%&_%e$NBor6&>fRHkWvwJNVY%A*H{z zr{ldDZ~czgSMABM`a?LexY{}E==7d*{ns2-4zpu*|Itkol>@6DRcx}e`q1?_*NfXy zNru;EdM!A(jWD-LiN5=R8>QR{f?!)GiS+Dw-Pa|^!z+W*!Ehm?c0CxNeO z!B?A^vGl>PB|KyapDMHB(mC8;lyfA@4^PO6Gx*&-fZr$C-Sr+Eg3Ihtx@9N7*3+^x zG0cCSJj#FKhxyNQJ^bfiaSH#$_v0g zp$x9JwTkEY0yBvS%_gxa*?J}fHw2RvI3*3FA%5e)|AJt)G7e86#sf{IOtYi z#_7=Ea_Oj+iegz>p|pGb7h;qBAH^nv9Z#lpYL)+^Xfb^}Fh%4SSyMM^F&_8 zHJC*|5%7hq1fpImO2}DLYtPoj%qA|!KfQ@>T{N5cz*1$6mzwDE|Av})k(wA2O`}t?KvU+SQ!_)xR@)fn3+@A6O*3pd)J2`XMO0ZXK7IOUrTDDUKdZ%O4S%W&X-V<_Hg;+2rE6E< zpFBssCd0$797$bQ*Pe;}zV+%=q#hkeRW3J>UMdixvh-%w_RvhS@`a@=VxBf8Zk3g) z#U$K+!5~k}!MZix=xLMqmaD5~a1At#-xJgL9V>ySerBcG@=%s!w=>Cltt3lBKVW>YvN$Zw#bK_A!~X>iuSZ>s z$K|QFm4owqQD?p00n&Lb=AmA2)uR`#Cd5)#_+Q^L)r@l86D`()<*`42)faX92=7js zFqDfZv^CVdx=34@gqMi!%hfl}n~h1vj1|O6IV(^IdL*|QA7z`d^L$P-zH#1c2C_Q4 zuS^|>8>hE8cmjwhN2mc43EM`(_DVG1GV`+l@=6Z!C4_t%kiSx$nngbKuw?}RW3N4H zaPl0Q7cBW$I=k=?&Bv@Xze4@58bR|%+TSzz`l%eUe`P$f-&%m|i5kGD{qInht#SK* z`@ogzsT$DPc9B-+sixxLDd^vX3|J!KNv$v#0wl_2^ zT-ZYV!|~g zj%dM5Y?OFobdX8pQqSIrEwamT#PN0utubFf@^Gq#3fWSbn>3M<1fBgS5G=+x6EDtq z;$P9=KbDL05{j*%7J0#!FRn~3pm;(-{Xb{36K2ua31hbSoVCR?Va^$SKV7}|Y)*^k zpUqAfEYoOeNvaof<{jhfb$!~Di)Pf`m$(PGTSf`5aQ7S?Yf)V zwU*meq8|A;+phIF?E>Fs^691d)K2qB{d>S(x{A?P{v^B92S3)EkW8{1;;lX1TC|ps zsq*Zd0Hl1%Z)hrdz6;}MLa6l?$B|V$95^+7GkPm%eBK@YHExfDt*jQMtVQ-Z-f$eD zgxG)1dIQBs=f4mwr{C4lDS+JE(z@Cx!$)OIOL;l^9zF9B#~a9;Qi7F~TI<4bduwoY{KAR~S;yS&^3$kz3$B3S(ebpB+UHC5zFK=+!Z-KfF|Mp40N0jQ@gg z-3Kavon*2#UZDb$Oh&;jY~O;xmDa8C#kP?Mw#FBIpl%IhvNct)Zy=&7+ETZsI<~rQ zO-*cdi*)+3SX6 zR&0l4wt^+I(5K9z65EPWm!s@w4asZ}lG*FgVs5QxZ|PNQTvRFv7Rx+)ds?LQ7ot>i zdUbRX{hC7A+Mo$X&JNZscT1=kG;MA)Xx);@OFd5YVo(2xw6OmHbCjKm#?+ItR$A z2R7H9hKP13I+4a;i&1sCi13*al_H|bjHnh7HF|{l!w*SRyTGCvFL@-YwS8#J;n{U- zETY<#%Z>VjxGi)zJL0@8)GKG4pxYOk`Ox?EXY?Q32V3Wp=3hf5smwVS97x)yp^ zUQq2?FV92_fzDA@x(Ir9?PbbFw{-Dh)K6v1l|H!`b^1TtazkS7mc;6R_bQX*Cb#q* zr!CeOv13o?4ww2Ntz)lX*zw^cg)Q~s`tM`61zI+tb%=^}o@;PoBZc?KqqS6@OKEb| z9#tRvqek=|@o5{~+D5Ookz{UO_uOk3hMFN4?ZckYp=K(^rF>rdcBS@hpZ4tPr{(3i8h%q+uU8nX;yQxw6?+J7tE3%&y0v-QpvPkgGKt%c+-XOw&0u#|+U@vwB^ zVsu@qB=JLZVWRwAW%1vZCl>rI8&Bb8MEqE^TzN-zQS+%*d%S1s{Oxz($anzK#Ty;% znk`zTl>9jyMuoerL&lpGza+Fe=V7Zk_Ic^nL2OD!t0MTT*0Vz6Bx>^zLvFQ)wF<;b zhh4;T)qmsbQ{{Cl-O)1aYOhebRkzgb=~{u) zu%IivLU~>ND~e5i&R9*d;{hsJTVVvzu+@|b zadlp*&W+f->W-o@yXeQO*X5?Vrchn3Ev{LF`}Aei<@DD@f8FQaJvSh|Ys+ge_O~uI z_qRSdq#Qi($qa08r4La+IcV%~Jz?3&ddvv7mPhJu_Bhm^65T$H9cI~BKR!LvYm_Sbt@ZUkc`3zTJB;WqwO140P^;lqtPa~ATARkB=JC_r{QvzpH zoXZ}fVqc^jt1OEoN`dn^cy>BBu&QZX|C&TY`{3!erOpm#Q^Xh=<~t5_&SN*Xf2=+E z3OtLp)HV4$j~-MG<`iRyElSgT$5GGThVrG$J$t`hQhRbmVu8ySKf7f*=`MH#=KQ7! z#6cau@?Y3Au~F)&@xQ%EwJz(euE;v{-FEOr>Kd5EIF_rcaf(3`>sG2`){)S1Rnf$; zMs$`^UwuHGajst)v>Tq;s<7v4Q*5=zZY{=n@uLTn1H#1~r`PtVUj?h=3bmP!TE_4Z z%RZj)lPA^!P`tdM+MA&Nvj(#+0W-C~2+3bnwHOQt_2P;5nEvw)Sv|N3P7<~ZjWq1# zf~2pexwR{Pe)s$JKP9ox`(v9;)1nj3^*^(L(o;*9C-_D9t=Nu?Wolz-;oGowM7UGL z-+KNFHxF9H0>0QVS{oRt9U;NE__ceeT=^!{b?$BXCX~7MKI^VU=Wq>iuV)5qM1Ye| z;kTk6zgP6(_ok!xz4b8tw(P7J;Xjjy_|FwR{HOS5{AcDq{&W3H^yi817ppdqtL>RH z{MY%+ApK1QT+a;So1bFuEv~WQq{?o48i~&gXc?cq(ejP!pm`{I>6`=R!I)ACj;V%O^hZ#{0fq4**IU<-y z>dw#PH(+n&%-*~vdjreyFw2>6x50C2Pv>zRugv_yK) zWs6p8cRAZ8DP`S7n%(nqPs;6ittT8()yr|l3EtwEP;y8sv2MyLBX}s+yCdMzf^PLi zNCCHLxL4@5ZU4`;Rw?@Io$h*K@FU8vqP5a?mo0WZ%`$sQYW5C?7IZ0Zs+%eE9h93C zcGk(IdDq1}%9}6VuC79{?JnE)Q@Mh&ogdNwF0hf$8D$j@xW&Vvupa+Mo-UZE%2%>oi2tLgLz;pY zx2YSpZ_zivNl#-TmG!g}|7nP+4^a2P07$FYKtTROt5&to^k0ZhMZq{)UAjX3&F@)~ z(u=uH2(-6TEk$xkUBKI3l?VU-ZR{<8ebB-Z*A=_?^T!mKDV`< z!;ze`79p#-m)D-fNrW7KiBDMgnBp@{U&;P$0T_VAL{JkW1c-d{EMTS?!+JIx9gavYYM^MQ76Eje2RWOJKv`z zZ^wbzRr6Oq;PJe6!1Hnk=D#%P;VVS!u=DFZ6Fe_>dFN650o5tT5htZxo-SzGt)*Y_ zAM|{0ITfQ-$7|m$aYzZYC$A}emL`svjZ0on*{D`Yt%@#^R7dnnlIn`iY-);D(3dA} zqhu)ocvrH>3_Fu&T}IfR{D8up9PXf=NuD;7ijr?qxa0hFu~|x~)a&#g(MN!vO!Xvw zVnRC4J;|@A{sYB`2UWk`Gtu+fFFU7Wm7cD)QuGC=!1MBfkQhm=A_`dyzF?FDsC`EqM3-P%Q@4FW z5so{$Ij*b6)73;p6o6Y!aLH+SPOP@b-@;h-SB)bsrhZTQ4EOKL;ZOLVf5 z{=1r*Jn;ZYCmjc>dikgltDK;E(Kq#VJah>@mK4X4`)pLG9Djia?Izrd;DLe0n0%Bz z&++l*92cHce9V?JD6-9(9GjR;Qh4C8#a;XgI+y4}0D3__Oef0rjJzKR(DZTA%)JWxU==tNto(-VXfwe`VS2R&UlH$x$z5K2Cw$_Zu! z9S&fRph!r5iz1%xFgqp@G8U~_2a`*o9HuvVzTaU7J>YdqDg9N?&IXSEn&+=ephloAB|3b%M-tf($6x69ipMIafn`_k013`s!XRBkvtL7D#QO6b4a%-DOFZD zrCwL^@8}~|)^Yx8v9Af*;l8}Lj>FqZ#6{4GQ5>io^FS%pn9nNQYZ_NT$jR}?5P4@tjz2*Gnoc2& zi%f9B@{kxv^@qG)?d!Ph`j}Vm2Et9V&|h5BQ#JWu?) zD7e@8d{uOsK>c|V=R7~ZGm~()sDB5JLVPWQjPecD#y)SJsl zQaoup_inbSI>A0dJ^8MZjuq9OmiD8CwsyB=P%oF5Tb^U4kvqUj@1#SqlB*c$MC>EM z?ltBE@t*A^NRD2waKj&85+Xt4m!s5@19PPFb@G!K5hbm>yRF2LKv#56xjVH#5%_4< zk%c;9%%sGEj?swz1<^>U@8-I-6icSzib$!bByxsVim74T? zQM62aREgo^y*XY~XFWN{zlaqB;*L$z_JH*#;$ZqqTdUN+9TmbC3kb^oY+{0+d{>_y zH8Q(aMW>69Gd6X_Qat#{E5|ZXg2XJu7X7xgAJy8nMMT$&>7ldxy(L-#flzA+rtnO0U(jorOM>^KR!9}^o@|te9_Z&yAQdm$^n4)XX?r<23X!Hv^jwZiw z7U0o8( zU*dR*{$Hg3cbzD4ETjLA)Bl$!%_`}9Q z(9-23$}89c_hP3;j;V5Nus1N=2q_oCu8^`rUF09=UT~Y%URDQoM;9IY2uuD#dP&zsz54?q!YBSr8gsor_< zRk%uSo29mL};{^Kz(DH#!6v~fxv?T}V#)pAG!T%n}5O<#_S zxiMA`AA=rudsaQXFGoMT!%eDNnnvL}q#Twi0k^$0H6M`MzO*{~qPv7x?!S{rYN%m6yjzL_)3qY`Mv?p+k~L^1KNZQOoBTwCNIUr_5hDHMNf9CqmcqoRFxe-V)|5Z>#xdGhpwvI0_4kzOttWM35vv=2XQ&&OV99GAqiQ@v;;RHz z=9FHTrl=?q^j4AgpQ}U{wPdg{pDTmhHZmZPv6{sUELz z1>m^FKW8Q5kn=1$+E@xl3P>Tb;j_2~$caqx-ePkEwBc3iiH!rEBo~}cV`zG zi0wh28^j4WMbVqP+3DNU&r(%K;xOZ~X|$LlE+jgS@Mz<0CwIK3-9r-b1xPI|GACO5 zSKb5UlK%lE1@(%0{Jqh?Bqb$BMe$R-=+Qzd$`$B5T}3J5a#1=|6y^`@tfHJU6OtRU zDhj@HRFsgRqQqE5S!1Xuw;3wR8=ndl<$6|8{?SlTu4EO3d5F9lR0Z{f5!Tfcrm@~Q zl7xDK2wgq-2G!ztSGgmtEX^c$Lp_;F+~I4n`vk$UD7&V60+Lq(s-$FkTT@Gqal?XnhBMiL+Q-bvphqeb{L1!8lEFFSgg2+3dms~LP5)_r- z1ky`*>{Lg}s+Vy4Sua6hN?va#6Le^nHXYz_P*0$-`OYq#LCl63PkVFO-uzSUI^vS5EFQ zl@kULRYN&>hn16Fi*jPLS0~jR`yA zLQ7qyajOMl8jqK{{$m{fNnD0)Yn9%D=$NjUWHbY;fRz;l3}uBQNm=0)hy}V@Xj*by zh9s@OCX zTFKQyWkI@;xWP;;CXGPoEcY44HA}-k?Z&y~Bs~DD1NqA?`3|T2b$4?(v~ty&Rrelr z+O&S-6t>%P3fpA~cNk$|@CB`a*!;>ezA&dObgz2;VH_0+r42{n(%tSVK4YM1LzB$B zRlsJXzgt>+nx@)Rd9Cw#Z?r|Z+a(QNl&8oGQIs_JN9kx0g(+2Dlld`j+Qk+<{S;22 znyUPNik3<}_5P9A6ddJOGzobl_W7|lJI?&l9Hv)*(a|a@G&OQ=p&PEARzx3E7P^$% z5>0k_igLGaR{Adg1^I60wo6uoxa7q`g22t?0Cg?8csdM2E>$YlVLBa^24{S|r~1J8 zVuy1_s`%;k6nVDZNu0d3Xz5ZeB1BQw9OU~BTJ&>N-HxEE+m)JDtKGRGflKbW^}wKW zg5Gf{7>CWoYi9S|yH+30$dCS1;?QpDs48!@(x!8cT1S9=id=#1HA=6gA*V8AjR`3lw*ipr0jZjhsuPgw^B^ODtODey3HcgBR^{Qj9*~uQbbZ%= ze3T(8O~~Idjw3#lm%(V$fA#o6r$cz0ZS zi#O)$IvMruSZ=>1WRJNQF08NbIvIN(uOv?Ikp@WqX)jJZsHKXxl_pl%{TJF_^Arh&pSgt{fwFME<4AOdXK&E$Z;EcdR9SYkEq*dOMOkokEBmcV zIBx{w^-8#3zBbqI4BI%zHN0%$wnZ0#f4ACJsQ*B6f-(|68=a>ttakKpYYR7eibcM(XT;r#srAx*0Wmx!bPAz03$%LclEnP112}n=Z*C3sNyzr^6xya7DyTTM1O5UyMW|ysP z##@+%>p)A4J2!?_+=G>4qpX9HWsAlj{QgrO1jia}uywnc$@I)&sm*ICr?cG+Lfulb zCW!-r?1F0)``2TO#f!48F{O^JCkNk9KE5{dm zbY+7U0CzT6o(;~)1`SV-w3J(9(AkzSTs0WsotAJDh4*z4H^O}kTX;z*a;lCfq=!`Q zudLDr_jM!b_e3H4b|Q3I%Q4Y4?4@DM&rj##_+IyT4lgf(Q8<)5P{jV;Mq8Ak7CG<- zDKJ{pBDMd)hAS7Nvw|Zh&dczTr^?M4sokr^ic-^vrT7DxEfb9QrAx$9U`lhw-(0>4 z@6}5x9{M((Sqx@Qycag#Z9Q>-)h9e7g>Cs3*&QnE0#*p;;7|Mja%27ruv*0nENpsp z&mvo0RFgmGj$MM67~I5>TI6L77b$D0{vd5`C3^q35`l8_k%z1ocC{V*<=I9A#<+Rc z^UpWE29Jn8>~Qbt*$IzB>ak0M_Gb`OCgb4x zbV*F6+}>Cj;n4XW1$#Qr<2QDV((LN|9pUsxx!I-r(Rw9lUP}-YDDWc+Y?(@d^mTfk>t^YBo)CF>bg$KM>WI>S zpW2CHN-5AG;}ZKRIXI*Pnhk;bwj#bk;^J$RLvk5Ef#AnuNXDz_D!;x~E*>wQ! zUtvK?RQH1DVjoSWhZbI}uEP+C$31Aw3jk=Y5=ijsixJ_Uxs( zM49%L>6zG}Gf(tU%;iy<#F)#eg^CeJyf>PkilYyu7>Naw9ywyJ5NrD~*+M zL!}X}k{hawaJAe}ZG>y&h8iP0TW*-`d71ePea#K2QS7e;-Qx8(JmUhB^m+24c}94? zylB1%w7$~>gxK3WQo^!2dPANA<`MJ|Z6P1+27mUv9B>o4O~w_zlf*b_C4x@?*W-8|8f!=zg^qoc zLC}}(&noC*pJcs_P6%5ttgnah4tptWaC0cv+i7loJ|~~SF5j^DWRxZsJICT@v?jnc zmX{xfur3e={2Q+^myt#0Q&)z+tSc#3Z-YR)Io;bR&<><~ z>#b;y{~n=xIXhr1_xxMHm$QDt1y;8Y4j8E-pEFj+ewS;BXG=*tUP_q&L_e_0&B9ge zW$bm+t2jF!hwsdoS9ZQ3FMGq88Xz3jT0PNP>NovK_WcbzJ)y>8He*EGur0v&dF4hg zCzZ?La!&HeO+HSllp8BKsY(u4aZa$^mT-W+s8Z^K;f4Gi%-^i^-;d~>Ah z&5>SU0yXKK*IU1i^VhF8fg+;74JPbHj%bXUS=vOFtwxqkkg);I-t+Vn^-iDo`wy4U zqOlP?JW~ugETjhZu^hzN&F7fKVCKKXo!_5S-VBDe`oo--Pr?QIKZihb>AMN<%Alv+ z{&4x`(tRu7+5Ju?^>Up=DcBTN%XGXA>JQD)P9lwmu(5_c#O-MIc83=O&ucIF@4bIl zxc*ABek!_2$Ys0sYPu16-jwI^TD3@9a*AX9)9B8SG`v!`0f7a(xIQBXpWuf|&|N-u z0qw0l=^#cHa9?sz4vHrQpHRZCC5hmWy7vN+lHhDg;0fG9ZmQgTRqMCZH@?SiJ1Grh z22dO|zu( zlS`Qzrc$*2|ChG+0gURZ^2g_2$Up{WfPtnZZPPZbXi#ZEr4HC6GMXZzGg+qAik00W zI~(~ahM9scScaFec|7K8Xvqo{6?akDmEEO^Kr3h_A_@JXn?{BLa-n;j{bI(2Z+;h*p_uO+}>~9&ksO%d!DG^{2cOl{Hew&S? zqz}*E`%gPD-JU>w)q2F4a@5(jupaY4tAZOl`!v@FOx?0pTa(sUHS(fzf=1tYHG0C* zy8pV0)}7$UUwHp8)e(;E7cd020@CEL7O5IJ!?$E9xhjIvHa~oHMths|Ge6+&BcYC) z!}n^TYDz{Rv>L{tN+tcXlZRKa?iQ}QGu!MCF%<+^_kjQQXkkB`wsMrML``g6na!r( z_a)Hym<7UohHxx9*MWYds`^xSa&sRqU6+|X(Dw8MJs?2;G6m2_Eudez0?tMKdMFhn)J)x z2Ps`@@SqkvC>^9G7RTmJ0N&FbJOGEQ7Vxte`~i;OgZJnR#{V{`=6DazFuLxhL)>-Q zE*=bh<8k+{Hj}&K?^8CPw#64A)@ZbE{d|0Zz%IQJecAV=2tlxlUg`f5VJv{GzQO|I z5h@=DRmNw4Nuv9;;Qp{a^gV92@m0(=0T0r2a$XJYvo!afJes>NcZb1w-NC)1*v-jB z_R{=lT(g6y850D|BEMvG-f{g^uXyOAG{r%U@@x0i!j1QwjGCbSI)n%mN2v{msO1O4 ztOVnyfxXP-k&71kIqu*TR!1Gk54&Yx%DgRcH&ld#mnPHn=5y)9(FL7<`gVL8FS`z6 zP#se1T{%A&8kLGD-=PCq^nm6F1P>h{^1<8sVFyCGY+ueV zZ`$~!lV6}WW<|u8?KU=3I%MaU)nBq9{+w`~>~mr@L<`a>JdtGC>ONEnayG^KFpxj& zgXW`4+0N^y>2iUkKeg0Od2LvBwz1?7wW*;2$srv0VlZ1XZatIAcv=Y~ctz}CLQMa? zmjf}FYui4XxT=ltI8zG9YehY+Vuoo|gZ)N5p?) zsi=~ci27!(=$v#Gscb$6U%6b-IsMt&V4DE9Hn}O?{4ZC>Pc+ob8qZUWxxW$d#{J^r zgnl=}?Unu`A!Fc!7v9Bt^;1KDyHUd3Xu$2jlNvp1z(t(i!JH%!%#%3G`B>`pI4!+2 zm(*K*|1?yNS=Pm0^q_L?r5@dL5tYYf<#D6(G@dx-i0rP@)LpraV{3cFX(3^_f@*s& z*VfrBJXR{3J53UH>bHFjwXKu2tusluj!AgJB;g5=P}Yzq`eo09&1nhMv6k|a$MMU| z{;uM)w>1QY=6AvJPzc4l;ClEK&T3{M!T8@Z3rXH@9+xL^^dorwmZ@kTCa+1{zN02J zkLq8qhr7aW4}eV{5p4fo6@a&w^4I`i^Ij9)Uj57;0qGY{SHSAKuZZ(WuiSGI^s+O4#TQb!!J^R&gr5di{g1nZaQQqCK2@;yCNM^Rs zqoo$L-lx|4OXEmh1OJXmMf^Dy_}iK}5JdxauOZv8$fr-jE;GKgDCZazrm}SZK!o%% zy)FuyvwviQ6!}GNV*Q$*RId8EwZ=D*h)*g)W>YDQA zIc=j|vs?5XH}8b3B3g1)e*UCN%nu&hrun>VtKm3aZl&vCv39IRZxo!3>$JM~%&suP zQ$S^mz6$RN*V?}+?w@R|aj$RS4JWK&+yqbT(9IW`6K|n3dLl7j2PrQOrnqRCWm!|5 z3-dSB70cuXUkyE08+(1)viagsYFq@v6ONtV$q)rB)M8Pn=Yt_XzsVNgz?(C5;&4Sw zDkVW(&2FzUyFKw9K=UD0=zJpe4z3A7tN9|)*W_04=hWPK38{u2tHt9& zdKBD%SmE{(sH-P{x=`+$_^-`>)W*$|(6f2vDDU;iIP$#JliTLiH$>= zadP*JKky1H2q0^SFNv_99A~f6q@S^0?Bm_6dAyr-vVOUJ^x@y=@}a`E$nv&uh@MZ@ zEf@QUJOy>vudsTA2@NYbVGKZd9wGpG4>vAnZ&M-+SK}&m*+#8ywc4;LcN+`e zx$K2O``oJ9*R;s$IlWX$UAIvUZ+dhbR7>$C8SQD2)AwW8#rLEZJ?(XZ6O&!ooP@lV zyOekBle?6j=dlY~>rbO7A4VD95sK;7DWdqge=;^Tq4Ms)lr^qwza~C&OYkX}__!rL zPyf?3cK=NN_aiuAa6mb_7i2bKgS7DG$$*IXl%$n|ZA*L>T>5N5!fsM%)aXz)WwV^) z${4HzkTLLpV}1_G4>)%KAx(vA{FyzGCSqr8nOpzLhC*o|FPz?L!NH2)P~s-~tUCz^ z7*+zWUn4s@pnQQOG@HyGfs6PWoTqG986{kxAB z+sZnKkGB{GvBfY%s*~s>Ux_|rjF&q17&bM|E7Z_XnnUl79>_zOL5C2g+6V+PSuWoZ zg0v6_`qxiszD-})0<=hG`)g?efb!*YMhi{)*}Z}{CyY0X8BqT^mvoI6@0jyjCd&5( zf^PPqAM}*UY0kGKmF&-#o+dY`Q;%jp|>#zH>U0e*KW3LQzI^s z45h+N>{Lu%Z%OtPlUG`jeZ}OUCD~t0eupKwvY32RF_{AiL8bMnw61Vv3w9Gp5kKh^ zwrw1wXJs$&Di&@RwH-TcLV)IQIr~a- zK4Hn(Uy}2FOU{9koVQwX4wmG2Ejfoua{g>9<{T}_`AspW?O173J8i|Lc9zoaTQ-w+ z$rDz11}G%58oA7+fBw^ab5De=E|ekoZp?t&Qvx>!RYI&LuwL@hdMUR=aK6@9sZP=A zs?-Ko?rk{mL`BuAU2CeLYT5irjv$yw^FS)&SWI%9y!)ndXBGW9=ue+r?tGs94b$Jx z>G=@-eUbiJ>HRYO?WX6)=&zCfn(6%;^!KA#<<6JrZ-D-slzt2S-HS3bNNje8(^WR9 z+&y_pg=gyQ+0(qU|9k)Wrq7r;d$xbp*zxQ!$Fq;6DCBW+^N=yBhs3CUD-VPr<OmC`hf*6e3X(=bf4A1_VA_{@H=Gz|kYyPz}; zLo$1NX&MG&wxTqRS8Vd!Q5qcrW1ctsFxU zId<7&N$aH7+(wN7nDQzb`e~bPO(_c6Jouj`j{cW4`KR0HK`ILy^(r>>!BI2GJtMMul zFrM8_ScGEHT)@hsbR*0dZ$jDeP$_6S%c>FVkS*5|bJEc~^dB6bO-kdVb&@B0XSRp{AOD^)DzKn zeMO$wxs@->9bP|~TRm3|?Mp|GS~27;gZWW75bJY;S1A~acK zjc#(C2@vY^{_NWwKn}cYQ#K!C4RG(F4jbDf?mf@}RfZY)%N!MMj|j1c!!;bV?QJq< zVYH67Ok!(0}FY_UXW7a_FEM96@`v#rwU zl9h-sf+mfZkDQ^o?>4OQg9V%enk06Qyr@MFs8LVubUN5$C4Oa*__NZ{UMumdnE1Tz z2ee{6?vXRaE_ud~DK7nHZqUwjs52rCcTv+$@c&M^G7()#+`B*bDa1rRg>cg#wzs3p zd$>#KvuFA$C?k1cgho_F4;v>}BGkR91+Z4p6i!Dwn~EmEJpDhifX@I>#b&Nz^p;V5xt}ISu-x`?;2H?L*yfz3=o$;pFX2sPc!hLmFe2fY7BepH zCN~UaO9K~{ENYGY90~9EYk)TZ-!2Bc0l*uO@ZzrfI&+_B_VH3xB0d1bvB(pcQ-Q^_ zEb6wG@$50Upwk)c(?b0-dx(&vhpo{10Tcdl0-ntHSo0{T z+k7yLrG99`1FiG)-~8##5e_lRIiZ5uxZHdtUCmcr&K77p_`Sis3h&1E-Sxik9pz3- z`NlfTZBuzw99FsLiqEiCageH{RdTTsQ7Mo*M_(no zU=gk*VXCb3$~`-|`G!41#1{?(hgueIn8urnI8F*g2V3TG9lcCg2^t1;23QjVHR8`z zTWYVgNmM0C{3UI)t~X`tgozd!c1yyMi;7Wc^nm^b(LdF>>CWaN8d~GRi1`xM|L)Hy zvAN2uvq?WmNxYyPLu0PLc_bFgnf3&cajdxpo9)f6W;fyDi@~gmBaX%fFcrw)>g#`5 zwBZU3cH564FFKg)^6|QCPz^UCy?$w#D4}msiA%?*pD64ez{}XukGluW8b@gjJC6Q#x8Tew)F&_K}#xwbgHLc z@A`zXY?~Wv{Rc7q_47u3f2sA7*b57=nLvMcl1(Z=5rW*X5e5@U8%u}&?yW9|+!XLyQ6Hth4tk&*Qdi z;$e-}IL#tGm8*7y$)@&;%m`&(qRfkw*`?$iu-c(E08e%>ezOV4d!*5mx!}OfiES=k zREZ||64i|1QgGEQ5bpCI0ySA9+~mrAIJcYR)c=-EbO461_3Rg$)85p4K?nUGCy6p>ED%<= z^~Hw%BUX`=TEN515B{9vS2zd&KB+ zB1CoK-Bd0q0NCud^>2yQ-2jZ-;}YL(_%P50woLp@vpXHtnHRPofv2;6oKa@}x_m#f!Z&qq}FfLnpUe35Qj!y zpbcmx-p}>r16wgt67S;DgR;K2#0EQVpgu3>*C`ng1UD0CDw*hfK%O7vu>;5##IWsZ zuV`>VjJcK1dz^{)VkH+HWQjOPEKw0z7{`J@*|^x5xRpv_13rp9cv{R>3(>CXm-4NE#Ex=o%@=xDl9CYdoEu?F{iinH!Q(>=` zSGiBQ0sWG|_46wl79xTMDcbXiqH6nDW?e$HPa_p5*e6l-vYK6uC3f-z^RRJj%bcIr z#0h(NqlRo?8N5YRHuPh`4N!yi zzZ;F;2G&DBsRf-=b2dR!K1x)RtvpQg%JYmwd;uFV;F+y5#I}ptzEgZ8cCOL9qA`8$ zChTx*HMX?7w;CDahm0@kW5Cy-#uy6)LPN-}#0+#cPF~lk%c`}yxY|&|U)3}FmEv)LDw~O6Mx618Tw{hP4xjr6uGyv-#u4q^pf2UF3!$y58 zjr!c(Tk!F10~uTQmQvzPbRLJP|J92lLMIq8I%v`&r0OTm`FYm6ybw-#QD zfC)ibDXde&ql%Z7r%q~fizR^8gF#0eOs20HT9RrbvEGoiwQGqs_?Ing0CU0|m~!Yse; zp~6TuBbX67e3e@OgZAYSih`}0brZzM;+;w{3r3Nd59MTZocE|akSh{?eQL-u3T+S z5XE)A|B7P;CF@W_p4>btR7QoORLG&^W4IHnE15E0FnE+pW!SSSzppdf}{i9_GUH7)X^Zjx9JR?*BkK1wwkF zLW@>)vqa0ioez`qloYD!wqv0MpA1S-OJ>@ zQw#MnxuLV6vwI1U8a&ILU53s^>mGB+ew?aB&r+W+F+1l$hwPkMOt+y*!>2$mYl4B` zS=l2tgZz~aT-}Do-mBFy`3WB^8+&-!Xd#3y2r*z1;)E7G0YaeT=>>!sU?f=U3!c3u z;m;a`rsi{gy**Sk%L&3ms>j1f8{!$ww^U&Hu?ujk)EVqnao)tQ)*MK~IH z@OoMTy@7TnZY8|=%8HyTs55AyNQs)kWS{mPj-G=cX!ITq{%Q&2O=5}naOl^{m2hGq zW&TFFx;jxyndg^$6PeYN`F}`LtE9Z&rp_dMl=TX>PAR=Fb*hAOqi1Vj+DHO9&ql5h7ESd@FTh+o{ihYk?-n<=g_DZVi&)uk!Q z3vT&3zBX2hpU1$@Hx7R8aXQh5{cBveD(IM7a!oX(k0E~(f}6_=ypi{+xAav?vqR0Wl? zb18yYVM4rYg~%VD@|C{2ZhL1FSQXm>=9QzXekz z4Yu|7@BufkA4$kWJl-c?wLziaHDx}~==LhV#Sn;kh|M#74h-A+8lElZXLJ`)&)fQp z7|yh)5&QauK#=LZAo`Zy-2BDVe^Zo*g3gpFvJ6DsALT<+CQH_aiukBPa6}W zW=usdnk8#r%v^MEC(gwUx6xH|%{6J)R?(Q;JNRZ1Z-j7@F$?xX);4(JGX$E%xhxTV zupKYy0b{OH~40&jn&K9N~qmA%s){`5Vi79MBoBg@n5a?KM z_8EJ`-}4NQAl~8Te%t1$ge39}8Sh~+JSQ3B_{XJCk{6zUB;*v{AMEJ#9`2zgWG;9N zGQCPwX9S^2Zhl+#KWP59ug6@(=8r-5Hg{WSm}LBL=ISKnq7wq_Zfg3l(pRqJT?w$F znD!6av)?ghe|QALH-c&jgc)!!(3Aw)Xm1ORP>GSuRi`Y3d&eUJsyHtr4js;1nM8t< z#7LZYWyl_%NxzQx-MRNti=;}pfPg#K}*Q&^}(=cq<-*EIF9Hc+3`iF6V38kpWetjR~U_zv@~)?Ush>>#3Lt@orF2cBW{HnSi}r0 zI`BkYaUyJBF@c=&XW!(jLcN*nROQ0$$`xng?}-9ulUJDoelG4*rDm^L1Rhq(d!wIK3 zRAk0M0sfFQ)#C8EIB1m%d22lzd0 zwsb15$E0jD@V&(tWRv9}!*yUth>}af{AB2G#r8o3Gex?KX2RdW%+b8(cqyr~|6F^yEwoTG9yDEYPC)OSVOUREwVpj@Hmd=>9MivE&2%Vo~L zKI>dUlVt=AlWaX%%9s_FhOHQ}-nM29d8(w+1#a03mZ9N_7%iKipM2Rrjv3dlj2hR} z*wfb;*ZYU$xK2Fy{}cb@g!msEN9u+x@-A%1JH8x#<5G8+`}2g7b&)_tH!4@7iPcux zC+4v;!4s;(>@G*KyM`Bz{64-XA+T6UV}GpTvp~Xop-zA|`fdX1 zdLS*8D-Un_qG;vhj;ZQ&pUDOmCt_U&m$vp+!(TjisSa~5Z~%9az-TPzwWrI;>&pp zex^U)JTfA-*5agpsUIwNKGj(6+}%*_%q=ZQ_1RD9I_ zo7j!Ooy#UZI;@O{OQm7`=A)vLF}7fq_3lzN)G17EJB1An))1!MQK(a|`8|6OQ8u5j z@tX7j&Lod&Dwu zj}}?oq}8tqmwJsdHn8QU$zmS6RA5zYv{S2JJqLQ~9*s|hYiUh+NZEX-qD2<=%EH`a z&4KHKox~Vefb^)*(?@}k8r-YGNyh#)YVbf?@ZWIK*z8TSoi@CD^+bx^$&A~(sm{cs zFiJlb5ss7gn52R^a3P!y?Tt`*{WJe5mt~1}H}fh^3msx`Y+@A_CdvhprF+q6{q{c? zg0!6R&oyybVJ31cy~6H-XAL$R!S%>J$qWvpBW9u93iZveZ8!m9Cstox!hXWo$4Z$N zJj$lXp@YPjcf>|U#_ggp{c}PM?S&sIHkzQS_KNdu!gsG>JcnFHB(`X`uzK3d^x9iG zDEM18$%E@z`8E5arSI7!FLaj5cn>#(Qk~w^K1@xay~=ZZ`0rI=^#NMQ?U_hQ44H!Hl`_j79oGTGZOVrEk@ zVKB3|Xtj`=gJwl_b%(IGqgwK{!jugHYcJ#^(~pbgRi+;oE2wS4PKfG8c|o5OX6KwW zyAGd+V?NPMqJyY_Reo3H?gY=r^1H6xl|Hm-6AgP@JhJ6HTC|6zLz|6;-yU{Qc!F5$ zN1qyx#VqzQIPu8jX&vKi3sSGq>~o>KEi}9>I?@&$+JgHf)3#tI?895I6ZWxOj5p)* zE}YGTeALIYs8>9^r&fkALxW{f2C-XeEjXB4l=F#i%4k6G5$Zj;JF(fepc7i$&Q6*| zb2G7hM+sL&g3GYipU~cP@k458K-|Z6D_J`ZiD}$L#$IW@#wlp=BQ?~|He`c=V81tI z=k6T}gmiD}&&=?HMcb^gm#j$+L3<2@1`{4O#TfFo9^=Nlao%}>hMHRq;T+nw0p7ML z%l-I$TGS^T%)q0&TT6J9-_kfduLk?zc`|WMi}nSg=USF;Am%t92%desfdQ;xhuy@e zm)Cz>gTG3urObfvGBxBh4Q2?8L=QX6>uFg?5a4+4M9bU6^yQ1h_DK<8w54QwfF_>L z<~}WM-}rVLcf7}?XI{|LFh&l9@(CPX1fqp_v9h(-smvh{m&cqZRPp`&%91OV%4WaV z+I^He$;YS6e0)eEf!-SJ%7yvL6(65(zSqtlIN_s$@){g!P`7vx_dC5$W1qW;_!DQE zR3u`jS$07GO#!;1U&%TG8HNPL5ip?fslmYor6_Me=ILgKqt;?_s-C4-(-u7x!Xwf!zIk)kNIJCN%P2oGc#Pn@9_Tn|s3n@PPiE zf-&z|_N*tkFOwXAHf~H&saBGn52@)o9E}jar#ktJ#G|GW0DZw3HF^%*9qm)27-}lJ z&QnRHjEb|m>M)6fstBJP_{6!Gn^B7${hC-CGGu7G{9u)q)!o6fd^8n0yWot{Gg2FL z|A77UMTHAHP3Xi0{)#38eAda>s^gS_jGnI#A;A=>o=c41<~wJgaro zF_?MyG{wJZ{%yytii#b$rr~YHFc9deskvN+e>?a$iM^T%zPRCSJ%f_mA~jvZW%w5k zSs2t-+~V9YOB0#!$#Ra9pRv?X%{A~Z37s7PykT?8bWLQCJmPC0>zlRcS={b{ESlLP zKklgHs;d}~p8@f22T}yAmU}n&HJOLf0^H+s1SvG$dLkle+fZ0gNf;ZP4X4vR!@Tn) znQNS`6K4qQr!?LW+jHG6_GqCRtphxzQVYRSYQ5_yPGqv1yy*GU85j|r?oJ&Y77O&; z9a;yTVQ9w>n(0&iMJbU*fk5=MS9#e3!g8_J6tLf|rq(f~;!I7Pe`YSZu(Vt!j#%Zc z*Wb{@RYl|S5!fCiRw&20{=|ng{=6cE&l5{9j$`XYD+T?qWHFj+T`$#O@ZfHpy3Dnp zGy9EcgqQq+ZQQGr;{a*fFtf#zJid+_Yqza0%T60XZ1^@NdWX~wY{P(b28SZ z{P|vPii4J>{1LMX9&%rmP}fs4gH==}q=l-9!|qR`dlL`f{3kYFw9llc*--0|SB)n8 z&3n`^+V>yCXSuTMUvu11l$Y13ysdvSMS{3h}$?;jWj_ve2^Tn`)Bkyi~_Vk-16pk@z@oP&glSJ$Q zEVToa5&dEp!<(y!xxXg11FqfO{@nB=gRHUH>Jnwyk7JhQapFupG0bCb7uT?77*kOP zsz{xQPZpg~7Ox^E<1}g<^h}xV-TJ#S?4YE-NN>q2nB2Xo-ZC)Ke$nbZf`YpQDM}Hv zsBzxZGwd9e=G=~5;!7sFUKWn^?Gbw}*A`KgEF~&&?jOUUe9DIsY5rw!fry)Cc$o~8 z0*xLTDqy9~J%2eXwepc3iK0pv)1(lwQ)9{z+Pg%94~PcuFKLUGW(N9|EfN+SKv`{E z9@l5Nf%?baYLl1$m+&0CXV3Knv=0J0>W0G~4?FzH_D{CiN=Z^YRxarfQRTyPORHS> z->C9)lZ`PXtx3GC-?5blP#RVpNWqN@qmQl3-}RHx%>RCI*6R<)8n26ye+)*ixUt@` zaQ!XBr_95rNbEjxWn?6K54_;s;RL&ehr#_14g(j2>7jf@sDKrdTV-E#YOs*K zg&LHd<>19cMQBLo4stH6870SX4bXi>$1Zd0Z<{CE^(t#fC{}_z$=sK0JYLk4hug@% z)^RD4OULEh|Hil+m?X#L1kC>FyZ`T*y_M?8_VL0XR7G0*qgu2&bIEZ(D>aEQFJ|3| zMqbEz5_K@wj17GC#@aK8_TZdE?BLzZO*&T*JfHYm>qOY{G47vp+&||{#*Eid;c)E4 zS8uFQ=g_G0(C4_a10;iUF#WCw4M+yixq<;P!>j3~=uofLfqxN|gdfbgAwEsx5&B!to4 z>#}bj*tg#l7=Mpy*r^#$8u1{Dx-BS*SG*-UJ`=RPl{%{Z+<@=dYI8*F2qBVHM8%!P9I z2^OFM27ZXd`gUKheLQ@4Q-_+!dpc+(7T}L+Y3%(h_?aI0$OxZ-jUOLF8Cdra48?+# z6~QWRD|@>N5w|N1A)DnK>_ck?zgCRB8sU}Wnp`Jj9RP$~oBla=9DfX)o ztO^7@-mU*m&l@}hDG+jdw|=K;4uX22_5r3iNgk1eOCseM>l*P zyJ!ekf?X$sIp~Fgbm1;u6Ry-kXF0CHy|)@O^@G5$({+FFY|HzEbEmUSvDU9M;rLrE z+FL?nDcWUU7b9cpn`Ir$GvHqp%k%=O5n5>ek%Y3ekSia>^?)AQ1aAIQ~mV&+;yx zClDO+KFQll9T|OAYN&qwQ*9rxx55 z2(~94LzJV?&cw%2u8VrVaKEqR!5I6c7$W|1?mE6(ScS)zS=TP ziedAh7Ahzi7jN~txekxgYZK(nR^#}YKAKLm!q=|N6Fxa)O7Ec*?V+&~D(v?qQ?hUC zNX+&PL1)8*@u)MsYQBl!gbmmK11zvv1%tuFCk4DrwjA~p5u+rV?7SZ(>#KGo(pb$o7MW`z71HfP+*Gaf8na)EtmS(K zTznmZwmNL_dcG)332}8B9~MUa-Xri)Qc#oU#Jkq8Ryy*4pB~iu0{juF?Rd`p4dbvx zz)xNT4vFcYH4^;dBpTiw+)8Jhp^91x-COaw53GB;Q9LgF9Rvx7#*N$*#zAJUQrk~h zUSn!|kL7i(+J4&dx=3x`Z+Ts)w(qmNhSm1Hme=`e`yR{dQnkI)^14!OKV*5WQ`?VO zUKgwFM=h@ptL+CZuPfB{1D4lyYJ0EIZ;u#>m1?`+Ql?66ue7{YtL;^m*BZ6G+VVPA zZLhJs&Qsgx+Ks#OCGoF0!jYPWm7uT{6bI@N5nV(W2Vl1hFYFbkDYje;Yf%~#_{!1d zL6tI7xFHc?SwsMt7_RX*+tO@f9MNr!!pyn@R;NvznP!V*suIN`hI#JT$_$%+HlS6G zb0C&D=_MSQWkZrftN`Bn2SvD*jqBz0=ChTBk=#Rwe@i;+ERng%$UK5f8tQ%UvF$Lg zMDIoNof0*e$d@3;)X`TKMoLbtC4D`1(07QGjiYl3oi%DI4>g5T42o`%6df{DqM{Y>7BIUaj%1bZM7& zwIVL>q93}cFp|BWKJXq%4G%*X7av~mIWx4@aN_x5rL(J~Uz=B@Q||HlO*Tn?-<-n8 z__+NX61kKuvO(dlv12YOprv|h9v*^yT6#VnNcZSi$XN%q)FRG0prsdc)@fQ|b5^gG zYUHdQExnwxP8gwJ_GxSqiRC}{9qA_;v!EL76dXjl3h9%a)o%pG(PjS^`(UkTV@xz0 zP1PT|Ix@a_jCuagmyUa+e|K+6oB{TTE4|9|xL#xTrY^C5b3!?KNR+}wqh@!SBi8kZ zQMuq0iGFcA_QK7u))7uOKZ5J6Y`39g-1moiN$)ehP&(`G5B6?&dvfzxNZ1WEaE@>q z#+gnWw}qSJmDi_=;0)WT|CiMoc8O>jg&^WxZ#cG3FmK7#Wz!@?gJDi@dg&Aw+9-uQ zwg0rRN1+M%X^eRU!uF-3{Y~QHaF71#-VqZ8_7(bBm@V}rGeS6_MX;WR{)h0n!mB&q zGk&SEQ2OP&fZ7hw^(gix*W49+&3mNB`6889y!kidxRf@YucYwtD(W}V4;s% zt+BHPH^OamC~CLS2RM8ecIpMb)IY#p19UAkAfjgfUI`8$YWD9rYW6^FP)F44K3o}$ z4y9eogijU`@WOkTPq*1I#aEn~6v<}+(6NaJ83%>iu&`yaavTXG8{RsqAbq$OR%%VC zy!lCd!w}>340lFsHmOUxeI|qp$8noXs{j$=aJ!{1YEtNn?b+usz<^J` zBzu`p_5^Y2F`ciJM2}gC8!j^B2Y~6n!2A^uPM94hMO&+3@3u~0DsU7WUOYR4z1yxx z?BR)9vrCP(SdUu#$$)|Rb`6n)=W&DFeY1T_3aVhxA+ScS<;7iHJdXEA=H z$?)t9-VCYJg1YI^L?3a;6*@eQ!3myW4=MdP^2)ehtTSj*`YE60^efK^zMp?>CyCC) zOn3tPIjGaVghVq8{}v|QCR#_5T0&RcOZI1rT< zf8N8P0p&_GKF50`I*`1o4Zwobdn7opL>mF&zHeg-EnA{Gw&$CIOUHFOnY%5vaiVo;9?Jv(qI@qCwuJD=cI75WI7jIJ-s;L67->L8&C4%01_d9;fzwa z|9rn@dWO8maER!Lznuxs?kYFmftuNMB?L0|VEgqrAYpNny%pf#v{5Jpl(%S#vGMf| zO?c1arD1^kxaAhjaOauKU}uGZ-@gs{kI#>-5F{Gk8zDd=ifa~kkFq#Ej4hn7yy=1w zZ5O`0qSAY)(&?UTT;wQ}FCrUcvH{Ma2kE2A5Del({rTOBhaU*z$ z##m^GhuP(Gb70vzu1^oSo`FZUhe#SdE@dIORJn+5h0LTL zc2I|4o)X=9CnYD3n%z1R!ua@$<_LGKlB5hztNrm$2UmSi1@Wy=yZVNi6oc| zFaOCT!(W$=ZT3{@goHSJHr!RP=`9H^5@_tYA~)NdqMO9sh*tgmov39nlXc&VRI(nXCkQu5XfUNx?xWnidkBCP+NR%^T z6IWGX$x+%ii&GZa?L^$-i}y$a>~UM+RJTdEv!6)a5h`;ew*Mcmt`UO5*I?9SdtFc8uJu(HOw)GLpJsJECt=%8swfometNMCza!9O#gA|g6 zet^I({4w5zZ&O3tb2H7(t_}9>Mq+fkmC4$gVx9@;?9bj|xAxZiNFy6bol3lWT(E6S zjU#r+E{SO}_lDgxB#2+W zV~4*sTBirMQ>AT2FMp)G*voJ44(`S3N8`I{ZIM|2H?J*TaL@HS)SvGf+f3qYR7A){ zY=&tE)~}Q*6})L^ZfLK#(?qK?Djw_k=Cym+x1h5aZnES&tH4@Ibz&-CeX-lvN6tgM zpOcrqird*Xp3TnV@1-w_j&zf3U(ZJIm~jds(!u>v_l9YJ+=lG?L+C?hrse}>bZH(c;?Xi*8@+{y zT%aWd2GATD=Wi~7G>_u~?wiRgd@%*ySRMC`IWJHKmh=4_$OR|l&C4mb*=m+C;oCA=l_*m4`&UX_7}r)ANG3iz@P`2&samRfdl;v41t z1s5{3U}Ye9zU5OJ+$b74*Ya_UChVgaZmCPJJMl<@pNPQ)XPmSS4*F(x0q;<+8azwW zlZIP`z0!Xey`6>sFyP2O1ks8f-n5)c>5L=ZYXTAA$exb)LQ~OSTPJ%!nHvb5Xju(w zk(xlXv*i&P+9WiW@T+MWH-x1HOPbNDC6+J-P@{*m;2{#D5=(kJ1}rTsH12t!@K=Qp zP1ry6Al!)v38SamSkWY|D!7;v?|mKum4=>ALkOLSo_qHjSWo0clpstloMpyNbg6GKJqV98HP4H)%G~(5Js}wHWcjUCVfLbQU(` zY?7sNHMG!XoIB&UNPEs5I1_8q=L7ZB3QEaUib}LL!J1a>VB2E0;H}_iG`rPocH6kke)>){yOqC0iR}L(RI-0n zUgV~CNFro?%7xp-4IXXj3$C!{c_E^^?gF>garJD}InU@ypK|ebVQ!=??{!5qe{Yli z?NO!WT_)It3Of5TSA5RU0MQu}DTEl4Q!s6#TQ9S*)e5z1li98<k+44VPBdX5H(}8* z4=Kc63ODJeM&%e}n^h#6$aTG-rBFa6DrU1~MYP^A5$&G21K{T|`1yj;eA_9b`{0m4 zm<6uLxSBLqCaf>Mv$V9h>~>AM{_F4?lCE)+t{cat>tofRYnapSYtm zXB<*=aIQZiF6OC3nWA{atU^#e$nYx}N|k^wd-=^#IY!6KDs~KCsZ%|@nz(~U{gl1c zWk|9YFC{OI&|*pL@Y7rJIDQf7#M?TBkPz>GMNc&J&p_js=vUm0kCxyR)SE(x)iIng zYaGtlayyXqFtWIsQsj(T<8a2E)up9{9lgpoO*BqXI}Q%Zkk&*kzr2K^XWxllgwb+t zhSq_!CjDLWjWo$iY}Bms^kSI!&K8BOa|=Lce`PN=T=ZLUyaY1d6xwbKzjsW;>sxL^ zi)>tnOSFFiiFN1grKPnFevV>f2tVBz8HU`}pMJv_8Ec1)k+E)gypi$Xt!U3$28j~c zrH*0)rt?7f_B%kX!kauYLW2?g&t`(wfnPN`XwdyuDo`ug{p+^^=OGm6$iK-h4uXTV zu=pchjoen6X|PI#g;zNjyov(g)iH7{z*P(|l)*Qxa_x_!a>gO9$c0=(0hVji?Z)g0 zcbsXR(uvvMu-#yv9;ia4eOzh(o7d~p58ql^TI=9v(kDd~eZEY72FZ@JKZ%ZZr&Hj_ zF@61=E8N!$yHl&pzK)IC*Pob!zFy6JjS{(!k0&9R?Ll>nCzcT3eI3-oK-jIORx%H+ z8Xg%b1#V;DD;YR)t*2ugPT;$DjmS`5?bF-Jox8V}J0DZaoj==F?)=u5%bkbY%bm6| z%YSzKIGknI_|J8E?0<&-nzQP!*f$wpe`PfJYT{V^HS%MN{_3fP`KHjjxp9X6T6>GB zZYqD8glmrw6k=1J!Rz-A88?q;FzzusXz#ckbnIr(a1YZEC9)N)bOB~2dy8`60W~cM zj9=x_G*vtt$1iD_k4-YVz?vpgSEiBqT=y*_o-V- zOItN@Ayidyt69_tR`%@{_h@Q+1b@%zQpLR*elz9_d3##kqYdjHW3-ktaOlrDDRCnj z*VUxEZz(Ncw9zt)uv*EJDqnP?CTADn!sYdp@9QlJrdEzx6s#;WyQ@U`M#^}~x40)M zm2c)oDBt{GRlaXv9kBJLQR{#gF{|?s77bLcIN~>;SikqCQHr(7+5r${9UlOTIzBZ1 zw3t+d`cKQ!fr#Y%&lb?PP?+WYJXW47_&IR{y70fx9;FKpLuchO2XOS*?$Iy-HqQ9IqN*BdN%u-!+;af1lE*ds< zQN>KqgkydLRQC< z$MO3Mp$GmF@=?;YLTHc4t3ngRf!LUynl(;OJw6NQvA)YLD~dfep59nFyR@_>o>^Q- zMV$qNK_9;%NnW}84e7mtG(mA^U$4E#NR#7FXy;p@31-=Hm+@w0plXY1Ic< zMnfL}RiO`vTL@~@owZ*nYTUO-B;@wZ=W0M%R_rU~D3RMYN6Z{?C!KVP)!b~TB&9eW zm{F>*jL|7RI%mYtDKj~_1TB&2jO5bu}VZgef%o3JZMy%uLZ(ua@mzaYQg zJY8xlx>rFgBV+f6wG|Z9wVa`?lx06+$C?i%s%=|7oR}_MYh~YqvB4+M{JBs}lqej8$avDr7{0_=t;Hmx(lt;CobDjV^&wO%jlyh+Q@1>V1hh1^^%XX0y}BFoMeN z8uRfCZz{=5%!wB#Wv;q27aiDbW(Y6pxTgaD^UlzDHFTZ^k@Q0lJkPS6dk?nT{7|x~ z8+YUyv~>HhbvkwA-f8T9+1Ujd$dj9sbL4Is>+>b6FvGVo!&6GsBb306%oJ`dsMmHC z4LTT=u}bXfw_u9S?k8A#^tS$neNF5eHup8T54*F*zGhkWxiXU+lAbf-4;u8m zMd^D$$@}7qN~t(AF|V{Em8(8TQ9(k{iHLwr;2$X)!v)^dKbu`prnJ4Z7^jW_kR8=_y!#Pq|S z(+$yY-c(Rz6;ovOb?Nu>QKiK+RZ2gf6cwcN^^KMj`r9wP!9HPN#%EFB`kM6hw_=XN zN(>5IUs&%l6NK9uHPmNO;QCmB`;2GQ3XBxEK33prrjA-|jU53Z7YZCNzHVp$wAx1x zfP1{D&szGz$M;OoV`Ye%+yiLn@t+vYPAEm+5yP(TM;ia4;#(Aj8C7}=hNINV`OgP7@1{99d))XB{tXc z`?>$)@vud+#*Ya7%heEymU!5|169m;*zH&*jvo(ufg!YgP)w&c=_@O7{M?@tfwCj| z0r8I5mBD^>E8mSQiHJSFqH$ro(HN$)@mbw`48(?VP!E;_IrgAmǝl|i0Uw~F}i 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 +#include "../solutioninfo.h" #endif// __PROJECTINFO_H diff --git a/ext/CrashServer/CrashHandler/SendRpt/resource.h b/ext/CrashServer/CrashHandler/SendRpt/resource.h index 6548f4eb2..3ab8b69a5 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/resource.h +++ b/ext/CrashServer/CrashHandler/SendRpt/resource.h @@ -7,16 +7,11 @@ #define IDR_DBGHELP 101 #define IDD_SENDREPORTDLG 102 #define IDI_SENDRPT 102 -#define IDR_DBGHELPX64 102 #define IDD_ASKSENDFULLDUMPDLG 104 +#define IDR_TRANSLATE_INI 104 #define IDD_SENDFULLDUMPDLG 105 -#define IDS_PRIVATE_INFO_TEXT 105 -#define IDS_SOLUTION_URL 106 #define IDD_SOLUTIONDLG 106 -#define IDS_SOLUTION_EXE 107 #define IDD_SENDASSERTREPORTDLG 107 -#define IDS_MOTIVATE_TO_SEND_FULL 108 -#define IDS_SENDING_DATA 109 #define IDC_QUESTION 1001 #define IDC_HEADER_TEXT 1002 #define IDC_PROGRESS 1008 @@ -28,7 +23,7 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1002 #define _APS_NEXT_SYMED_VALUE 101 diff --git a/ext/CrashServer/CrashHandler/SendRpt/stdafx.cpp b/ext/CrashServer/CrashHandler/SendRpt/stdafx.cpp index 359df47d3..41c9e8fa3 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/stdafx.cpp +++ b/ext/CrashServer/CrashHandler/SendRpt/stdafx.cpp @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. diff --git a/ext/CrashServer/CrashHandler/SendRpt/stdafx.h b/ext/CrashServer/CrashHandler/SendRpt/stdafx.h index dc4cf971d..6e03d04ca 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/stdafx.h +++ b/ext/CrashServer/CrashHandler/SendRpt/stdafx.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -26,5 +26,5 @@ #include #include #include +#include #include -#include \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/SendRpt/targetver.h b/ext/CrashServer/CrashHandler/SendRpt/targetver.h index a00a2ffb0..8ce951d69 100644 --- a/ext/CrashServer/CrashHandler/SendRpt/targetver.h +++ b/ext/CrashServer/CrashHandler/SendRpt/targetver.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. diff --git a/ext/CrashServer/CrashHandler/SendRpt/translate.ini b/ext/CrashServer/CrashHandler/SendRpt/translate.ini new file mode 100644 index 0000000000000000000000000000000000000000..d60f22ca0012fd37546c3de583144c44a63c0424 GIT binary patch literal 8244 zcwV(w%WfOT679vTE|5)-i)7eU3_g}9}-z-eeEX`Z_^vu)@%-9TN>^Jk7`H$H% zsX3L=vAL3`mCU@C?^IS^@NFT_L-U7O%g9)smu6(%$oiBLXEHt(iK#i4RjEABL?2d; z%%3tcFyH4|UYWL;%jZPqCo=aNwM@DDmFddPiOgc;%FZn)b0SahVI~^=j#&Fto>w1a z#Y@>Yl-*^?m$G_HA5{vp&*dF!hSY);E7=b#=A0W*&q{u0#AIrH^LF+lzrq!BYJMks z2UfnyfYfuwY{4BP868oF^T=!Te!b@2k;MplhGMTuo95mw%J@bk=)-I7pYi)GR}L)_Ghvh;b&|f5=L?xrp1mhJb24-{w-cXtv_50} z)JsI^4W$%iJNsWp60Y;pS)f|teUQ1Z>)&3x&*6VzW47da$G(@0B0S3~aseyOELP9u zTP06|SZDdXa-zHfGJZ8+cV>Svaw2mXzwy>36T#@QjD~NRRjZyE)QdC55%2Kf7i#;R zn%`7Ul~Fz^19KIN0?gv*Vn2O>WRPtdyX6FpuOY0*FdKx95P? zoyqrDBzUxo>wL6(^f6vvWPPmndwx{=j8z7bS61>1${pr$&nj0T*JhT9)$xaA=fq)k zjU}iQK8q#>_57{f(Gzcn^lm7e9qud$4IqspSJV@raH^}kw3$0I9$ZB z+!_8q9u#Bn6KljW;KM%ca&_;L_N;Pym&WDhr-;(yl5N=iE~*A?R@_lOqJE;600s22 zWkJ^^Ge)0=*7{58by4ckK3Fssi>mu_pWgL|WOXhmvip%GS>Zi3E%{&_GTr&+@qcNw z#%87|GcEHob!s13GYjYWzCJt9lG0biPrYlJAGjBM(Ld;eq&cIqGQKPH7%fGty0?4z zsYTJnZbFP4qS}ittfyPxr@2ID$!1K8 z+$!@){fo8hu8S!CH?hxITz$^>)z;-;Xs_0vxM~i0+I1E6fD*^ic`~lRDP!IzL)@8e z!5WZKYJAGCs*_qJT~-2RkF#owG1iDe&-=iyqE(7}k1LU%Ya7vbHWDr;mA&OtlXlOx z-Q`hU7e)q@^R3Yyv8mUAbFNp#J>bCTd2GPbz-`V-{#m8MR-*$9rLPY-^MhDB5Pvjp#`Lq;??Y_V&&%BEDpd5| ziNDSNJGm!+YkO<^_o)^^qsHE*Ex$TV&`s&ozCQ47_X-9q^)4Pmu zt;^G~JgdfrJneI3Q;$su2asweI0GG8)Uf-R>}pw@u%<>nH|bqB=Q-XF=~2~* z1X)n@Joc!YRNvjcku^JZB`lz=x4OT5!`+9hCLQiarBb|oj9hLyEWiWAqQUIS7>in- zMQuu}zU6_*hqeN=X?{5S~Z{=(_p${q_6%+`SSDof;-4f}pI#z!|ZEc$^$AT!3RI9Zw?8x|OqB(M3 z{(P2fF}EF0zzeVjc038Bl;eiFfPH(+apjw4SEsbM%}4>`2BULFo|QF#oYw;FkRoM<=M6(k)GYnGim8{!6EI*iDX?16kBER#686ML-~JXkyk6qNN%b^TIAMb|MdNzVqH8yOl4{7M?s^ zw~5c2+IMfh*WQgR?lQKH+2J|nws+d1+%_4d-OOR(c;2$SX$M?(zJ1(H_e+s>Uu42B zcLGH{+@@!+<$CFw35~)&pN(Lj=J>;0ljbJskn$(a*i9Wt>tmCMfUBS8#*34H)>?D} f*tzM(yHAF}x8m6+#4u!W6)Mp7DA7KnH{X8%y>$X~ literal 0 HcwPel00001 diff --git a/ext/CrashServer/CrashHandler/SendRpt/utils.cpp b/ext/CrashServer/CrashHandler/SendRpt/utils.cpp new file mode 100644 index 000000000..2a68ff314 --- /dev/null +++ b/ext/CrashServer/CrashHandler/SendRpt/utils.cpp @@ -0,0 +1,32 @@ +// Copyright 2014 Idol Software, Inc. +// +// This file is part of Doctor Dump SDK. +// +// Doctor Dump SDK is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 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 Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +#include "StdAfx.h" +#include "utils.h" + +std::pair ExtractDataFromResource(HMODULE hImage, DWORD resId) +{ + HRSRC hRes = FindResource(hImage, MAKEINTRESOURCE(resId), RT_RCDATA); + if (!hRes) + throw std::runtime_error("failed to find data in resources"); + + HGLOBAL hResGlobal = LoadResource(hImage, hRes); + if (!hResGlobal) + throw std::runtime_error("failed to load data from resources"); + + return std::make_pair(LockResource(hResGlobal), SizeofResource(hImage, hRes)); +} \ No newline at end of file diff --git a/ext/CrashServer/CrashHandler/CrashHandler/targetver.h b/ext/CrashServer/CrashHandler/SendRpt/utils.h similarity index 70% copy from ext/CrashServer/CrashHandler/CrashHandler/targetver.h copy to ext/CrashServer/CrashHandler/SendRpt/utils.h index a00a2ffb0..bdd624b90 100644 --- a/ext/CrashServer/CrashHandler/CrashHandler/targetver.h +++ b/ext/CrashServer/CrashHandler/SendRpt/utils.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -17,7 +17,4 @@ #pragma once -#define _WIN32_WINNT 0x0501 -#define WINVER 0x0501 - - +std::pair ExtractDataFromResource(HMODULE hImage, DWORD resId); diff --git a/ext/CrashServer/CrashHandler/crashhandler.props b/ext/CrashServer/CrashHandler/crashhandler.props index fba2ec81b..0226ba9f5 100644 --- a/ext/CrashServer/CrashHandler/crashhandler.props +++ b/ext/CrashServer/CrashHandler/crashhandler.props @@ -3,22 +3,12 @@ zlib123 - gsoap-win32-2.8.0 - - - <_ProjectFileVersion>10.0.30319.1 + ..\CrashHandler\DumpUploaderServiceLib MinSpace - MultiThreaded - true - - - - - MultiThreadedDebug - ProgramDatabase + Size @@ -26,4 +16,9 @@ Level3 + + + USE64;%(PreprocessorDefinitions) + + diff --git a/ext/CrashServer/CrashHandler/solutioninfo.h b/ext/CrashServer/CrashHandler/solutioninfo.h index 8ee0b0bd3..9262ffe81 100644 --- a/ext/CrashServer/CrashHandler/solutioninfo.h +++ b/ext/CrashServer/CrashHandler/solutioninfo.h @@ -1,8 +1,8 @@ -// Copyright 2012 Idol Software, Inc. +// Copyright 2014 Idol Software, Inc. // -// This file is part of CrashHandler library. +// This file is part of Doctor Dump SDK. // -// CrashHandler library is free software: you can redistribute it and/or modify +// Doctor Dump SDK is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. @@ -18,10 +18,10 @@ #ifndef __SOLUTIONINFO_H #define __SOLUTIONINFO_H -#define VERSION_PRODUCTNAME_STR "Crash Server" +#define VERSION_PRODUCTNAME_STR "Doctor Dump" #define VERSION_PRODUCTVERSION_HIGH 1 #define VERSION_PRODUCTVERSION_LOW 0 -#define VERSION_PRODUCTVERSION_BUILD 10 +#define VERSION_PRODUCTVERSION_BUILD 15 #define VERSION_PRODUCTVERSION_COMPILATION 0 #include "..\CommonLibs\Version\version.h" diff --git a/ext/CrashServer/Readme.txt b/ext/CrashServer/Readme.txt index 9a6dba408..5079d3966 100644 --- a/ext/CrashServer/Readme.txt +++ b/ext/CrashServer/Readme.txt @@ -1,3 +1,3 @@ This is the crash report library code from -http://drdump.com +https://drdump.com Licensed under LGPL \ No newline at end of file diff --git a/ext/CrashServer/SymUpload.exe b/ext/CrashServer/SymUpload.exe index 64f62b19535cf5920ea04c74b67c5c193f7e9367..350c23f0febd5012b7dee42bfa8d738951b3ed24 100644 GIT binary patch delta 108224 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�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

  • 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 JYpY77`ai#wD~A98 delta 100411 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 - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {9B6FEBB3-70FA-4AD2-B085-3D5CCECE0647} - MiniZip - - - - - Application - MultiByte - true - - - Application - MultiByte - true - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)out_$(Platform)\$(Configuration)\ - $(SolutionDir)out_$(Platform)\$(Configuration)\ - $(SolutionDir)temp_$(Platform)\$(Configuration)\$(ProjectName)\ - $(SolutionDir)temp_$(Platform)\$(Configuration)\$(ProjectName)\ - $(SolutionDir)out_$(Platform)\$(Configuration)\ - $(SolutionDir)out_$(Platform)\$(Configuration)\ - $(SolutionDir)temp_$(Platform)\$(Configuration)\$(ProjectName)\ - $(SolutionDir)temp_$(Platform)\$(Configuration)\$(ProjectName)\ - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - - - - Disabled - ..\zlib123;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - Level3 - EditAndContinue - - - true - MachineX86 - - - - - Disabled - ..\zlib123;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - Level3 - ProgramDatabase - - - true - - - - - MaxSpeed - true - ..\zlib123;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - true - Level3 - ProgramDatabase - - - true - true - true - MachineX86 - - - - - MaxSpeed - true - ..\zlib123;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - true - Level3 - ProgramDatabase - - - true - true - true - - - - - - - - {8e75b9c1-d45f-48bc-8c8e-28330e2e12e3} - false - - - - - - \ No newline at end of file diff --git a/ext/CrashServer/external/WTL/Include/atlapp.h b/ext/CrashServer/external/WTL/Include/atlapp.h index 7f5cd49ec..3d53756f0 100644 --- a/ext/CrashServer/external/WTL/Include/atlapp.h +++ b/ext/CrashServer/external/WTL/Include/atlapp.h @@ -1,5 +1,5 @@ -// Windows Template Library - WTL version 8.1 -// Copyright (C) Microsoft Corporation. All rights reserved. +// Windows Template Library - WTL version 9.0 +// Copyright (C) Microsoft Corporation, WTL Team. All rights reserved. // // This file is a part of the Windows Template Library. // The use and distribution terms for this software are covered by the @@ -15,7 +15,7 @@ #pragma once #ifndef __cplusplus - #error ATL requires C++ compilation (use a .cpp suffix) + #error WTL requires C++ compilation (use a .cpp suffix) #endif #ifndef __ATLBASE_H__ @@ -34,11 +34,15 @@ #ifdef _ATL_NO_COMMODULE #error WTL requires that _ATL_NO_COMMODULE is not defined -#endif // _ATL_NO_COMMODULE +#endif + +#if (_ATL_VER >= 0x0900) && defined(_ATL_MIN_CRT) + #error _ATL_MIN_CRT is not supported with ATL 9.0 and higher +#endif #if defined(_WIN32_WCE) && defined(_ATL_MIN_CRT) #pragma message("Warning: WTL for Windows CE doesn't use _ATL_MIN_CRT") -#endif // defined(_WIN32_WCE) && defined(_ATL_MIN_CRT) +#endif #include #if !defined(_ATL_MIN_CRT) && defined(_MT) && !defined(_WIN32_WCE) @@ -51,8 +55,12 @@ #include #ifndef _WIN32_WCE -#pragma comment(lib, "comctl32.lib") -#endif // !_WIN32_WCE + #pragma comment(lib, "comctl32.lib") +#endif + +#if defined(_SYSINFOAPI_H_) && defined(NOT_BUILD_WINDOWS_DEPRECATE) && (_WIN32_WINNT >= 0x0501) + #include +#endif #ifndef _WIN32_WCE #include "atlres.h" @@ -63,11 +71,15 @@ // We need to disable this warning because of template class arguments #pragma warning(disable: 4127) +#if (_ATL_VER >= 0x0900) && !defined(_SECURE_ATL) + #define _SECURE_ATL 1 +#endif + /////////////////////////////////////////////////////////////////////////////// // WTL version number -#define _WTL_VER 0x0810 +#define _WTL_VER 0x0900 /////////////////////////////////////////////////////////////////////////////// @@ -80,8 +92,11 @@ // CAppModule // CServerAppModule // +// CRegKeyEx +// // Global functions: // AtlGetDefaultGuiFont() +// AtlCreateControlFont() // AtlCreateBoldFont() // AtlInitCommonControls() @@ -205,7 +220,7 @@ inline int WINAPI lstrlenA(LPCSTR lpszString) { if(lpstrDest == NULL || lpstrSrc == NULL || nLength <= 0) return NULL; - int nLen = min(lstrlen(lpstrSrc), nLength - 1); + int nLen = __min(lstrlen(lpstrSrc), nLength - 1); LPTSTR lpstrRet = (LPTSTR)memcpy(lpstrDest, lpstrSrc, nLen * sizeof(TCHAR)); lpstrDest[nLen] = 0; return lpstrRet; @@ -224,7 +239,7 @@ inline int WINAPI lstrlenA(LPCSTR lpszString) { if(lpstrDest == NULL || lpstrSrc == NULL || nLength <= 0) return NULL; - int nLen = min(lstrlenA(lpstrSrc), nLength - 1); + int nLen = __min(lstrlenA(lpstrSrc), nLength - 1); LPSTR lpstrRet = (LPSTR)memcpy(lpstrDest, lpstrSrc, nLen * sizeof(char)); lpstrDest[nLen] = 0; return lpstrRet; @@ -289,6 +304,20 @@ static CWndClassInfo& GetWndClassInfo() \ /////////////////////////////////////////////////////////////////////////////// // Global support for using original VC++ 6.0 headers with WTL +#if (_MSC_VER < 1300) && !defined(_WIN32_WCE) + #ifndef REG_QWORD + #define REG_QWORD 11 + #endif + + #ifndef BS_PUSHBOX + #define BS_PUSHBOX 0x0000000AL + #endif + + struct __declspec(uuid("000214e6-0000-0000-c000-000000000046")) IShellFolder; + struct __declspec(uuid("000214f9-0000-0000-c000-000000000046")) IShellLinkW; + struct __declspec(uuid("000214ee-0000-0000-c000-000000000046")) IShellLinkA; +#endif // (_MSC_VER < 1300) && !defined(_WIN32_WCE) + #ifndef _ATL_NO_OLD_HEADERS_WIN64 #if !defined(_WIN64) && (_ATL_VER < 0x0700) @@ -399,6 +428,60 @@ static CWndClassInfo& GetWndClassInfo() \ /////////////////////////////////////////////////////////////////////////////// +// Global support for using original VC++ 7.x headers with WTL + +#if (_MSC_VER >= 1300) && (_MSC_VER < 1400) + + #ifndef BS_PUSHBOX + #define BS_PUSHBOX 0x0000000AL + #endif + + #pragma warning(disable: 4244) // conversion from 'type1' to 'type2', possible loss of data + +#endif // (_MSC_VER >= 1300) && (_MSC_VER < 1400) + + +/////////////////////////////////////////////////////////////////////////////// +// Global support for old SDK headers + +#ifndef BTNS_BUTTON + #define BTNS_BUTTON TBSTYLE_BUTTON +#endif + +#ifndef BTNS_SEP + #define BTNS_SEP TBSTYLE_SEP +#endif + +#ifndef BTNS_CHECK + #define BTNS_CHECK TBSTYLE_CHECK +#endif + +#ifndef BTNS_GROUP + #define BTNS_GROUP TBSTYLE_GROUP +#endif + +#ifndef BTNS_CHECKGROUP + #define BTNS_CHECKGROUP TBSTYLE_CHECKGROUP +#endif + +#if (_WIN32_IE >= 0x0300) + #ifndef BTNS_DROPDOWN + #define BTNS_DROPDOWN TBSTYLE_DROPDOWN + #endif +#endif + +#if (_WIN32_IE >= 0x0400) + #ifndef BTNS_AUTOSIZE + #define BTNS_AUTOSIZE TBSTYLE_AUTOSIZE + #endif + + #ifndef BTNS_NOPREFIX + #define BTNS_NOPREFIX TBSTYLE_NOPREFIX + #endif +#endif + + +/////////////////////////////////////////////////////////////////////////////// // Global support for SecureHelper functions #ifndef _TRUNCATE @@ -460,11 +543,15 @@ static CWndClassInfo& GetWndClassInfo() \ #endif // ATLVERIFY #endif // (_ATL_VER < 0x0700) -// Forward declaration for ATL3 fix -#if ((_ATL_VER < 0x0700) && defined(_ATL_DLL) && !defined(_WIN32_WCE)) || _ATL_VER > 0x0A00 +// Forward declaration for ATL3 and ATL11 fix +#if (((_ATL_VER < 0x0700) && defined(_ATL_DLL)) || (_ATL_VER >= 0x0B00)) && !defined(_WIN32_WCE) namespace ATL { HRESULT AtlGetCommCtrlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor); }; #endif +#ifndef WM_MOUSEHWHEEL + #define WM_MOUSEHWHEEL 0x020E +#endif + namespace WTL { @@ -484,13 +571,16 @@ namespace WTL // Windows version helper inline bool AtlIsOldWindows() { - OSVERSIONINFO ovi = { 0 }; - ovi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); +#ifdef _versionhelpers_H_INCLUDED_ + return !::IsWindowsVersionOrGreater(4, 90, 0); +#else // !_versionhelpers_H_INCLUDED_ +OSVERSIONINFO ovi = { sizeof(OSVERSIONINFO) }; BOOL bRet = ::GetVersionEx(&ovi); return (!bRet || !((ovi.dwMajorVersion >= 5) || (ovi.dwMajorVersion == 4 && ovi.dwMinorVersion >= 90))); +#endif // _versionhelpers_H_INCLUDED_ } -// default GUI font helper +// Default GUI font helper - "MS Shell Dlg" stock font inline HFONT AtlGetDefaultGuiFont() { #ifndef _WIN32_WCE @@ -500,24 +590,39 @@ inline HFONT AtlGetDefaultGuiFont() #endif // _WIN32_WCE } -// bold font helper (NOTE: Caller owns the font, and should destroy it when done using it) -inline HFONT AtlCreateBoldFont(HFONT hFont = NULL) +// Control font helper - default font for controls not in a dialog +// (NOTE: Caller owns the font, and should destroy it when it's no longer needed) +inline HFONT AtlCreateControlFont() { - if(hFont == NULL) - hFont = AtlGetDefaultGuiFont(); +#ifndef _WIN32_WCE + LOGFONT lf = { 0 }; + ATLVERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0) != FALSE); + HFONT hFont = ::CreateFontIndirect(&lf); ATLASSERT(hFont != NULL); - HFONT hFontBold = NULL; + return hFont; +#else // CE specific + return (HFONT)::GetStockObject(SYSTEM_FONT); +#endif // _WIN32_WCE +} + +// Bold font helper +// (NOTE: Caller owns the font, and should destroy it when it's no longer needed) +inline HFONT AtlCreateBoldFont(HFONT hFont = NULL) +{ LOGFONT lf = { 0 }; - if(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT)) - { - lf.lfWeight = FW_BOLD; - hFontBold = ::CreateFontIndirect(&lf); - ATLASSERT(hFontBold != NULL); - } +#ifndef _WIN32_WCE + if(hFont == NULL) + ATLVERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0) != FALSE); else - { - ATLASSERT(FALSE); - } + ATLVERIFY(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT)); +#else // CE specific + if(hFont == NULL) + hFont = (HFONT)::GetStockObject(SYSTEM_FONT); + ATLVERIFY(::GetObject(hFont, sizeof(LOGFONT), &lf) == sizeof(LOGFONT)); +#endif // _WIN32_WCE + lf.lfWeight = FW_BOLD; + HFONT hFontBold = ::CreateFontIndirect(&lf); + ATLASSERT(hFontBold != NULL); return hFontBold; } @@ -565,6 +670,10 @@ inline BOOL AtlInitCommonControls(DWORD dwFlags) #define NONCLIENTMETRICS_V1_SIZE _SIZEOF_STRUCT(NONCLIENTMETRICS, lfMessageFont) #endif // !defined(_WIN32_WCE) && (WINVER >= 0x0600) && !defined(NONCLIENTMETRICS_V1_SIZE) +#if !defined(_WIN32_WCE) && (_WIN32_WINNT >= 0x0501) && !defined(TTTOOLINFO_V2_SIZE) + #define TTTOOLINFO_V2_SIZE _SIZEOF_STRUCT(TTTOOLINFO, lParam) +#endif // !defined(_WIN32_WCE) && (_WIN32_WINNT >= 0x0501) && !defined(TTTOOLINFO_V2_SIZE) + #endif // !_WTL_NO_RUNTIME_STRUCT_SIZE namespace RunTimeHelper @@ -579,10 +688,82 @@ namespace RunTimeHelper inline bool IsVista() { +#ifdef _versionhelpers_H_INCLUDED_ + return ::IsWindowsVistaOrGreater(); +#else // !_versionhelpers_H_INCLUDED_ OSVERSIONINFO ovi = { sizeof(OSVERSIONINFO) }; BOOL bRet = ::GetVersionEx(&ovi); return ((bRet != FALSE) && (ovi.dwMajorVersion >= 6)); +#endif // _versionhelpers_H_INCLUDED_ + } + + inline bool IsThemeAvailable() + { + bool bRet = false; + + if(IsCommCtrl6()) + { + HMODULE hThemeDLL = ::LoadLibrary(_T("uxtheme.dll")); + if(hThemeDLL != NULL) + { + typedef BOOL (STDAPICALLTYPE *PFN_IsThemeActive)(); + PFN_IsThemeActive pfnIsThemeActive = (PFN_IsThemeActive)::GetProcAddress(hThemeDLL, "IsThemeActive"); + ATLASSERT(pfnIsThemeActive != NULL); + bRet = (pfnIsThemeActive != NULL) && (pfnIsThemeActive() != FALSE); + if(bRet) + { + typedef BOOL (STDAPICALLTYPE *PFN_IsAppThemed)(); + PFN_IsAppThemed pfnIsAppThemed = (PFN_IsAppThemed)::GetProcAddress(hThemeDLL, "IsAppThemed"); + ATLASSERT(pfnIsAppThemed != NULL); + bRet = (pfnIsAppThemed != NULL) && (pfnIsAppThemed() != FALSE); + } + + ::FreeLibrary(hThemeDLL); + } + } + + return bRet; + } + + inline bool IsWin7() + { +#ifdef _versionhelpers_H_INCLUDED_ + return ::IsWindows7OrGreater(); +#else // !_versionhelpers_H_INCLUDED_ + OSVERSIONINFO ovi = { sizeof(OSVERSIONINFO) }; + BOOL bRet = ::GetVersionEx(&ovi); + return ((bRet != FALSE) && (ovi.dwMajorVersion == 6) && (ovi.dwMinorVersion >= 1)); +#endif // _versionhelpers_H_INCLUDED_ + } + + inline bool IsRibbonUIAvailable() + { + static INT iRibbonUI = -1; + +#if defined(NTDDI_WIN7) && (NTDDI_VERSION >= NTDDI_WIN7) + if (iRibbonUI == -1) + { + HMODULE hRibbonDLL = ::LoadLibrary(_T("propsys.dll")); + if (hRibbonDLL != NULL) + { + const GUID CLSID_UIRibbonFramework = { 0x926749fa, 0x2615, 0x4987, { 0x88, 0x45, 0xc3, 0x3e, 0x65, 0xf2, 0xb9, 0x57 } }; + // block - create instance + { + ATL::CComPtr pIUIFramework; + iRibbonUI = SUCCEEDED(pIUIFramework.CoCreateInstance(CLSID_UIRibbonFramework)) ? 1 : 0; + } + ::FreeLibrary(hRibbonDLL); + } + else + { + iRibbonUI = 0; + } + } +#endif // defined(NTDDI_WIN7) && (NTDDI_VERSION >= NTDDI_WIN7) + + return (iRibbonUI == 1); } + #endif // !_WIN32_WCE inline int SizeOf_REBARBANDINFO() @@ -637,6 +818,16 @@ namespace RunTimeHelper #endif // !defined(_WTL_NO_RUNTIME_STRUCT_SIZE) && (WINVER >= 0x0600) return nSize; } + + inline int SizeOf_TOOLINFO() + { + int nSize = sizeof(TOOLINFO); +#if !defined(_WTL_NO_RUNTIME_STRUCT_SIZE) && (_WIN32_WINNT >= 0x0501) + if(!IsVista()) + nSize = TTTOOLINFO_V2_SIZE; +#endif // !defined(_WTL_NO_RUNTIME_STRUCT_SIZE) && (_WIN32_WINNT >= 0x0501) + return nSize; + } #endif // !_WIN32_WCE }; @@ -734,7 +925,7 @@ namespace SecureHelper } else if(cchCount == _TRUNCATE) { - cchCount = min(cchDest - 1, size_t(lstrlenA(lpstrSrc))); + cchCount = __min(cchDest - 1, size_t(lstrlenA(lpstrSrc))); nRet = STRUNCATE; } else if(cchDest <= cchCount) @@ -761,7 +952,7 @@ namespace SecureHelper } else if(cchCount == _TRUNCATE) { - cchCount = min(cchDest - 1, size_t(lstrlenW(lpstrSrc))); + cchCount = __min(cchDest - 1, size_t(lstrlenW(lpstrSrc))); nRet = STRUNCATE; } else if(cchDest <= cchCount) @@ -848,9 +1039,10 @@ namespace SecureHelper return _vstprintf_s(lpstrBuff, cchBuff, lpstrFormat, args); #else cchBuff; // Avoid unused argument warning -#pragma warning(disable: 4996) + #pragma warning(push) + #pragma warning(disable: 4996) return _vstprintf(lpstrBuff, lpstrFormat, args); -#pragma warning(default: 4996) + #pragma warning(pop) #endif } @@ -885,6 +1077,124 @@ namespace SecureHelper /////////////////////////////////////////////////////////////////////////////// +// MinCrtHelper - helper functions for using _ATL_MIN_CRT + +namespace MinCrtHelper +{ + inline int _isspace(TCHAR ch) + { +#ifndef _ATL_MIN_CRT + return _istspace(ch); +#else // _ATL_MIN_CRT + WORD type = 0; + ::GetStringTypeEx(::GetThreadLocale(), CT_CTYPE1, &ch, 1, &type); + return (type & C1_SPACE) == C1_SPACE; +#endif // _ATL_MIN_CRT + } + + inline int _isdigit(TCHAR ch) + { +#ifndef _ATL_MIN_CRT + return _istdigit(ch); +#else // _ATL_MIN_CRT + WORD type = 0; + ::GetStringTypeEx(::GetThreadLocale(), CT_CTYPE1, &ch, 1, &type); + return (type & C1_DIGIT) == C1_DIGIT; +#endif // _ATL_MIN_CRT + } + + inline int _atoi(LPCTSTR str) + { +#ifndef _ATL_MIN_CRT + return _ttoi(str); +#else // _ATL_MIN_CRT + while(_isspace(*str) != 0) + ++str; + + TCHAR ch = *str++; + TCHAR sign = ch; // save sign indication + if(ch == _T('-') || ch == _T('+')) + ch = *str++; // skip sign + + int total = 0; + while(_isdigit(ch) != 0) + { + total = 10 * total + (ch - '0'); // accumulate digit + ch = *str++; // get next char + } + + return (sign == '-') ? -total : total; // return result, negated if necessary +#endif // _ATL_MIN_CRT + } + + inline LPCTSTR _strrchr(LPCTSTR str, TCHAR ch) + { +#ifndef _ATL_MIN_CRT + return _tcsrchr(str, ch); +#else // _ATL_MIN_CRT + LPCTSTR lpsz = NULL; + while(*str != 0) + { + if(*str == ch) + lpsz = str; + str = ::CharNext(str); + } + return lpsz; +#endif // _ATL_MIN_CRT + } + + inline LPTSTR _strrchr(LPTSTR str, TCHAR ch) + { +#ifndef _ATL_MIN_CRT + return _tcsrchr(str, ch); +#else // _ATL_MIN_CRT + LPTSTR lpsz = NULL; + while(*str != 0) + { + if(*str == ch) + lpsz = str; + str = ::CharNext(str); + } + return lpsz; +#endif // _ATL_MIN_CRT + } +}; // namespace MinCrtHelper + + +/////////////////////////////////////////////////////////////////////////////// +// GenericWndClass - generic window class usable for subclassing + +// Use in dialog templates to specify a placeholder to be subclassed +// Specify as a custom control with class name WTL_GenericWindow +// Call Rregister() before creating dialog (for example, in WinMain) +namespace GenericWndClass +{ + inline LPCTSTR GetName() + { + return _T("WTL_GenericWindow"); + } + + inline ATOM Register() + { + WNDCLASSEX wc = { sizeof(WNDCLASSEX) }; + wc.lpfnWndProc = ::DefWindowProc; + wc.hInstance = ModuleHelper::GetModuleInstance(); + wc.hCursor = ::LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wc.lpszClassName = GetName(); + ATOM atom = ::RegisterClassEx(&wc); + ATLASSERT(atom != 0); + return atom; + } + + inline BOOL Unregister() // only needed for DLLs or tmp use + { + return ::UnregisterClass(GetName(), ModuleHelper::GetModuleInstance()); + } +}; // namespace GenericWndClass + + +/////////////////////////////////////////////////////////////////////////////// // CMessageFilter - Interface for message filter support class CMessageFilter @@ -1133,6 +1443,7 @@ using ATL::CTempBuffer; #endif #endif +#pragma warning(push) #pragma warning(disable: 4284) // warning for operator -> template @@ -1187,7 +1498,7 @@ private: BYTE m_abFixedBuffer[t_nFixedBytes]; }; -#pragma warning(default: 4284) +#pragma warning(pop) #endif // !(_ATL_VER >= 0x0700) @@ -1545,6 +1856,263 @@ public: /////////////////////////////////////////////////////////////////////////////// +// CRegKeyEx - adds type-specific methods to ATL3 CRegKey + +#if (_ATL_VER < 0x0700) + +class CRegKeyEx : public ATL::CRegKey +{ +public: +// Constructors and operators + CRegKeyEx(HKEY hKey = NULL) + { + m_hKey = hKey; + } + + CRegKeyEx(CRegKeyEx& key) + { + Attach(key.Detach()); + } + + CRegKeyEx& operator =(CRegKeyEx& key) + { + Close(); + Attach(key.Detach()); + return *this; + } + +// Methods + LONG SetValue(LPCTSTR pszValueName, DWORD dwType, const void* pValue, ULONG nBytes) + { + ATLASSERT(m_hKey != NULL); + return ::RegSetValueEx(m_hKey, pszValueName, NULL, dwType, static_cast(pValue), nBytes); + } + + LONG SetGUIDValue(LPCTSTR pszValueName, REFGUID guidValue) + { + ATLASSERT(m_hKey != NULL); + + OLECHAR szGUID[64] = { 0 }; + ::StringFromGUID2(guidValue, szGUID, 64); + + USES_CONVERSION; + LPCTSTR lpstr = OLE2CT(szGUID); +#ifndef _UNICODE + if(lpstr == NULL) + return E_OUTOFMEMORY; +#endif + return SetStringValue(pszValueName, lpstr); + } + + LONG SetBinaryValue(LPCTSTR pszValueName, const void* pValue, ULONG nBytes) + { + ATLASSERT(m_hKey != NULL); + return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_BINARY, reinterpret_cast(pValue), nBytes); + } + + LONG SetDWORDValue(LPCTSTR pszValueName, DWORD dwValue) + { + ATLASSERT(m_hKey != NULL); + return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_DWORD, reinterpret_cast(&dwValue), sizeof(DWORD)); + } + +#ifndef _WIN32_WCE + LONG SetQWORDValue(LPCTSTR pszValueName, ULONGLONG qwValue) + { + ATLASSERT(m_hKey != NULL); + return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_QWORD, reinterpret_cast(&qwValue), sizeof(ULONGLONG)); + } +#endif + + LONG SetStringValue(LPCTSTR pszValueName, LPCTSTR pszValue, DWORD dwType = REG_SZ) + { + ATLASSERT(m_hKey != NULL); + if(pszValue == NULL) + { + ATLASSERT(FALSE); + return ERROR_INVALID_DATA; + } + ATLASSERT((dwType == REG_SZ) || (dwType == REG_EXPAND_SZ)); + + return ::RegSetValueEx(m_hKey, pszValueName, NULL, dwType, reinterpret_cast(pszValue), (lstrlen(pszValue) + 1) * sizeof(TCHAR)); + } + + LONG SetMultiStringValue(LPCTSTR pszValueName, LPCTSTR pszValue) + { + ATLASSERT(m_hKey != NULL); + if(pszValue == NULL) + { + ATLASSERT(FALSE); + return ERROR_INVALID_DATA; + } + + ULONG nBytes = 0; + ULONG nLength = 0; + LPCTSTR pszTemp = pszValue; + do + { + nLength = lstrlen(pszTemp) + 1; + pszTemp += nLength; + nBytes += nLength * sizeof(TCHAR); + } while (nLength != 1); + + return ::RegSetValueEx(m_hKey, pszValueName, NULL, REG_MULTI_SZ, reinterpret_cast(pszValue), nBytes); + } + + LONG QueryValue(LPCTSTR pszValueName, DWORD* pdwType, void* pData, ULONG* pnBytes) + { + ATLASSERT(m_hKey != NULL); + return ::RegQueryValueEx(m_hKey, pszValueName, NULL, pdwType, static_cast(pData), pnBytes); + } + + LONG QueryGUIDValue(LPCTSTR pszValueName, GUID& guidValue) + { + ATLASSERT(m_hKey != NULL); + + guidValue = GUID_NULL; + + TCHAR szGUID[64] = { 0 }; + ULONG nCount = 64; + LONG lRes = QueryStringValue(pszValueName, szGUID, &nCount); + + if (lRes != ERROR_SUCCESS) + return lRes; + + if(szGUID[0] != _T('{')) + return ERROR_INVALID_DATA; + + USES_CONVERSION; + LPOLESTR lpstr = T2OLE(szGUID); +#ifndef _UNICODE + if(lpstr == NULL) + return E_OUTOFMEMORY; +#endif + + HRESULT hr = ::CLSIDFromString(lpstr, &guidValue); + if (FAILED(hr)) + return ERROR_INVALID_DATA; + + return ERROR_SUCCESS; + } + + LONG QueryBinaryValue(LPCTSTR pszValueName, void* pValue, ULONG* pnBytes) + { + ATLASSERT(pnBytes != NULL); + ATLASSERT(m_hKey != NULL); + + DWORD dwType = 0; + LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast(pValue), pnBytes); + if (lRes != ERROR_SUCCESS) + return lRes; + if (dwType != REG_BINARY) + return ERROR_INVALID_DATA; + + return ERROR_SUCCESS; + } + + LONG QueryDWORDValue(LPCTSTR pszValueName, DWORD& dwValue) + { + ATLASSERT(m_hKey != NULL); + + ULONG nBytes = sizeof(DWORD); + DWORD dwType = 0; + LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast(&dwValue), &nBytes); + if (lRes != ERROR_SUCCESS) + return lRes; + if (dwType != REG_DWORD) + return ERROR_INVALID_DATA; + + return ERROR_SUCCESS; + } + +#ifndef _WIN32_WCE + LONG QueryQWORDValue(LPCTSTR pszValueName, ULONGLONG& qwValue) + { + ATLASSERT(m_hKey != NULL); + + ULONG nBytes = sizeof(ULONGLONG); + DWORD dwType = 0; + LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast(&qwValue), &nBytes); + if (lRes != ERROR_SUCCESS) + return lRes; + if (dwType != REG_QWORD) + return ERROR_INVALID_DATA; + + return ERROR_SUCCESS; + } +#endif + + LONG QueryStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG* pnChars) + { + ATLASSERT(m_hKey != NULL); + ATLASSERT(pnChars != NULL); + + ULONG nBytes = (*pnChars) * sizeof(TCHAR); + DWORD dwType = 0; + *pnChars = 0; + LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast(pszValue), &nBytes); + + if (lRes != ERROR_SUCCESS) + { + return lRes; + } + + if(dwType != REG_SZ && dwType != REG_EXPAND_SZ) + { + return ERROR_INVALID_DATA; + } + + if (pszValue != NULL) + { + if(nBytes != 0) + { + if ((nBytes % sizeof(TCHAR) != 0) || (pszValue[nBytes / sizeof(TCHAR) -1] != 0)) + return ERROR_INVALID_DATA; + } + else + { + pszValue[0] = _T('\0'); + } + } + + *pnChars = nBytes / sizeof(TCHAR); + + return ERROR_SUCCESS; + } + + LONG QueryMultiStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG* pnChars) + { + ATLASSERT(m_hKey != NULL); + ATLASSERT(pnChars != NULL); + + if (pszValue != NULL && *pnChars < 2) + return ERROR_INSUFFICIENT_BUFFER; + + ULONG nBytes = (*pnChars) * sizeof(TCHAR); + DWORD dwType = 0; + *pnChars = 0; + LONG lRes = ::RegQueryValueEx(m_hKey, pszValueName, NULL, &dwType, reinterpret_cast(pszValue), &nBytes); + if (lRes != ERROR_SUCCESS) + return lRes; + if (dwType != REG_MULTI_SZ) + return ERROR_INVALID_DATA; + if (pszValue != NULL && (nBytes % sizeof(TCHAR) != 0 || nBytes / sizeof(TCHAR) < 1 || pszValue[nBytes / sizeof(TCHAR) - 1] != 0 || ((nBytes / sizeof(TCHAR)) > 1 && pszValue[nBytes / sizeof(TCHAR) - 2] != 0))) + return ERROR_INVALID_DATA; + + *pnChars = nBytes / sizeof(TCHAR); + + return ERROR_SUCCESS; + } +}; + +#else // !(_ATL_VER < 0x0700) + +typedef ATL::CRegKey CRegKeyEx; + +#endif // !(_ATL_VER < 0x0700) + + +/////////////////////////////////////////////////////////////////////////////// // CString forward reference (enables CString use in atluser.h and atlgdi.h) #if defined(_WTL_FORWARD_DECLARE_CSTRING) && !defined(_WTL_USE_CSTRING) @@ -1577,9 +2145,10 @@ public: /////////////////////////////////////////////////////////////////////////////// -// General DLL version helpers (excluded from atlbase.h if _ATL_DLL is defined) +// General DLL version helpers +// (ATL3: excluded from atlbase.h if _ATL_DLL is defined; ATL11: removed) -#if ((_ATL_VER < 0x0700) && defined(_ATL_DLL) && !defined(_WIN32_WCE)) || _ATL_VER > 0x0A00 +#if (((_ATL_VER < 0x0700) && defined(_ATL_DLL)) || (_ATL_VER >= 0x0B00)) && !defined(_WIN32_WCE) namespace ATL { @@ -1675,7 +2244,7 @@ inline HRESULT AtlGetShellVersion(LPDWORD pdwMajor, LPDWORD pdwMinor) }; // namespace ATL -#endif // ((_ATL_VER < 0x0700) && defined(_ATL_DLL) && !defined(_WIN32_WCE)) || _ATL_VER > 0x0A00 +#endif // (_ATL_VER < 0x0700) && defined(_ATL_DLL) && !defined(_WIN32_WCE) // These are always included diff --git a/ext/CrashServer/external/WTL/Include/atlctrls.h b/ext/CrashServer/external/WTL/Include/atlctrls.h index 86d6aeaaa..b8fe5df4b 100644 --- a/ext/CrashServer/external/WTL/Include/atlctrls.h +++ b/ext/CrashServer/external/WTL/Include/atlctrls.h @@ -1,5 +1,5 @@ -// Windows Template Library - WTL version 8.1 -// Copyright (C) Microsoft Corporation. All rights reserved. +// Windows Template Library - WTL version 9.0 +// Copyright (C) Microsoft Corporation, WTL Team. All rights reserved. // // This file is a part of the Windows Template Library. // The use and distribution terms for this software are covered by the @@ -14,10 +14,6 @@ #pragma once -#ifndef __cplusplus - #error ATL requires C++ compilation (use a .cpp suffix) -#endif - #ifndef __ATLAPP_H__ #error atlctrls.h requires atlapp.h to be included first #endif @@ -26,10 +22,6 @@ #error atlctrls.h requires atlwin.h to be included first #endif -#if (_WIN32_IE < 0x0300) - #error atlctrls.h requires IE Version 3.0 or higher -#endif - #ifndef _WIN32_WCE #include #include @@ -55,7 +47,7 @@ // CEditCommands // CScrollBarT - CScrollBar // -// CImageList +// CImageListT - CImageList, CImageListManaged // CListViewCtrlT - CListViewCtrl // CTreeViewCtrlT - CTreeViewCtrl // CTreeItemT - CTreeItem @@ -1254,10 +1246,18 @@ public: return (DWORD)::SendMessage(m_hWnd, EM_GETMARGINS, 0, 0L); } - void SetMargins(UINT nLeft, UINT nRight) + void GetMargins(UINT& nLeft, UINT& nRight) const { ATLASSERT(::IsWindow(m_hWnd)); - ::SendMessage(m_hWnd, EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, MAKELONG(nLeft, nRight)); + DWORD dwRet = (DWORD)::SendMessage(m_hWnd, EM_GETMARGINS, 0, 0L); + nLeft = LOWORD(dwRet); + nRight = HIWORD(dwRet); + } + + void SetMargins(UINT nLeft, UINT nRight, WORD wFlags = EC_LEFTMARGIN | EC_RIGHTMARGIN) + { + ATLASSERT(::IsWindow(m_hWnd)); + ::SendMessage(m_hWnd, EM_SETMARGINS, wFlags, MAKELONG(nLeft, nRight)); } UINT GetLimitText() const @@ -1813,9 +1813,7 @@ public: { int nMin = 0, nMax = 0; ::GetScrollRange(m_hWnd, SB_CTL, &nMin, &nMax); - SCROLLINFO info = { 0 }; - info.cbSize = sizeof(SCROLLINFO); - info.fMask = SIF_PAGE; + SCROLLINFO info = { sizeof(SCROLLINFO), SIF_PAGE }; if(::GetScrollInfo(m_hWnd, SB_CTL, &info)) nMax -= ((info.nPage - 1) > 0) ? (info.nPage - 1) : 0; @@ -1857,28 +1855,41 @@ typedef CScrollBarT CScrollBar; /////////////////////////////////////////////////////////////////////////////// // CImageList -class CImageList +// forward declarations +template class CImageListT; +typedef CImageListT CImageList; +typedef CImageListT CImageListManaged; + + +template +class CImageListT { public: +// Data members HIMAGELIST m_hImageList; -// Constructor - CImageList(HIMAGELIST hImageList = NULL) : m_hImageList(hImageList) +// Constructor/destructor/operators + CImageListT(HIMAGELIST hImageList = NULL) : m_hImageList(hImageList) { } -// Operators, etc. - CImageList& operator =(HIMAGELIST hImageList) + ~CImageListT() { - m_hImageList = hImageList; - return *this; + if(t_bManaged && (m_hImageList != NULL)) + Destroy(); } - operator HIMAGELIST() const { return m_hImageList; } + CImageListT& operator =(HIMAGELIST hImageList) + { + Attach(hImageList); + return *this; + } void Attach(HIMAGELIST hImageList) { ATLASSERT(m_hImageList == NULL); ATLASSERT(hImageList != NULL); + if(t_bManaged && (m_hImageList != NULL) && (m_hImageList != hImageList)) + ImageList_Destroy(m_hImageList); m_hImageList = hImageList; } @@ -1889,6 +1900,8 @@ public: return hImageList; } + operator HIMAGELIST() const { return m_hImageList; } + bool IsNull() const { return (m_hImageList == NULL); } // Attributes @@ -2225,7 +2238,7 @@ public: { ATLASSERT(::IsWindow(hWnd)); memset(this, 0, sizeof(TOOLINFO)); - cbSize = sizeof(TOOLINFO); + cbSize = RunTimeHelper::SizeOf_TOOLINFO(); uFlags = nFlags; if(nIDTool == 0) { @@ -2485,7 +2498,7 @@ public: ATLASSERT(lpToolInfo != NULL); TTHITTESTINFO hti = { 0 }; - hti.ti.cbSize = sizeof(TOOLINFO); + hti.ti.cbSize = RunTimeHelper::SizeOf_TOOLINFO(); hti.hwnd = hWnd; hti.pt.x = pt.x; hti.pt.y = pt.y; @@ -2536,6 +2549,15 @@ public: ::SendMessage(m_hWnd, TTM_TRACKACTIVATE, bActivate, (LPARAM)lpToolInfo); } + void TrackActivate(HWND hWnd, UINT nIDTool, BOOL bActivate) + { + ATLASSERT(::IsWindow(m_hWnd)); + ATLASSERT(hWnd != NULL); + + CToolInfo ti(0, hWnd, nIDTool); + ::SendMessage(m_hWnd, TTM_TRACKACTIVATE, bActivate, ti); + } + void TrackPosition(int xPos, int yPos) { ATLASSERT(::IsWindow(m_hWnd)); @@ -3675,12 +3697,21 @@ public: return (BOOL)::SendMessage(m_hWnd, LVM_DELETEALLITEMS, 0, 0L); } - int FindItem(LVFINDINFO* pFindInfo, int nStart) const + int FindItem(LVFINDINFO* pFindInfo, int nStart = -1) const { ATLASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, LVM_FINDITEM, nStart, (LPARAM)pFindInfo); } + int FindItem(LPCTSTR lpstrFind, bool bPartial = true, bool bWrap = false, int nStart = -1) const + { + ATLASSERT(::IsWindow(m_hWnd)); + LVFINDINFO lvfi = { 0 }; + lvfi.flags = LVFI_STRING | (bWrap ? LVFI_WRAP : 0) | (bPartial ? LVFI_PARTIAL : 0); + lvfi.psz = lpstrFind; + return (int)::SendMessage(m_hWnd, LVM_FINDITEM, nStart, (LPARAM)&lvfi); + } + int HitTest(LVHITTESTINFO* pHitTestInfo) const { ATLASSERT(::IsWindow(m_hWnd)); @@ -3780,7 +3811,7 @@ public: return InsertColumn(nItem, &lvc); } - int AddItem(int nItem, int nSubItem, LPCTSTR strItem, int nImageIndex = -1) + int AddItem(int nItem, int nSubItem, LPCTSTR strItem, int nImageIndex = -3) { ATLASSERT(::IsWindow(m_hWnd)); LVITEM lvItem = { 0 }; @@ -3788,7 +3819,7 @@ public: lvItem.iItem = nItem; lvItem.iSubItem = nSubItem; lvItem.pszText = (LPTSTR)strItem; - if(nImageIndex != -1) + if(nImageIndex != -3) { lvItem.mask |= LVIF_IMAGE; lvItem.iImage = nImageIndex; @@ -3922,15 +3953,19 @@ public: } #endif // (_WIN32_WINNT >= 0x0600) - // single-selection only + // Note: selects only one item BOOL SelectItem(int nIndex) { ATLASSERT(::IsWindow(m_hWnd)); - ATLASSERT((GetStyle() & LVS_SINGLESEL) != 0); + + // multi-selection only: de-select all items + if((GetStyle() & LVS_SINGLESEL) == 0) + SetItemState(-1, 0, LVIS_SELECTED); BOOL bRet = SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); if(bRet) bRet = EnsureVisible(nIndex, FALSE); + return bRet; } }; @@ -5780,6 +5815,17 @@ public: ATLASSERT(::IsWindow(m_hWnd)); return CImageList((HIMAGELIST)::SendMessage(m_hWnd, TB_SETPRESSEDIMAGELIST, nIndex, (LPARAM)hImageList)); } + + void GetItemDropDownRect(int nIndex, LPRECT lpRect) const + { +#ifndef TB_GETITEMDROPDOWNRECT + const int TB_GETITEMDROPDOWNRECT = WM_USER + 103; +#endif + ATLASSERT(::IsWindow(m_hWnd)); + BOOL bRet = (BOOL)::SendMessage(m_hWnd, TB_GETITEMDROPDOWNRECT, nIndex, (LPARAM)lpRect); + bRet; // avoid level 4 warning + ATLASSERT(bRet != FALSE); + } #endif // (_WIN32_WINNT >= 0x0600) // Operations @@ -5885,10 +5931,20 @@ public: return (BOOL)::SendMessage(m_hWnd, TB_DELETEBUTTON, nIndex, 0L); } - UINT CommandToIndex(UINT nID) const + BOOL InsertSeparator(int nIndex, int cxWidth = 8) + { + return InsertButton(nIndex, 0, BTNS_SEP, 0, cxWidth, (INT_PTR)0, 0); + } + + BOOL AddSeparator(int cxWidth = 8) + { + return AddButton(0, BTNS_SEP, 0, cxWidth, (INT_PTR)0, 0); + } + + int CommandToIndex(UINT nID) const { ATLASSERT(::IsWindow(m_hWnd)); - return (UINT)::SendMessage(m_hWnd, TB_COMMANDTOINDEX, nID, 0L); + return (int)::SendMessage(m_hWnd, TB_COMMANDTOINDEX, nID, 0L); } #ifndef _WIN32_WCE @@ -6338,17 +6394,24 @@ public: } #ifndef _WIN32_WCE - CToolTipCtrl GetTooltips() const + CToolTipCtrl GetToolTips() const { ATLASSERT(::IsWindow(m_hWnd)); return CToolTipCtrl((HWND)::SendMessage(m_hWnd, TCM_GETTOOLTIPS, 0, 0L)); } - void SetTooltips(HWND hWndToolTip) + // this method is deprecated, please use GetToolTips + CToolTipCtrl GetTooltips() const { return GetToolTips(); } + + void SetToolTips(HWND hWndToolTip) { ATLASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, TCM_SETTOOLTIPS, (WPARAM)hWndToolTip, 0L); } + + // this method is deprecated, please use SetToolTips + void SetTooltips(HWND hWndToolTip) { SetToolTips(hWndToolTip); } + #endif // !_WIN32_WCE int GetCurFocus() const @@ -6590,10 +6653,10 @@ public: return (int)::SendMessage(m_hWnd, TBM_GETSELSTART, 0, 0L); } - void SetSelStart(int nMin) + void SetSelStart(int nMin, BOOL bRedraw = FALSE) { ATLASSERT(::IsWindow(m_hWnd)); - ::SendMessage(m_hWnd, TBM_SETSELSTART, 0, (LPARAM)nMin); + ::SendMessage(m_hWnd, TBM_SETSELSTART, bRedraw, (LPARAM)nMin); } int GetSelEnd() const @@ -6602,10 +6665,10 @@ public: return (int)::SendMessage(m_hWnd, TBM_GETSELEND, 0, 0L); } - void SetSelEnd(int nMax) + void SetSelEnd(int nMax, BOOL bRedraw = FALSE) { ATLASSERT(::IsWindow(m_hWnd)); - ::SendMessage(m_hWnd, TBM_SETSELEND, 0, (LPARAM)nMax); + ::SendMessage(m_hWnd, TBM_SETSELEND, bRedraw, (LPARAM)nMax); } void GetSelection(int& nMin, int& nMax) const @@ -6614,10 +6677,10 @@ public: nMax = GetSelEnd(); } - void SetSelection(int nMin, int nMax) + void SetSelection(int nMin, int nMax, BOOL bRedraw = TRUE) { - SetSelStart(nMin); - SetSelEnd(nMax); + SetSelStart(nMin, FALSE); + SetSelEnd(nMax, bRedraw); } void GetChannelRect(LPRECT lprc) const @@ -7220,12 +7283,15 @@ typedef CAnimateCtrlT CAnimateCtrl; #ifndef _WIN32_WCE -#ifdef _UNICODE -#if (_RICHEDIT_VER == 0x0100) -#undef RICHEDIT_CLASS -#define RICHEDIT_CLASS L"RICHEDIT" -#endif // (_RICHEDIT_VER == 0x0100) -#endif // _UNICODE +#if defined(_UNICODE) && (_RICHEDIT_VER == 0x0100) + #undef RICHEDIT_CLASS + #define RICHEDIT_CLASS L"RICHEDIT" +#endif + +#if !defined(_UNICODE) && (_RICHEDIT_VER >= 0x0500) + #undef MSFTEDIT_CLASS + #define MSFTEDIT_CLASS "RICHEDIT50W" +#endif template class CRichEditCtrlT : public TBase @@ -7251,12 +7317,18 @@ public: // Attributes static LPCTSTR GetWndClassName() { +#if (_RICHEDIT_VER >= 0x0500) + return MSFTEDIT_CLASS; +#else return RICHEDIT_CLASS; +#endif } static LPCTSTR GetLibraryName() { -#if (_RICHEDIT_VER >= 0x0200) +#if (_RICHEDIT_VER >= 0x0500) + return _T("MSFTEDIT.DLL"); +#elif (_RICHEDIT_VER >= 0x0200) return _T("RICHED20.DLL"); #else return _T("RICHED32.DLL"); @@ -7561,23 +7633,25 @@ public: return (int)::SendMessage(m_hWnd, EM_GETFIRSTVISIBLELINE, 0, 0L); } - EDITWORDBREAKPROCEX GetWordBreakProcEx() const + int GetTextRange(TEXTRANGE* pTextRange) const { ATLASSERT(::IsWindow(m_hWnd)); - return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_GETWORDBREAKPROCEX, 0, 0L); + return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)pTextRange); } - EDITWORDBREAKPROCEX SetWordBreakProcEx(EDITWORDBREAKPROCEX pfnEditWordBreakProcEx) +#if (_RICHEDIT_VER < 0x0200) + EDITWORDBREAKPROCEX GetWordBreakProcEx() const { ATLASSERT(::IsWindow(m_hWnd)); - return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_SETWORDBREAKPROCEX, 0, (LPARAM)pfnEditWordBreakProcEx); + return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_GETWORDBREAKPROCEX, 0, 0L); } - int GetTextRange(TEXTRANGE* pTextRange) const + EDITWORDBREAKPROCEX SetWordBreakProcEx(EDITWORDBREAKPROCEX pfnEditWordBreakProcEx) { ATLASSERT(::IsWindow(m_hWnd)); - return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)pTextRange); + return (EDITWORDBREAKPROCEX)::SendMessage(m_hWnd, EM_SETWORDBREAKPROCEX, 0, (LPARAM)pfnEditWordBreakProcEx); } +#endif // (_RICHEDIT_VER < 0x0200) #if (_RICHEDIT_VER >= 0x0200) int GetTextRange(LONG nStartChar, LONG nEndChar, LPTSTR lpstrText) const @@ -7590,7 +7664,6 @@ public: return (int)::SendMessage(m_hWnd, EM_GETTEXTRANGE, 0, (LPARAM)&tr); } #else // !(_RICHEDIT_VER >= 0x0200) - int GetTextRange(LONG nStartChar, LONG nEndChar, LPSTR lpstrText) const { ATLASSERT(::IsWindow(m_hWnd)); @@ -7748,6 +7821,18 @@ public: gtle.flags = dwFlags; return (int)::SendMessage(m_hWnd, EM_GETTEXTLENGTHEX, (WPARAM)>le, 0L); } + + EDITWORDBREAKPROC GetWordBreakProc() const + { + ATLASSERT(::IsWindow(m_hWnd)); + return (EDITWORDBREAKPROC)::SendMessage(m_hWnd, EM_GETWORDBREAKPROC, 0, 0L); + } + + void SetWordBreakProc(EDITWORDBREAKPROC ewbprc) + { + ATLASSERT(::IsWindow(m_hWnd)); + ::SendMessage(m_hWnd, EM_SETWORDBREAKPROC, 0, (LPARAM)ewbprc); + } #endif // (_RICHEDIT_VER >= 0x0200) #if (_RICHEDIT_VER >= 0x0300) @@ -7820,6 +7905,12 @@ public: ATLASSERT(::IsWindow(m_hWnd)); return (BOOL)::SendMessage(m_hWnd, EM_SETZOOM, 0, 0L); } + + void SetMargins(UINT nLeft, UINT nRight, WORD wFlags = EC_LEFTMARGIN | EC_RIGHTMARGIN) + { + ATLASSERT(::IsWindow(m_hWnd)); + ::SendMessage(m_hWnd, EM_SETMARGINS, wFlags, MAKELONG(nLeft, nRight)); + } #endif // (_RICHEDIT_VER >= 0x0300) // Operations @@ -7868,10 +7959,10 @@ public: return (int)::SendMessage(m_hWnd, EM_LINELENGTH, nLine, 0L); } - BOOL LineScroll(int nLines, int nChars = 0) + BOOL LineScroll(int nLines) { ATLASSERT(::IsWindow(m_hWnd)); - return (BOOL)::SendMessage(m_hWnd, EM_LINESCROLL, nChars, nLines); + return (BOOL)::SendMessage(m_hWnd, EM_LINESCROLL, 0, nLines); } void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE) @@ -8065,6 +8156,116 @@ public: return (BOOL)::SendMessage(m_hWnd, EM_SETTABSTOPS, 1, (LPARAM)(LPINT)&cxEachStop); } #endif // (_RICHEDIT_VER >= 0x0300) + +#if (_RICHEDIT_VER >= 0x0800) + AutoCorrectProc GetAutoCorrectProc() const + { + ATLASSERT(::IsWindow(m_hWnd)); + return (AutoCorrectProc)::SendMessage(m_hWnd, EM_GETAUTOCORRECTPROC, 0, 0L); + } + + BOOL SetAutoCorrectProc(AutoCorrectProc pfn) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (BOOL)::SendMessage(m_hWnd, EM_SETAUTOCORRECTPROC, (WPARAM)pfn, 0L); + } + + BOOL CallAutoCorrectProc(WCHAR ch) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (BOOL)::SendMessage(m_hWnd, EM_CALLAUTOCORRECTPROC, (WPARAM)ch, 0L); + } + + DWORD GetEditStyleEx() const + { + ATLASSERT(::IsWindow(m_hWnd)); + return (DWORD)::SendMessage(m_hWnd, EM_GETEDITSTYLEEX, 0, 0L); + } + + DWORD SetEditStyleEx(DWORD dwStyleEx, DWORD dwMask) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (DWORD)::SendMessage(m_hWnd, EM_SETEDITSTYLEEX, dwStyleEx, dwMask); + } + + DWORD GetStoryType(int nStoryIndex) const + { + ATLASSERT(::IsWindow(m_hWnd)); + return (DWORD)::SendMessage(m_hWnd, EM_GETSTORYTYPE, nStoryIndex, 0L); + } + + DWORD SetStoryType(int nStoryIndex, DWORD dwStoryType) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (DWORD)::SendMessage(m_hWnd, EM_SETSTORYTYPE, nStoryIndex, dwStoryType); + } + + DWORD GetEllipsisMode() const + { + ATLASSERT(::IsWindow(m_hWnd)); + + DWORD dwMode = 0; + BOOL bRet = (BOOL)::SendMessage(m_hWnd, EM_GETELLIPSISMODE, 0, (LPARAM)&dwMode); + bRet; // avoid level 4 warning + ATLASSERT(bRet != FALSE); + + return dwMode; + } + + BOOL SetEllipsisMode(DWORD dwEllipsisMode) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (BOOL)::SendMessage(m_hWnd, EM_SETELLIPSISMODE, 0, dwEllipsisMode); + } + + BOOL GetEllipsisState() const + { + ATLASSERT(::IsWindow(m_hWnd)); + return (BOOL)::SendMessage(m_hWnd, EM_GETELLIPSISSTATE, 0, 0L); + } + + BOOL GetTouchOptions(int nTouchOptions) const + { + ATLASSERT(::IsWindow(m_hWnd)); + return (BOOL)::SendMessage(m_hWnd, EM_GETTOUCHOPTIONS, nTouchOptions, 0L); + } + + void SetTouchOptions(int nTouchOptions, BOOL bEnable) + { + ATLASSERT(::IsWindow(m_hWnd)); + ::SendMessage(m_hWnd, EM_SETTOUCHOPTIONS, nTouchOptions, bEnable); + } + + HRESULT InsertTable(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (HRESULT)::SendMessage(m_hWnd, EM_INSERTTABLE, (WPARAM)pRowParams, (LPARAM)pCellParams); + } + + HRESULT GetTableParams(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams) const + { + ATLASSERT(::IsWindow(m_hWnd)); + return (HRESULT)::SendMessage(m_hWnd, EM_GETTABLEPARMS, (WPARAM)pRowParams, (LPARAM)pCellParams); + } + + HRESULT SetTableParams(TABLEROWPARMS* pRowParams, TABLECELLPARMS* pCellParams) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (HRESULT)::SendMessage(m_hWnd, EM_SETTABLEPARMS, (WPARAM)pRowParams, (LPARAM)pCellParams); + } + + HRESULT InsertImage(RICHEDIT_IMAGE_PARAMETERS* pParams) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (HRESULT)::SendMessage(m_hWnd, EM_INSERTIMAGE, 0, (LPARAM)pParams); + } + + BOOL SetUiaName(LPCTSTR lpstrName) + { + ATLASSERT(::IsWindow(m_hWnd)); + return (BOOL)::SendMessage(m_hWnd, EM_SETUIANAME, 0, (LPARAM)lpstrName); + } +#endif // (_RICHEDIT_VER >= 0x0800) }; typedef CRichEditCtrlT CRichEditCtrl; @@ -8340,8 +8541,8 @@ public: REBARINFO rbi = { 0 }; rbi.cbSize = sizeof(REBARINFO); rbi.fMask = RBIM_IMAGELIST; - if( (BOOL)::SendMessage(m_hWnd, RB_GETBARINFO, 0, (LPARAM)&rbi) == FALSE ) return CImageList(); - return CImageList(rbi.himl); + BOOL bRet = (BOOL)::SendMessage(m_hWnd, RB_GETBARINFO, 0, (LPARAM)&rbi); + return CImageList((bRet != FALSE) ? rbi.himl : NULL); } BOOL SetImageList(HIMAGELIST hImageList) diff --git a/ext/CrashServer/external/WTL/Include/atlctrlx.h b/ext/CrashServer/external/WTL/Include/atlctrlx.h index 64982d1db..2cd0325f7 100644 --- a/ext/CrashServer/external/WTL/Include/atlctrlx.h +++ b/ext/CrashServer/external/WTL/Include/atlctrlx.h @@ -1,5 +1,5 @@ -// Windows Template Library - WTL version 8.1 -// Copyright (C) Microsoft Corporation. All rights reserved. +// Windows Template Library - WTL version 9.0 +// Copyright (C) Microsoft Corporation, WTL Team. All rights reserved. // // This file is a part of the Windows Template Library. // The use and distribution terms for this software are covered by the @@ -14,10 +14,6 @@ #pragma once -#ifndef __cplusplus - #error ATL requires C++ compilation (use a .cpp suffix) -#endif - #ifndef __ATLAPP_H__ #error atlctrlx.h requires atlapp.h to be included first #endif @@ -61,15 +57,20 @@ namespace WTL #ifndef _WIN32_WCE // bitmap button extended styles -#define BMPBTN_HOVER 0x00000001 +#define BMPBTN_HOVER 0x00000001 #define BMPBTN_AUTO3D_SINGLE 0x00000002 #define BMPBTN_AUTO3D_DOUBLE 0x00000004 -#define BMPBTN_AUTOSIZE 0x00000008 +#define BMPBTN_AUTOSIZE 0x00000008 #define BMPBTN_SHAREIMAGELISTS 0x00000010 -#define BMPBTN_AUTOFIRE 0x00000020 +#define BMPBTN_AUTOFIRE 0x00000020 +#define BMPBTN_CHECK 0x00000040 +#define BMPBTN_AUTOCHECK 0x00000080 + +// Note: BMPBTN_CHECK/BMPBTN_AUTOCHECK disables BN_DOUBLECLICKED, +// BMPBTN_AUTOFIRE doesn't work with BMPBTN_CHECK/BMPBTN_AUTOCHECK template -class ATL_NO_VTABLE CBitmapButtonImpl : public ATL::CWindowImpl< T, TBase, TWinTraits> +class ATL_NO_VTABLE CBitmapButtonImpl : public ATL::CWindowImpl< T, TBase, TWinTraits > { public: DECLARE_WND_SUPERCLASS(NULL, TBase::GetWndClassName()) @@ -103,18 +104,24 @@ public: unsigned m_fMouseOver:1; unsigned m_fFocus:1; unsigned m_fPressed:1; + unsigned m_fChecked:1; // Constructor/Destructor CBitmapButtonImpl(DWORD dwExtendedStyle = BMPBTN_AUTOSIZE, HIMAGELIST hImageList = NULL) : - m_ImageList(hImageList), m_dwExtendedStyle(dwExtendedStyle), - m_lpstrToolTipText(NULL), - m_fMouseOver(0), m_fFocus(0), m_fPressed(0) + m_dwExtendedStyle(dwExtendedStyle), m_ImageList(hImageList), + m_lpstrToolTipText(NULL), + m_fMouseOver(0), m_fFocus(0), m_fPressed(0), m_fChecked(0) { m_nImage[_nImageNormal] = -1; m_nImage[_nImagePushed] = -1; m_nImage[_nImageFocusOrHover] = -1; m_nImage[_nImageDisabled] = -1; + +#ifdef _DEBUG + if(((m_dwExtendedStyle & BMPBTN_AUTOFIRE) != 0) && IsCheckMode()) + ATLTRACE2(atlTraceUI, 0, _T("CBitmapButtonImpl - Check mode and BMPBTN_AUTOFIRE cannot be used together, BMPBTN_AUTOFIRE will be ignored.\n")); +#endif // _DEBUG } ~CBitmapButtonImpl() @@ -128,13 +135,17 @@ public: BOOL SubclassWindow(HWND hWnd) { #if (_MSC_VER >= 1300) - BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits>::SubclassWindow(hWnd); + BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits >::SubclassWindow(hWnd); #else // !(_MSC_VER >= 1300) - typedef ATL::CWindowImpl< T, TBase, TWinTraits> _baseClass; + typedef ATL::CWindowImpl< T, TBase, TWinTraits > _baseClass; BOOL bRet = _baseClass::SubclassWindow(hWnd); #endif // !(_MSC_VER >= 1300) - if(bRet) - Init(); + if(bRet != FALSE) + { + T* pT = static_cast(this); + pT->Init(); + } + return bRet; } @@ -151,6 +162,12 @@ public: m_dwExtendedStyle = dwExtendedStyle; else m_dwExtendedStyle = (m_dwExtendedStyle & ~dwMask) | (dwExtendedStyle & dwMask); + +#ifdef _DEBUG + if(((m_dwExtendedStyle & BMPBTN_AUTOFIRE) != 0) && IsCheckMode()) + ATLTRACE2(atlTraceUI, 0, _T("CBitmapButtonImpl - Check mode and BMPBTN_AUTOFIRE cannot be used together, BMPBTN_AUTOFIRE will be ignored.\n")); +#endif // _DEBUG + return dwPrevStyle; } @@ -165,6 +182,7 @@ public: m_ImageList = hImageList; if((m_dwExtendedStyle & BMPBTN_AUTOSIZE) != 0 && ::IsWindow(m_hWnd)) SizeToImage(); + return hImageListPrev; } @@ -214,6 +232,22 @@ public: return true; } + bool GetCheck() const + { + return (m_fChecked == 1); + } + + void SetCheck(bool bCheck, bool bUpdate = true) + { + m_fChecked = bCheck ? 1 : 0; + + if(bUpdate) + { + Invalidate(); + UpdateWindow(); + } + } + // Operations void SetImages(int nNormal, int nPushed = -1, int nFocusOrHover = -1, int nDisabled = -1) { @@ -244,35 +278,37 @@ public: ATLASSERT(m_nImage[0] != -1); // main bitmap must be set // set bitmap according to the current button state - int nImage = -1; bool bHover = IsHoverMode(); + bool bPressed = (m_fPressed == 1) || (IsCheckMode() && (m_fChecked == 1)); + int nImage = -1; if(!IsWindowEnabled()) nImage = m_nImage[_nImageDisabled]; - else if(m_fPressed == 1) + else if(bPressed) nImage = m_nImage[_nImagePushed]; - else if((!bHover && m_fFocus == 1) || (bHover && m_fMouseOver == 1)) + else if((!bHover && (m_fFocus == 1)) || (bHover && (m_fMouseOver == 1))) nImage = m_nImage[_nImageFocusOrHover]; - if(nImage == -1) // not there, use default one + + // if none is set, use default one + if(nImage == -1) nImage = m_nImage[_nImageNormal]; // draw the button image - int xyPos = 0; - if((m_fPressed == 1) && ((m_dwExtendedStyle & (BMPBTN_AUTO3D_SINGLE | BMPBTN_AUTO3D_DOUBLE)) != 0) && (m_nImage[_nImagePushed] == -1)) - xyPos = 1; + bool bAuto3D = (m_dwExtendedStyle & (BMPBTN_AUTO3D_SINGLE | BMPBTN_AUTO3D_DOUBLE)) != 0; + int xyPos = (bPressed && bAuto3D && (m_nImage[_nImagePushed] == -1)) ? 1 : 0; m_ImageList.Draw(dc, nImage, xyPos, xyPos, ILD_NORMAL); // draw 3D border if required - if((m_dwExtendedStyle & (BMPBTN_AUTO3D_SINGLE | BMPBTN_AUTO3D_DOUBLE)) != 0) + if(bAuto3D) { - RECT rect; + RECT rect = { 0 }; GetClientRect(&rect); - if(m_fPressed == 1) + if(bPressed) dc.DrawEdge(&rect, ((m_dwExtendedStyle & BMPBTN_AUTO3D_SINGLE) != 0) ? BDR_SUNKENOUTER : EDGE_SUNKEN, BF_RECT); - else if(!bHover || m_fMouseOver == 1) + else if(!bHover || (m_fMouseOver == 1)) dc.DrawEdge(&rect, ((m_dwExtendedStyle & BMPBTN_AUTO3D_SINGLE) != 0) ? BDR_RAISEDINNER : EDGE_RAISED, BF_RECT); - if(!bHover && m_fFocus == 1) + if(!bHover && (m_fFocus == 1)) { ::InflateRect(&rect, -2 * ::GetSystemMetrics(SM_CXEDGE), -2 * ::GetSystemMetrics(SM_CYEDGE)); dc.DrawFocusRect(&rect); @@ -305,7 +341,9 @@ public: LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { - Init(); + T* pT = static_cast(this); + pT->Init(); + bHandled = FALSE; return 1; } @@ -372,7 +410,7 @@ public: Invalidate(); UpdateWindow(); } - if((m_dwExtendedStyle & BMPBTN_AUTOFIRE) != 0) + if(((m_dwExtendedStyle & BMPBTN_AUTOFIRE) != 0) && !IsCheckMode()) { int nElapse = 250; int nDelay = 0; @@ -386,7 +424,7 @@ public: LRESULT OnLButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { LRESULT lRet = 0; - if(!IsHoverMode()) + if(!IsHoverMode() && !IsCheckMode()) lRet = DefWindowProc(uMsg, wParam, lParam); if(::GetCapture() != m_hWnd) SetCapture(); @@ -401,13 +439,15 @@ public: LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { + if(((m_dwExtendedStyle & BMPBTN_AUTOCHECK) != 0) && (m_fPressed == 1)) + SetCheck(!GetCheck(), false); + LRESULT lRet = 0; - bool bHover = IsHoverMode(); - if(!bHover) + if(!IsHoverMode() && !IsCheckMode()) lRet = DefWindowProc(uMsg, wParam, lParam); if(::GetCapture() == m_hWnd) { - if(bHover && m_fPressed == 1) + if((IsHoverMode() || IsCheckMode()) && (m_fPressed == 1)) ::SendMessage(GetParent(), WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(), BN_CLICKED), (LPARAM)m_hWnd); ::ReleaseCapture(); } @@ -493,6 +533,8 @@ public: if(wParam == VK_SPACE && m_fPressed == 1) { m_fPressed = 0; + if((m_dwExtendedStyle & BMPBTN_AUTOCHECK) != 0) + SetCheck(!GetCheck(), false); Invalidate(); UpdateWindow(); } @@ -568,8 +610,12 @@ public: { return ((m_dwExtendedStyle & BMPBTN_HOVER) != 0); } -}; + bool IsCheckMode() const + { + return ((m_dwExtendedStyle & (BMPBTN_CHECK | BMPBTN_AUTOCHECK)) != 0); + } +}; class CBitmapButton : public CBitmapButtonImpl { @@ -610,7 +656,7 @@ public: typedef CCheckListViewCtrlImplTraits CCheckListViewCtrlTraits; template -class ATL_NO_VTABLE CCheckListViewCtrlImpl : public ATL::CWindowImpl +class ATL_NO_VTABLE CCheckListViewCtrlImpl : public ATL::CWindowImpl { public: DECLARE_WND_SUPERCLASS(NULL, TBase::GetWndClassName()) @@ -625,18 +671,17 @@ public: BOOL SubclassWindow(HWND hWnd) { #if (_MSC_VER >= 1300) - BOOL bRet = ATL::CWindowImplBaseT< TBase, TWinTraits>::SubclassWindow(hWnd); + BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits >::SubclassWindow(hWnd); #else // !(_MSC_VER >= 1300) - typedef ATL::CWindowImplBaseT< TBase, TWinTraits> _baseClass; + typedef ATL::CWindowImpl< T, TBase, TWinTraits > _baseClass; BOOL bRet = _baseClass::SubclassWindow(hWnd); #endif // !(_MSC_VER >= 1300) - if(bRet) + if(bRet != FALSE) { T* pT = static_cast(this); - pT; - ATLASSERT((pT->GetExtendedLVStyle() & LVS_EX_CHECKBOXES) != 0); - SetExtendedListViewStyle(pT->GetExtendedLVStyle()); + pT->Init(); } + return bRet; } @@ -665,6 +710,15 @@ public: } // Implementation + void Init() + { + T* pT = static_cast(this); + pT; // avoid level 4 warning + ATLASSERT((pT->GetExtendedLVStyle() & LVS_EX_CHECKBOXES) != 0); + SetExtendedListViewStyle(pT->GetExtendedLVStyle()); + } + +// Message map and handlers BEGIN_MSG_MAP(CCheckListViewCtrlImpl) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) @@ -676,10 +730,12 @@ public: { // first let list view control initialize everything LRESULT lRet = DefWindowProc(uMsg, wParam, lParam); - T* pT = static_cast(this); - pT; - ATLASSERT((pT->GetExtendedLVStyle() & LVS_EX_CHECKBOXES) != 0); - SetExtendedListViewStyle(pT->GetExtendedLVStyle()); + if(lRet == 0) + { + T* pT = static_cast(this); + pT->Init(); + } + return lRet; } @@ -757,14 +813,16 @@ __declspec(selectany) struct }; #endif // (WINVER < 0x0500) && !defined(_WIN32_WCE) -#define HLINK_UNDERLINED 0x00000000 -#define HLINK_NOTUNDERLINED 0x00000001 -#define HLINK_UNDERLINEHOVER 0x00000002 -#define HLINK_COMMANDBUTTON 0x00000004 -#define HLINK_NOTIFYBUTTON 0x0000000C -#define HLINK_USETAGS 0x00000010 -#define HLINK_USETAGSBOLD 0x00000030 -#define HLINK_NOTOOLTIP 0x00000040 +#define HLINK_UNDERLINED 0x00000000 +#define HLINK_NOTUNDERLINED 0x00000001 +#define HLINK_UNDERLINEHOVER 0x00000002 +#define HLINK_COMMANDBUTTON 0x00000004 +#define HLINK_NOTIFYBUTTON 0x0000000C +#define HLINK_USETAGS 0x00000010 +#define HLINK_USETAGSBOLD 0x00000030 +#define HLINK_NOTOOLTIP 0x00000040 +#define HLINK_AUTOCREATELINKFONT 0x00000080 +#define HLINK_SINGLELINE 0x00000100 // Notes: // - HLINK_USETAGS and HLINK_USETAGSBOLD are always left-aligned @@ -778,7 +836,7 @@ public: LPTSTR m_lpstrHyperLink; HCURSOR m_hCursor; - HFONT m_hFont; + HFONT m_hFontLink; HFONT m_hFontNormal; RECT m_rcLink; @@ -795,16 +853,17 @@ public: bool m_bVisited:1; bool m_bHover:1; bool m_bInternalLinkFont:1; + bool m_bInternalNormalFont:1; // Constructor/Destructor CHyperLinkImpl(DWORD dwExtendedStyle = HLINK_UNDERLINED) : m_lpstrLabel(NULL), m_lpstrHyperLink(NULL), - m_hCursor(NULL), m_hFont(NULL), m_hFontNormal(NULL), + m_hCursor(NULL), m_hFontLink(NULL), m_hFontNormal(NULL), m_clrLink(RGB(0, 0, 255)), m_clrVisited(RGB(128, 0, 128)), m_dwExtendedStyle(dwExtendedStyle), m_bPaintLabel(true), m_bVisited(false), - m_bHover(false), m_bInternalLinkFont(false) + m_bHover(false), m_bInternalLinkFont(false), m_bInternalNormalFont(false) { ::SetRectEmpty(&m_rcLink); } @@ -813,8 +872,6 @@ public: { delete [] m_lpstrLabel; delete [] m_lpstrHyperLink; - if(m_bInternalLinkFont && m_hFont != NULL) - ::DeleteObject(m_hFont); #if (WINVER < 0x0500) && !defined(_WIN32_WCE) // It was created, not loaded, so we have to destroy it if(m_hCursor != NULL) @@ -910,17 +967,21 @@ public: HFONT GetLinkFont() const { - return m_hFont; + return m_hFontLink; } void SetLinkFont(HFONT hFont) { - if(m_bInternalLinkFont && m_hFont != NULL) + if(m_bInternalLinkFont) { - ::DeleteObject(m_hFont); + ::DeleteObject(m_hFontLink); m_bInternalLinkFont = false; } - m_hFont = hFont; + + m_hFontLink = hFont; + + T* pT = static_cast(this); + pT->CalcLabelRect(); } int GetIdealHeight() const @@ -931,17 +992,19 @@ public: if(!m_bPaintLabel) return -1; + UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK; + CClientDC dc(m_hWnd); RECT rect = { 0 }; GetClientRect(&rect); HFONT hFontOld = dc.SelectFont(m_hFontNormal); RECT rcText = rect; - dc.DrawText(_T("NS"), -1, &rcText, DT_LEFT | DT_WORDBREAK | DT_CALCRECT); - dc.SelectFont(m_hFont); + dc.DrawText(_T("NS"), -1, &rcText, DT_LEFT | uFormat | DT_CALCRECT); + dc.SelectFont(m_hFontLink); RECT rcLink = rect; - dc.DrawText(_T("NS"), -1, &rcLink, DT_LEFT | DT_WORDBREAK | DT_CALCRECT); + dc.DrawText(_T("NS"), -1, &rcLink, DT_LEFT | uFormat | DT_CALCRECT); dc.SelectFont(hFontOld); - return max(rcText.bottom - rcText.top, rcLink.bottom - rcLink.top); + return __max(rcText.bottom - rcText.top, rcLink.bottom - rcLink.top); } bool GetIdealSize(SIZE& size) const @@ -983,37 +1046,40 @@ public: pT->CalcLabelParts(lpstrLeft, cchLeft, lpstrLink, cchLink, lpstrRight, cchRight); // get label part rects + UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK; + HFONT hFontOld = dc.SelectFont(m_hFontNormal); RECT rcLeft = rcClient; - dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | DT_WORDBREAK | DT_CALCRECT); + dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | uFormat | DT_CALCRECT); - dc.SelectFont(m_hFont); + dc.SelectFont(m_hFontLink); RECT rcLink = { rcLeft.right, rcLeft.top, rcClient.right, rcClient.bottom }; - dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | DT_WORDBREAK | DT_CALCRECT); + dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | uFormat | DT_CALCRECT); dc.SelectFont(m_hFontNormal); RECT rcRight = { rcLink.right, rcLink.top, rcClient.right, rcClient.bottom }; - dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | DT_WORDBREAK | DT_CALCRECT); + dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | uFormat | DT_CALCRECT); dc.SelectFont(hFontOld); - int cyMax = max(rcLeft.bottom, max(rcLink.bottom, rcRight.bottom)); + int cyMax = __max(rcLeft.bottom, __max(rcLink.bottom, rcRight.bottom)); ::SetRect(&rcAll, rcLeft.left, rcLeft.top, rcRight.right, cyMax); } else { HFONT hOldFont = NULL; - if(m_hFont != NULL) - hOldFont = dc.SelectFont(m_hFont); + if(m_hFontLink != NULL) + hOldFont = dc.SelectFont(m_hFontLink); LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink; DWORD dwStyle = GetStyle(); - int nDrawStyle = DT_LEFT; + UINT uFormat = DT_LEFT; if (dwStyle & SS_CENTER) - nDrawStyle = DT_CENTER; + uFormat = DT_CENTER; else if (dwStyle & SS_RIGHT) - nDrawStyle = DT_RIGHT; - dc.DrawText(lpstrText, -1, &rcAll, nDrawStyle | DT_WORDBREAK | DT_CALCRECT); - if(m_hFont != NULL) + uFormat = DT_RIGHT; + uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK; + dc.DrawText(lpstrText, -1, &rcAll, uFormat | DT_CALCRECT); + if(m_hFontLink != NULL) dc.SelectFont(hOldFont); if (dwStyle & SS_CENTER) { @@ -1051,17 +1117,21 @@ public: { ATLASSERT(m_hWnd == NULL); ATLASSERT(::IsWindow(hWnd)); + if(m_hFontNormal == NULL) + m_hFontNormal = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0L); + #if (_MSC_VER >= 1300) - BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits>::SubclassWindow(hWnd); + BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits >::SubclassWindow(hWnd); #else // !(_MSC_VER >= 1300) - typedef ATL::CWindowImpl< T, TBase, TWinTraits> _baseClass; + typedef ATL::CWindowImpl< T, TBase, TWinTraits > _baseClass; BOOL bRet = _baseClass::SubclassWindow(hWnd); #endif // !(_MSC_VER >= 1300) - if(bRet) + if(bRet != FALSE) { T* pT = static_cast(this); pT->Init(); } + return bRet; } @@ -1100,6 +1170,28 @@ public: return bRet; } + void CreateLinkFontFromNormal() + { + if(m_bInternalLinkFont) + { + ::DeleteObject(m_hFontLink); + m_bInternalLinkFont = false; + } + + CFontHandle font = (m_hFontNormal != NULL) ? m_hFontNormal : (HFONT)::GetStockObject(SYSTEM_FONT); + LOGFONT lf = { 0 }; + font.GetLogFont(&lf); + + if(IsUsingTagsBold()) + lf.lfWeight = FW_BOLD; + else if(!IsNotUnderlined()) + lf.lfUnderline = TRUE; + + m_hFontLink = ::CreateFontIndirect(&lf); + m_bInternalLinkFont = true; + ATLASSERT(m_hFontLink != NULL); + } + // Message map and handlers BEGIN_MSG_MAP(CHyperLinkImpl) MESSAGE_HANDLER(WM_CREATE, OnCreate) @@ -1145,6 +1237,21 @@ public: m_tip.DestroyWindow(); m_tip.m_hWnd = NULL; } + + if(m_bInternalLinkFont) + { + ::DeleteObject(m_hFontLink); + m_hFontLink = NULL; + m_bInternalLinkFont = false; + } + + if(m_bInternalNormalFont) + { + ::DeleteObject(m_hFontNormal); + m_hFontNormal = NULL; + m_bInternalNormalFont = false; + } + bHandled = FALSE; return 1; } @@ -1313,12 +1420,28 @@ public: LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { + if(m_bInternalNormalFont) + { + ::DeleteObject(m_hFontNormal); + m_bInternalNormalFont = false; + } + + bool bCreateLinkFont = m_bInternalLinkFont; + m_hFontNormal = (HFONT)wParam; + + if(bCreateLinkFont || IsAutoCreateLinkFont()) + CreateLinkFontFromNormal(); + + T* pT = static_cast(this); + pT->CalcLabelRect(); + if((BOOL)lParam) { Invalidate(); UpdateWindow(); } + return 0; } @@ -1371,26 +1494,17 @@ public: #endif ATLASSERT(m_hCursor != NULL); - // set font + // set fonts if(m_bPaintLabel) { - ATL::CWindow wnd = GetParent(); - m_hFontNormal = wnd.GetFont(); if(m_hFontNormal == NULL) - m_hFontNormal = (HFONT)::GetStockObject(SYSTEM_FONT); - if(m_hFontNormal != NULL && m_hFont == NULL) { - LOGFONT lf = { 0 }; - CFontHandle font = m_hFontNormal; - font.GetLogFont(&lf); - if(IsUsingTagsBold()) - lf.lfWeight = FW_BOLD; - else if(!IsNotUnderlined()) - lf.lfUnderline = TRUE; - m_hFont = ::CreateFontIndirect(&lf); - m_bInternalLinkFont = true; - ATLASSERT(m_hFont != NULL); + m_hFontNormal = AtlCreateControlFont(); + m_bInternalNormalFont = true; } + + if(m_hFontLink == NULL) + CreateLinkFontFromNormal(); } #ifndef _WIN32_WCE @@ -1405,11 +1519,9 @@ public: int nLen = GetWindowTextLength(); if(nLen > 0) { - CTempBuffer buff; - LPTSTR lpstrText = buff.Allocate(nLen + 1); - ATLASSERT(lpstrText != NULL); - if((lpstrText != NULL) && (GetWindowText(lpstrText, nLen + 1) > 0)) - SetLabel(lpstrText); + ATLTRY(m_lpstrLabel = new TCHAR[nLen + 1]); + if(m_lpstrLabel != NULL) + ATLVERIFY(GetWindowText(m_lpstrLabel, nLen + 1) > 0); } } @@ -1433,20 +1545,15 @@ public: // set link colors if(m_bPaintLabel) { - ATL::CRegKey rk; + CRegKeyEx rk; LONG lRet = rk.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Internet Explorer\\Settings")); - if(lRet == 0) + if(lRet == ERROR_SUCCESS) { const int cchValue = 12; TCHAR szValue[cchValue] = { 0 }; -#if (_ATL_VER >= 0x0700) ULONG ulCount = cchValue; lRet = rk.QueryStringValue(_T("Anchor Color"), szValue, &ulCount); -#else - DWORD dwCount = cchValue * sizeof(TCHAR); - lRet = rk.QueryValue(szValue, _T("Anchor Color"), &dwCount); -#endif - if(lRet == 0) + if(lRet == ERROR_SUCCESS) { COLORREF clr = pT->_ParseColorString(szValue); ATLASSERT(clr != CLR_INVALID); @@ -1454,14 +1561,9 @@ public: m_clrLink = clr; } -#if (_ATL_VER >= 0x0700) ulCount = cchValue; lRet = rk.QueryStringValue(_T("Anchor Color Visited"), szValue, &ulCount); -#else - dwCount = cchValue * sizeof(TCHAR); - lRet = rk.QueryValue(szValue, _T("Anchor Color Visited"), &dwCount); -#endif - if(lRet == 0) + if(lRet == ERROR_SUCCESS) { COLORREF clr = pT->_ParseColorString(szValue); ATLASSERT(clr != CLR_INVALID); @@ -1483,7 +1585,7 @@ public: if(*p == _T(',')) { *p = _T('\0'); - c[i] = T::_xttoi(lpstr); + c[i] = MinCrtHelper::_atoi(lpstr); lpstr = &p[1]; break; } @@ -1493,7 +1595,7 @@ public: } if(*lpstr == _T('\0')) return CLR_INVALID; - c[2] = T::_xttoi(lpstr); + c[2] = MinCrtHelper::_atoi(lpstr); return RGB(c[0], c[1], c[2]); } @@ -1530,15 +1632,17 @@ public: // get label part rects HFONT hFontOld = dc.SelectFont(m_hFontNormal); + UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK; + RECT rcLeft = rcClient; if(lpstrLeft != NULL) - dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | DT_WORDBREAK | DT_CALCRECT); + dc.DrawText(lpstrLeft, cchLeft, &rcLeft, DT_LEFT | uFormat | DT_CALCRECT); - dc.SelectFont(m_hFont); + dc.SelectFont(m_hFontLink); RECT rcLink = rcClient; if(lpstrLeft != NULL) rcLink.left = rcLeft.right; - dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | DT_WORDBREAK | DT_CALCRECT); + dc.DrawText(lpstrLink, cchLink, &rcLink, DT_LEFT | uFormat | DT_CALCRECT); dc.SelectFont(hFontOld); @@ -1547,17 +1651,18 @@ public: else { HFONT hOldFont = NULL; - if(m_hFont != NULL) - hOldFont = dc.SelectFont(m_hFont); + if(m_hFontLink != NULL) + hOldFont = dc.SelectFont(m_hFontLink); LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink; DWORD dwStyle = GetStyle(); - int nDrawStyle = DT_LEFT; + UINT uFormat = DT_LEFT; if (dwStyle & SS_CENTER) - nDrawStyle = DT_CENTER; + uFormat = DT_CENTER; else if (dwStyle & SS_RIGHT) - nDrawStyle = DT_RIGHT; - dc.DrawText(lpstrText, -1, &m_rcLink, nDrawStyle | DT_WORDBREAK | DT_CALCRECT); - if(m_hFont != NULL) + uFormat = DT_RIGHT; + uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK; + dc.DrawText(lpstrText, -1, &m_rcLink, uFormat | DT_CALCRECT); + if(m_hFontLink != NULL) dc.SelectFont(hOldFont); if (dwStyle & SS_CENTER) { @@ -1654,23 +1759,25 @@ public: dc.SetBkMode(TRANSPARENT); HFONT hFontOld = dc.SelectFont(m_hFontNormal); + UINT uFormat = IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK; + if(lpstrLeft != NULL) - dc.DrawText(lpstrLeft, cchLeft, &rcClient, DT_LEFT | DT_WORDBREAK); + dc.DrawText(lpstrLeft, cchLeft, &rcClient, DT_LEFT | uFormat); COLORREF clrOld = dc.SetTextColor(IsWindowEnabled() ? (m_bVisited ? m_clrVisited : m_clrLink) : (::GetSysColor(COLOR_GRAYTEXT))); - if(m_hFont != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover))) - dc.SelectFont(m_hFont); + if(m_hFontLink != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover))) + dc.SelectFont(m_hFontLink); else dc.SelectFont(m_hFontNormal); - dc.DrawText(lpstrLink, cchLink, &m_rcLink, DT_LEFT | DT_WORDBREAK); + dc.DrawText(lpstrLink, cchLink, &m_rcLink, DT_LEFT | uFormat); dc.SetTextColor(clrOld); dc.SelectFont(m_hFontNormal); if(lpstrRight != NULL) { RECT rcRight = { m_rcLink.right, m_rcLink.top, rcClient.right, rcClient.bottom }; - dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | DT_WORDBREAK); + dc.DrawText(lpstrRight, cchRight, &rcRight, DT_LEFT | uFormat); } if(GetFocus() == m_hWnd) @@ -1684,21 +1791,22 @@ public: COLORREF clrOld = dc.SetTextColor(IsWindowEnabled() ? (m_bVisited ? m_clrVisited : m_clrLink) : (::GetSysColor(COLOR_GRAYTEXT))); HFONT hFontOld = NULL; - if(m_hFont != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover))) - hFontOld = dc.SelectFont(m_hFont); + if(m_hFontLink != NULL && (!IsUnderlineHover() || (IsUnderlineHover() && m_bHover))) + hFontOld = dc.SelectFont(m_hFontLink); else hFontOld = dc.SelectFont(m_hFontNormal); LPTSTR lpstrText = (m_lpstrLabel != NULL) ? m_lpstrLabel : m_lpstrHyperLink; DWORD dwStyle = GetStyle(); - int nDrawStyle = DT_LEFT; + UINT uFormat = DT_LEFT; if (dwStyle & SS_CENTER) - nDrawStyle = DT_CENTER; + uFormat = DT_CENTER; else if (dwStyle & SS_RIGHT) - nDrawStyle = DT_RIGHT; + uFormat = DT_RIGHT; + uFormat |= IsSingleLine() ? DT_SINGLELINE : DT_WORDBREAK; - dc.DrawText(lpstrText, -1, &m_rcLink, nDrawStyle | DT_WORDBREAK); + dc.DrawText(lpstrText, -1, &m_rcLink, uFormat); if(GetFocus() == m_hWnd) dc.DrawFocusRect(&m_rcLink); @@ -1760,33 +1868,17 @@ public: return ((m_dwExtendedStyle & HLINK_NOTOOLTIP) == 0); } - static int _xttoi(const TCHAR* nptr) + bool IsAutoCreateLinkFont() const { -#ifndef _ATL_MIN_CRT - return _ttoi(nptr); -#else // _ATL_MIN_CRT - while(*nptr == _T(' ')) // skip spaces - ++nptr; - - int c = (int)(_TUCHAR)*nptr++; - int sign = c; // save sign indication - if (c == _T('-') || c == _T('+')) - c = (int)(_TUCHAR)*nptr++; // skip sign - - int total = 0; - while((TCHAR)c >= _T('0') && (TCHAR)c <= _T('9')) - { - total = 10 * total + ((TCHAR)c - _T('0')); // accumulate digit - c = (int)(_TUCHAR)*nptr++; // get next char - } + return ((m_dwExtendedStyle & HLINK_AUTOCREATELINKFONT) == HLINK_AUTOCREATELINKFONT); + } - // return result, negated if necessary - return ((TCHAR)sign != _T('-')) ? total : -total; -#endif // _ATL_MIN_CRT + bool IsSingleLine() const + { + return ((m_dwExtendedStyle & HLINK_SINGLELINE) == HLINK_SINGLELINE); } }; - class CHyperLink : public CHyperLinkImpl { public: @@ -1908,8 +2000,7 @@ public: HWND Create(HWND hWndParent, UINT nTextID = ATL_IDS_IDLEMESSAGE, DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | SBARS_SIZEGRIP, UINT nID = ATL_IDW_STATUS_BAR) { const int cchMax = 128; // max text length is 127 for status bars (+1 for null) - TCHAR szText[cchMax]; - szText[0] = 0; + TCHAR szText[cchMax] = { 0 }; ::LoadString(ModuleHelper::GetResourceInstance(), nTextID, szText, cchMax); return Create(hWndParent, szText, dwStyle, nID); } @@ -2242,10 +2333,12 @@ public: int m_cxyHeader; TCHAR m_szTitle[m_cchTitle]; DWORD m_dwExtendedStyle; // Pane container specific extended styles + HFONT m_hFont; + bool m_bInternalFont; // Constructor - CPaneContainerImpl() : m_cxyHeader(0), m_dwExtendedStyle(0) + CPaneContainerImpl() : m_cxyHeader(0), m_dwExtendedStyle(0), m_hFont(NULL), m_bInternalFont(false) { m_szTitle[0] = 0; } @@ -2370,6 +2463,27 @@ public: #endif // !(_MSC_VER >= 1300) } + BOOL SubclassWindow(HWND hWnd) + { +#if (_MSC_VER >= 1300) + BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits >::SubclassWindow(hWnd); +#else // !(_MSC_VER >= 1300) + typedef ATL::CWindowImpl< T, TBase, TWinTraits > _baseClass; + BOOL bRet = _baseClass::SubclassWindow(hWnd); +#endif // !(_MSC_VER >= 1300) + if(bRet != FALSE) + { + T* pT = static_cast(this); + pT->Init(); + + RECT rect = { 0 }; + GetClientRect(&rect); + pT->UpdateLayout(rect.right, rect.bottom); + } + + return bRet; + } + BOOL EnableCloseButton(BOOL bEnable) { ATLASSERT(::IsWindow(m_hWnd)); @@ -2389,8 +2503,11 @@ public: // Message map and handlers BEGIN_MSG_MAP(CPaneContainerImpl) MESSAGE_HANDLER(WM_CREATE, OnCreate) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus) + MESSAGE_HANDLER(WM_GETFONT, OnGetFont) + MESSAGE_HANDLER(WM_SETFONT, OnSetFont) MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground) MESSAGE_HANDLER(WM_PAINT, OnPaint) #ifndef _WIN32_WCE @@ -2404,10 +2521,19 @@ public: LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { T* pT = static_cast(this); - pT->CalcSize(); + pT->Init(); - if((m_dwExtendedStyle & PANECNT_NOCLOSEBUTTON) == 0) - pT->CreateCloseButton(); + return 0; + } + + LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + if(m_bInternalFont) + { + ::DeleteObject(m_hFont); + m_hFont = NULL; + m_bInternalFont = false; + } return 0; } @@ -2426,6 +2552,30 @@ public: return 0; } + LRESULT OnGetFont(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + return (LRESULT)m_hFont; + } + + LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) + { + if(m_bInternalFont) + { + ::DeleteObject(m_hFont); + m_bInternalFont = false; + } + + m_hFont = (HFONT)wParam; + + T* pT = static_cast(this); + pT->CalcSize(); + + if((BOOL)lParam != FALSE) + pT->UpdateLayout(); + + return 0; + } + LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { return 1; // no background needed @@ -2504,7 +2654,7 @@ public: #if (_WIN32_IE >= 0x0400) RECT& rc = lpNMCustomDraw->rc; #else // !(_WIN32_IE >= 0x0400) - RECT rc; + RECT rc = { 0 }; m_tb.GetItemRect(0, &rc); #endif // !(_WIN32_IE >= 0x0400) @@ -2551,6 +2701,36 @@ public: } // Implementation - overrideable methods + void Init() + { + if(m_hFont == NULL) + { + // The same as AtlCreateControlFont() for horizontal pane +#ifndef _WIN32_WCE + LOGFONT lf = { 0 }; + ATLVERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0) != FALSE); + if(IsVertical()) + lf.lfEscapement = 900; // 90 degrees + m_hFont = ::CreateFontIndirect(&lf); +#else // CE specific + m_hFont = (HFONT)::GetStockObject(SYSTEM_FONT); + if(IsVertical()) + { + CLogFont lf(m_hFont); + lf.lfEscapement = 900; // 90 degrees + m_hFont = ::CreateFontIndirect(&lf); + } +#endif // _WIN32_WCE + m_bInternalFont = true; + } + + T* pT = static_cast(this); + pT->CalcSize(); + + if((m_dwExtendedStyle & PANECNT_NOCLOSEBUTTON) == 0) + pT->CreateCloseButton(); + } + void UpdateLayout(int cxWidth, int cyHeight) { ATLASSERT(::IsWindow(m_hWnd)); @@ -2599,7 +2779,7 @@ public: TBBUTTON tbbtn = { 0 }; tbbtn.idCommand = pT->m_nCloseBtnID; tbbtn.fsState = TBSTATE_ENABLED; - tbbtn.fsStyle = TBSTYLE_BUTTON; + tbbtn.fsStyle = BTNS_BUTTON; m_tb.AddButtons(1, &tbbtn); m_tb.SetBitmapSize(m_cxImageTB, m_cyImageTB); @@ -2622,6 +2802,8 @@ public: { T* pT = static_cast(this); CFontHandle font = pT->GetTitleFont(); + if(font.IsNull()) + font = (HFONT)::GetStockObject(SYSTEM_FONT); LOGFONT lf = { 0 }; font.GetLogFont(lf); if(IsVertical()) @@ -2632,13 +2814,13 @@ public: { int cyFont = abs(lf.lfHeight) + m_cxyBorder + 2 * m_cxyTextOffset; int cyBtn = m_cyImageTB + m_cxyBtnAddTB + m_cxyBorder + 2 * m_cxyBtnOffset; - m_cxyHeader = max(cyFont, cyBtn); + m_cxyHeader = __max(cyFont, cyBtn); } } HFONT GetTitleFont() const { - return AtlGetDefaultGuiFont(); + return m_hFont; } #ifndef _WIN32_WCE @@ -2673,23 +2855,42 @@ public: } dc.FillRect(&rect, COLOR_3DFACE); - if(!IsVertical()) // draw title only for horizontal pane container + // draw title text + dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT)); + dc.SetBkMode(TRANSPARENT); + T* pT = static_cast(this); + HFONT hFontOld = dc.SelectFont(pT->GetTitleFont()); +#if defined(_WIN32_WCE) && !defined(DT_END_ELLIPSIS) + const UINT DT_END_ELLIPSIS = 0; +#endif // defined(_WIN32_WCE) && !defined(DT_END_ELLIPSIS) + + if(IsVertical()) + { + rect.top += m_cxyTextOffset; + rect.bottom -= m_cxyTextOffset; + if(m_tb.m_hWnd != NULL) + rect.top += m_cxToolBar;; + + RECT rcCalc = { rect.left, rect.bottom, rect.right, rect.top }; + int cxFont = dc.DrawText(m_szTitle, -1, &rcCalc, DT_TOP | DT_SINGLELINE | DT_END_ELLIPSIS | DT_CALCRECT); + RECT rcText = { 0 }; + rcText.left = (rect.right - rect.left - cxFont) / 2; + rcText.right = rcText.left + (rect.bottom - rect.top); + rcText.top = rect.bottom; + rcText.bottom = rect.top; + dc.DrawText(m_szTitle, -1, &rcText, DT_TOP | DT_SINGLELINE | DT_END_ELLIPSIS); + } + else { - dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT)); - dc.SetBkMode(TRANSPARENT); - T* pT = static_cast(this); - HFONT hFontOld = dc.SelectFont(pT->GetTitleFont()); rect.left += m_cxyTextOffset; rect.right -= m_cxyTextOffset; if(m_tb.m_hWnd != NULL) rect.right -= m_cxToolBar;; -#ifndef _WIN32_WCE + dc.DrawText(m_szTitle, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS); -#else // CE specific - dc.DrawText(m_szTitle, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER); -#endif // _WIN32_WCE - dc.SelectFont(hFontOld); } + + dc.SelectFont(hFontOld); } // called only if pane is empty @@ -2977,7 +3178,7 @@ public: LVCompareParam* pParam = NULL; ATLTRY(pParam = new LVCompareParam[nCount]); PFNLVCOMPARE pFunc = NULL; - TCHAR pszTemp[pT->m_cchCmpTextMax]; + TCHAR pszTemp[pT->m_cchCmpTextMax] = { 0 }; bool bStrValue = false; switch(wType) @@ -3144,7 +3345,7 @@ public: dcMem.CreateCompatibleDC(dc.m_hDC); m_bmSort[i].CreateCompatibleBitmap(dc.m_hDC, m_cxSortImage, m_cySortImage); HBITMAP hbmOld = dcMem.SelectBitmap(m_bmSort[i]); - RECT rc = {0,0,m_cxSortImage, m_cySortImage}; + RECT rc = { 0, 0, m_cxSortImage, m_cySortImage }; pT->DrawSortBitmap(dcMem.m_hDC, i, &rc); dcMem.SelectBitmap(hbmOld); dcMem.DeleteDC(); @@ -3629,7 +3830,7 @@ typedef TBVCONTEXTMENUINFO* LPTBVCONTEXTMENUINFO; template -class ATL_NO_VTABLE CTabViewImpl : public ATL::CWindowImpl +class ATL_NO_VTABLE CTabViewImpl : public ATL::CWindowImpl< T, TBase, TWinTraits > { public: DECLARE_WND_CLASS_EX(NULL, 0, COLOR_APPWORKSPACE) @@ -3685,9 +3886,11 @@ public: bool m_bActiveAsDefaultMenuItem:1; bool m_bEmptyMenuItem:1; bool m_bWindowsMenuItem:1; + bool m_bNoTabDrag:1; // internal bool m_bTabCapture:1; bool m_bTabDrag:1; + bool m_bInternalFont:1; // Constructor/destructor CTabViewImpl() : @@ -3705,8 +3908,10 @@ public: m_bActiveAsDefaultMenuItem(false), m_bEmptyMenuItem(false), m_bWindowsMenuItem(false), + m_bNoTabDrag(false), m_bTabCapture(false), - m_bTabDrag(false) + m_bTabDrag(false), + m_bInternalFont(false) { m_ptStartDrag.x = 0; m_ptStartDrag.y = 0; @@ -4019,6 +4224,10 @@ public: return false; } + // adjust active page index, if inserted before it + if(nPage <= m_nActivePage) + m_nActivePage++; + SetActivePage(nItem); pT->OnPageActivated(m_nActivePage); @@ -4190,7 +4399,7 @@ public: { // Append menu items for all pages const int cchPrefix = 3; // 2 digits + space - nMenuItemsCount = min(min(nPageCount, nMenuItemsCount), (int)m_nMenuItemsMax); + nMenuItemsCount = __min(__min(nPageCount, nMenuItemsCount), (int)m_nMenuItemsMax); ATLASSERT(nMenuItemsCount < 100); // 2 digits only if(nMenuItemsCount >= 100) nMenuItemsCount = 99; @@ -4252,12 +4461,32 @@ public: menu.AppendMenu(MF_BYPOSITION | MF_STRING, ID_WINDOW_SHOWTABLIST, pT->GetWindowsMenuItemText()); } + BOOL SubclassWindow(HWND hWnd) + { +#if (_MSC_VER >= 1300) + BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits >::SubclassWindow(hWnd); +#else // !(_MSC_VER >= 1300) + typedef ATL::CWindowImpl< T, TBase, TWinTraits > _baseClass; + BOOL bRet = _baseClass::SubclassWindow(hWnd); +#endif // !(_MSC_VER >= 1300) + if(bRet != FALSE) + { + T* pT = static_cast(this); + pT->CreateTabControl(); + pT->UpdateLayout(); + } + + return bRet; + } + // Message map and handlers BEGIN_MSG_MAP(CTabViewImpl) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus) + MESSAGE_HANDLER(WM_GETFONT, OnGetFont) + MESSAGE_HANDLER(WM_SETFONT, OnSetFont) NOTIFY_HANDLER(m_nTabID, TCN_SELCHANGE, OnTabChanged) NOTIFY_ID_HANDLER(m_nTabID, OnTabNotification) #ifndef _WIN32_WCE @@ -4292,6 +4521,14 @@ public: il.Destroy(); } + if(m_bInternalFont) + { + HFONT hFont = m_tab.GetFont(); + m_tab.SetFont(NULL, FALSE); + ::DeleteObject(hFont); + m_bInternalFont = false; + } + return 0; } @@ -4309,6 +4546,32 @@ public: return 0; } + LRESULT OnGetFont(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + return m_tab.SendMessage(WM_GETFONT); + } + + LRESULT OnSetFont(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) + { + if(m_bInternalFont) + { + HFONT hFont = m_tab.GetFont(); + m_tab.SetFont(NULL, FALSE); + ::DeleteObject(hFont); + m_bInternalFont = false; + } + + m_tab.SendMessage(WM_SETFONT, wParam, lParam); + + T* pT = static_cast(this); + m_cyTabHeight = pT->CalcTabHeight(); + + if((BOOL)lParam != FALSE) + pT->UpdateLayout(); + + return 0; + } + LRESULT OnTabChanged(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) { SetActivePage(m_tab.GetCurSel()); @@ -4346,7 +4609,7 @@ public: // Tab control message handlers LRESULT OnTabLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled) { - if(m_tab.GetItemCount() > 1) + if(!m_bNoTabDrag && (m_tab.GetItemCount() > 1)) { m_bTabCapture = true; m_tab.SetCapture(); @@ -4563,7 +4826,8 @@ public: if(m_tab.m_hWnd == NULL) return false; - m_tab.SetFont(AtlGetDefaultGuiFont()); + m_tab.SetFont(AtlCreateControlFont()); + m_bInternalFont = true; m_tab.SetItemExtra(sizeof(TABVIEWPAGE)); @@ -4597,18 +4861,24 @@ public: void ShowTabControl(bool bShow) { m_tab.ShowWindow(bShow ? SW_SHOWNOACTIVATE : SW_HIDE); + T* pT = static_cast(this); + pT->UpdateLayout(); } void UpdateLayout() { - RECT rect; + RECT rect = { 0 }; GetClientRect(&rect); + int cyOffset = 0; if(m_tab.IsWindow() && ((m_tab.GetStyle() & WS_VISIBLE) != 0)) + { m_tab.SetWindowPos(NULL, 0, 0, rect.right - rect.left, m_cyTabHeight, SWP_NOZORDER); + cyOffset = m_cyTabHeight; + } if(m_nActivePage != -1) - ::SetWindowPos(GetPageHWND(m_nActivePage), NULL, 0, m_cyTabHeight, rect.right - rect.left, rect.bottom - rect.top - m_cyTabHeight, SWP_NOZORDER); + ::SetWindowPos(GetPageHWND(m_nActivePage), NULL, 0, cyOffset, rect.right - rect.left, rect.bottom - rect.top - cyOffset, SWP_NOZORDER); } void UpdateMenu() @@ -4815,7 +5085,6 @@ public: } }; - class CTabView : public CTabViewImpl { public: diff --git a/ext/CrashServer/external/WTL/Include/atlgdi.h b/ext/CrashServer/external/WTL/Include/atlgdi.h index 7ce868f35..2272753b1 100644 --- a/ext/CrashServer/external/WTL/Include/atlgdi.h +++ b/ext/CrashServer/external/WTL/Include/atlgdi.h @@ -1,5 +1,5 @@ -// Windows Template Library - WTL version 8.1 -// Copyright (C) Microsoft Corporation. All rights reserved. +// Windows Template Library - WTL version 9.0 +// Copyright (C) Microsoft Corporation, WTL Team. All rights reserved. // // This file is a part of the Windows Template Library. // The use and distribution terms for this software are covered by the @@ -14,10 +14,6 @@ #pragma once -#ifndef __cplusplus - #error ATL requires C++ compilation (use a .cpp suffix) -#endif - #ifndef __ATLAPP_H__ #error atlgdi.h requires atlapp.h to be included first #endif @@ -37,10 +33,10 @@ // required libraries #if !defined(_ATL_NO_MSIMG) && !defined(_WIN32_WCE) #pragma comment(lib, "msimg32.lib") -#endif // !defined(_ATL_NO_MSIMG) && !defined(_WIN32_WCE) +#endif #if !defined(_ATL_NO_OPENGL) && !defined(_WIN32_WCE) #pragma comment(lib, "opengl32.lib") -#endif // !defined(_ATL_NO_OPENGL) && !defined(_WIN32_WCE) +#endif /////////////////////////////////////////////////////////////////////////////// @@ -209,16 +205,17 @@ public: } #ifndef _WIN32_WCE - int GetExtLogPen(EXTLOGPEN* pLogPen) const + int GetExtLogPen(EXTLOGPEN* pLogPen, int nSize = sizeof(EXTLOGPEN)) const { ATLASSERT(m_hPen != NULL); - return ::GetObject(m_hPen, sizeof(EXTLOGPEN), pLogPen); + return ::GetObject(m_hPen, nSize, pLogPen); } - bool GetExtLogPen(EXTLOGPEN& ExtLogPen) const + bool GetExtLogPen(EXTLOGPEN& ExtLogPen, int nSize = sizeof(EXTLOGPEN)) const { ATLASSERT(m_hPen != NULL); - return (::GetObject(m_hPen, sizeof(EXTLOGPEN), &ExtLogPen) == sizeof(EXTLOGPEN)); + int nRet = ::GetObject(m_hPen, nSize, &ExtLogPen); + return ((nRet > 0) && (nRet <= nSize)); } #endif // !_WIN32_WCE }; @@ -411,44 +408,60 @@ public: void SetHeight(LONG nPointSize, HDC hDC = NULL) { + HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL); // For MM_TEXT mapping mode - lfHeight = -::MulDiv(nPointSize, ::GetDeviceCaps(hDC, LOGPIXELSY), 72); + lfHeight = -::MulDiv(nPointSize, ::GetDeviceCaps(hDC1, LOGPIXELSY), 72); + if(hDC == NULL) + ::ReleaseDC(NULL, hDC1); } LONG GetHeight(HDC hDC = NULL) const { + HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL); // For MM_TEXT mapping mode - return ::MulDiv(-lfHeight, 72, ::GetDeviceCaps(hDC, LOGPIXELSY)); + LONG nPointSize = ::MulDiv(-lfHeight, 72, ::GetDeviceCaps(hDC1, LOGPIXELSY)); + if(hDC == NULL) + ::ReleaseDC(NULL, hDC1); + + return nPointSize; } LONG GetDeciPointHeight(HDC hDC = NULL) const { + HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL); #ifndef _WIN32_WCE POINT ptOrg = { 0, 0 }; - ::DPtoLP(hDC, &ptOrg, 1); + ::DPtoLP(hDC1, &ptOrg, 1); POINT pt = { 0, 0 }; pt.y = abs(lfHeight) + ptOrg.y; - ::LPtoDP(hDC,&pt,1); - return ::MulDiv(pt.y, 720, ::GetDeviceCaps(hDC, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point + ::LPtoDP(hDC1, &pt,1); + LONG nDeciPoint = ::MulDiv(pt.y, 720, ::GetDeviceCaps(hDC1, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point #else // CE specific // DP and LP are always the same on CE - return ::MulDiv(abs(lfHeight), 720, ::GetDeviceCaps(hDC, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point + LONG nDeciPoint = ::MulDiv(abs(lfHeight), 720, ::GetDeviceCaps(hDC1, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point #endif // _WIN32_WCE + if(hDC == NULL) + ::ReleaseDC(NULL, hDC1); + + return nDeciPoint; } void SetHeightFromDeciPoint(LONG nDeciPtHeight, HDC hDC = NULL) { + HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL); #ifndef _WIN32_WCE POINT pt = { 0, 0 }; - pt.y = ::MulDiv(::GetDeviceCaps(hDC, LOGPIXELSY), nDeciPtHeight, 720); // 72 points/inch, 10 decipoints/point - ::DPtoLP(hDC, &pt, 1); + pt.y = ::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), nDeciPtHeight, 720); // 72 points/inch, 10 decipoints/point + ::DPtoLP(hDC1, &pt, 1); POINT ptOrg = { 0, 0 }; - ::DPtoLP(hDC, &ptOrg, 1); + ::DPtoLP(hDC1, &ptOrg, 1); lfHeight = -abs(pt.y - ptOrg.y); #else // CE specific // DP and LP are always the same on CE - lfHeight = -abs(::MulDiv(::GetDeviceCaps(hDC, LOGPIXELSY), nDeciPtHeight, 720)); // 72 points/inch, 10 decipoints/point + lfHeight = -abs(::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), nDeciPtHeight, 720)); // 72 points/inch, 10 decipoints/point #endif // _WIN32_WCE + if(hDC == NULL) + ::ReleaseDC(NULL, hDC1); } #ifndef _WIN32_WCE @@ -1970,7 +1983,7 @@ public: } #endif // !_WIN32_WCE - BOOL Polyline(LPPOINT lpPoints, int nCount) + BOOL Polyline(const POINT* lpPoints, int nCount) { ATLASSERT(m_hDC != NULL); return ::Polyline(m_hDC, lpPoints, nCount); @@ -2178,14 +2191,14 @@ public: } #endif // !_WIN32_WCE - BOOL Polygon(LPPOINT lpPoints, int nCount) + BOOL Polygon(const POINT* lpPoints, int nCount) { ATLASSERT(m_hDC != NULL); return ::Polygon(m_hDC, lpPoints, nCount); } #ifndef _WIN32_WCE - BOOL PolyPolygon(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount) + BOOL PolyPolygon(const POINT* lpPoints, const INT* lpPolyCounts, int nCount) { ATLASSERT(m_hDC != NULL); return ::PolyPolygon(m_hDC, lpPoints, lpPolyCounts, nCount); @@ -2321,6 +2334,31 @@ public: ATLASSERT(m_hDC != NULL); return ::GradientFill(m_hDC, pVertices, nVertices, pMeshElements, nMeshElements, dwMode); } + + BOOL GradientFillRect(RECT& rect, COLORREF clr1, COLORREF clr2, bool bHorizontal) + { + ATLASSERT(m_hDC != NULL); + + TRIVERTEX arrTvx[2] = { { 0 }, { 0 } }; + + arrTvx[0].x = rect.left; + arrTvx[0].y = rect.top; + arrTvx[0].Red = MAKEWORD(0, GetRValue(clr1)); + arrTvx[0].Green = MAKEWORD(0, GetGValue(clr1)); + arrTvx[0].Blue = MAKEWORD(0, GetBValue(clr1)); + arrTvx[0].Alpha = 0; + + arrTvx[1].x = rect.right; + arrTvx[1].y = rect.bottom; + arrTvx[1].Red = MAKEWORD(0, GetRValue(clr2)); + arrTvx[1].Green = MAKEWORD(0, GetGValue(clr2)); + arrTvx[1].Blue = MAKEWORD(0, GetBValue(clr2)); + arrTvx[1].Alpha = 0; + + GRADIENT_RECT gr = { 0, 1 }; + + return ::GradientFill(m_hDC, arrTvx, 2, &gr, 1, bHorizontal ? GRADIENT_FILL_RECT_H : GRADIENT_FILL_RECT_V); + } #endif // !defined(_WIN32_WCE) || (_WIN32_WCE >= 420) #if !defined(_WIN32_WCE) || (_WIN32_WCE > 0x500) @@ -3009,7 +3047,7 @@ public: static CBrushHandle PASCAL GetHalftoneBrush() { HBRUSH halftoneBrush = NULL; - WORD grayPattern[8]; + WORD grayPattern[8] = { 0 }; for(int i = 0; i < 8; i++) grayPattern[i] = (WORD)(0x5555 << (i & 1)); HBITMAP grayBitmap = CreateBitmap(8, 8, 1, 1, &grayPattern); @@ -3400,7 +3438,7 @@ public: HBITMAP m_hBmpOld; // Constructor/destructor - CMemoryDC(HDC hDC, RECT& rcPaint) : m_hDCOriginal(hDC), m_hBmpOld(NULL) + CMemoryDC(HDC hDC, const RECT& rcPaint) : m_hDCOriginal(hDC), m_hBmpOld(NULL) { m_rcPaint = rcPaint; CreateCompatibleDC(m_hDCOriginal); @@ -3636,8 +3674,8 @@ public: // DIBINFO16 - To avoid color table problems in WinCE we only create this type of Dib struct DIBINFO16 // a BITMAPINFO with 2 additional color bitfields { - BITMAPINFOHEADER bmiHeader; - RGBQUAD bmiColors[3]; + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[3]; DIBINFO16(SIZE size) { @@ -3646,7 +3684,7 @@ struct DIBINFO16 // a BITMAPINFO with 2 additional color bitfields DWORD dw[3] = DIBINFO16_BITFIELDS ; bmiHeader = bmih; - memcpy(bmiColors, dw, 3 * sizeof(DWORD)); + SecureHelper::memcpy_x(bmiColors, sizeof(bmiColors), dw, 3 * sizeof(DWORD)); } }; @@ -3710,18 +3748,21 @@ inline int AtlGetDibNumColors(LPBITMAPINFOHEADER pbmih) inline HBITMAP AtlGetDibBitmap(LPBITMAPINFO pbmi) { - HBITMAP hbm = NULL; CDC dc(NULL); - void * pBits = NULL; + void* pBits = NULL; LPBYTE pDibBits = (LPBYTE)pbmi + sizeof(BITMAPINFOHEADER) + AtlGetDibColorTableSize(&pbmi->bmiHeader) * sizeof(RGBQUAD); - if (hbm = CreateDIBSection(dc, pbmi, DIB_RGB_COLORS, &pBits, NULL, NULL)) - memcpy(pBits, pDibBits, pbmi->bmiHeader.biSizeImage); + HBITMAP hbm = CreateDIBSection(dc, pbmi, DIB_RGB_COLORS, &pBits, NULL, NULL); + if (hbm != NULL) + { + int cbBits = pbmi->bmiHeader.biWidth * pbmi->bmiHeader.biHeight * pbmi->bmiHeader.biBitCount / 8; + SecureHelper::memcpy_x(pBits, cbBits, pDibBits, pbmi->bmiHeader.biSizeImage); + } return hbm; } -inline HBITMAP AtlCopyBitmap(HBITMAP hbm , SIZE sizeDst, bool bAsBitmap = false) +inline HBITMAP AtlCopyBitmap(HBITMAP hbm, SIZE sizeDst, bool bAsBitmap = false) { CDC hdcSrc = CreateCompatibleDC(NULL); CDC hdcDst = CreateCompatibleDC(NULL); @@ -3786,13 +3827,13 @@ inline HLOCAL AtlCreatePackedDib16(HBITMAP hbm, SIZE size) } } - if((bOK == TRUE) && (AtlIsDib16(&ds.dsBmih) == TRUE) && (ds.dsBm.bmBits != NULL)) + if((bOK != FALSE) && (AtlIsDib16(&ds.dsBmih) != FALSE) && (ds.dsBm.bmBits != NULL)) { pDib = (LPBYTE)LocalAlloc(LMEM_ZEROINIT, sizeof(DIBINFO16) + ds.dsBmih.biSizeImage); if (pDib != NULL) { - memcpy(pDib , &ds.dsBmih, sizeof(DIBINFO16)); - memcpy(pDib + sizeof(DIBINFO16), ds.dsBm.bmBits, ds.dsBmih.biSizeImage); + SecureHelper::memcpy_x(pDib, sizeof(DIBINFO16) + ds.dsBmih.biSizeImage, &ds.dsBmih, sizeof(DIBINFO16)); + SecureHelper::memcpy_x(pDib + sizeof(DIBINFO16), ds.dsBmih.biSizeImage, ds.dsBm.bmBits, ds.dsBmih.biSizeImage); } } @@ -3806,9 +3847,10 @@ inline bool AtlSetClipboardDib16(HBITMAP hbm, SIZE size, HWND hWnd) { ATLASSERT(::IsWindow(hWnd)); BOOL bOK = OpenClipboard(hWnd); - if (bOK == TRUE) + if (bOK != FALSE) { - if ((bOK = EmptyClipboard()) == TRUE) + bOK = EmptyClipboard(); + if (bOK != FALSE) { HLOCAL hDib = AtlCreatePackedDib16(hbm, size); if (hDib != NULL) @@ -3825,14 +3867,14 @@ inline bool AtlSetClipboardDib16(HBITMAP hbm, SIZE size, HWND hWnd) CloseClipboard(); } - return bOK == TRUE; + return (bOK != FALSE); } inline HBITMAP AtlGetClipboardDib(HWND hWnd) { - ATLASSERT(::IsWindow(hWnd) == TRUE); + ATLASSERT(::IsWindow(hWnd) != FALSE); HBITMAP hbm = NULL; - if (OpenClipboard(hWnd) == TRUE) + if (OpenClipboard(hWnd) != FALSE) { LPBITMAPINFO pbmi = (LPBITMAPINFO)GetClipboardData(CF_DIB); if (pbmi != NULL) diff --git a/ext/CrashServer/external/WTL/Include/atlres.h b/ext/CrashServer/external/WTL/Include/atlres.h index 6da9ab068..c23f199b8 100644 --- a/ext/CrashServer/external/WTL/Include/atlres.h +++ b/ext/CrashServer/external/WTL/Include/atlres.h @@ -1,5 +1,5 @@ -// Windows Template Library - WTL version 8.1 -// Copyright (C) Microsoft Corporation. All rights reserved. +// Windows Template Library - WTL version 9.0 +// Copyright (C) Microsoft Corporation, WTL Team. All rights reserved. // // This file is a part of the Windows Template Library. // The use and distribution terms for this software are covered by the @@ -150,6 +150,9 @@ #define ID_EDIT_SELECT_ALL 0xE12A #define ID_EDIT_UNDO 0xE12B #define ID_EDIT_REDO 0xE12C +#define ID_EDIT_DELETE ID_EDIT_CLEAR +#define ID_EDIT_FIND_NEXT ID_EDIT_REPEAT +#define ID_EDIT_FIND_PREVIOUS 0xE12D // Window commands #define ID_WINDOW_NEW 0xE130 @@ -184,6 +187,8 @@ #define ID_NEXT_PANE 0xE150 #define ID_PREV_PANE 0xE151 #define ID_PANE_CLOSE 0xE152 +#define ID_PANE_NEXT ID_NEXT_PANE +#define ID_PANE_PREVIOUS ID_PREV_PANE // Format #define ID_FORMAT_FONT 0xE160 @@ -217,6 +222,7 @@ #define ID_VIEW_TOOLBAR 0xE800 #define ID_VIEW_STATUS_BAR 0xE801 #define ID_VIEW_REFRESH 0xE803 +#define ID_VIEW_RIBBON 0xE804 /////////////////////////////////////////////////////////////////////////////// // Standard control IDs diff --git a/ext/CrashServer/external/WTL/Include/atluser.h b/ext/CrashServer/external/WTL/Include/atluser.h index 01b97e27c..a43a48c54 100644 --- a/ext/CrashServer/external/WTL/Include/atluser.h +++ b/ext/CrashServer/external/WTL/Include/atluser.h @@ -1,5 +1,5 @@ -// Windows Template Library - WTL version 8.1 -// Copyright (C) Microsoft Corporation. All rights reserved. +// Windows Template Library - WTL version 9.0 +// Copyright (C) Microsoft Corporation, WTL Team. All rights reserved. // // This file is a part of the Windows Template Library. // The use and distribution terms for this software are covered by the @@ -14,10 +14,6 @@ #pragma once -#ifndef __cplusplus - #error ATL requires C++ compilation (use a .cpp suffix) -#endif - #ifndef __ATLAPP_H__ #error atluser.h requires atlapp.h to be included first #endif @@ -35,6 +31,22 @@ // // Global functions: // AtlMessageBox() +// +// AtlLoadAccelerators() +// AtlLoadMenu() +// AtlLoadBitmap() +// AtlLoadSysBitmap() +// AtlLoadCursor() +// AtlLoadSysCursor() +// AtlLoadIcon() +// AtlLoadSysIcon() +// AtlLoadBitmapImage() +// AtlLoadCursorImage() +// AtlLoadIconImage() +// AtlLoadSysBitmapImage() +// AtlLoadSysCursorImage() +// AtlLoadSysIconImage() +// AtlLoadString() namespace WTL @@ -268,8 +280,7 @@ public: HMONITOR hMonitorNear = ::MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); if(hMonitorNear != NULL) { - MONITORINFO mi = { 0 }; - mi.cbSize = sizeof(MONITORINFO); + MONITORINFO mi = { sizeof(MONITORINFO) }; if(::GetMonitorInfo(hMonitorNear, &mi) != FALSE) { if(x < mi.rcWork.left) @@ -402,7 +413,7 @@ public: } #endif // !_ATL_NO_COM -#elif _ATL_VER >= 0x800 +#elif (_ATL_VER >= 0x0800) int GetMenuItemCount() const { ATLASSERT(::IsMenu(m_hMenu)); @@ -432,7 +443,7 @@ public: ATLASSERT(::IsMenu(m_hMenu)); return ATL::GetMenuString(m_hMenu, nIDItem, NULL, 0, nFlags); } -#endif // _ATL_VER >= 0x800 +#endif // (_ATL_VER >= 0x0800) #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) int GetMenuString(UINT nIDItem, _CSTRING_NS::CString& strText, UINT nFlags) const @@ -1188,6 +1199,192 @@ public: } }; + +/////////////////////////////////////////////////////////////////////////////// +// Toolbar resource descriptor + +struct _AtlToolBarData +{ + WORD wVersion; + WORD wWidth; + WORD wHeight; + WORD wItemCount; + + WORD* items() + { return (WORD*)(this+1); } +}; + + +/////////////////////////////////////////////////////////////////////////////// +// Global functions for loading resources + +inline HACCEL AtlLoadAccelerators(ATL::_U_STRINGorID table) +{ + return ::LoadAccelerators(ModuleHelper::GetResourceInstance(), table.m_lpstr); +} + +inline HMENU AtlLoadMenu(ATL::_U_STRINGorID menu) +{ + return ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr); +} + +inline HBITMAP AtlLoadBitmap(ATL::_U_STRINGorID bitmap) +{ + return ::LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr); +} + +#ifdef OEMRESOURCE +inline HBITMAP AtlLoadSysBitmap(ATL::_U_STRINGorID bitmap) +{ +#ifdef _DEBUG + WORD wID = (WORD)bitmap.m_lpstr; + ATLASSERT(wID >= 32734 && wID <= 32767); +#endif // _DEBUG + return ::LoadBitmap(NULL, bitmap.m_lpstr); +} +#endif // OEMRESOURCE + +inline HCURSOR AtlLoadCursor(ATL::_U_STRINGorID cursor) +{ + return ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr); +} + +inline HCURSOR AtlLoadSysCursor(LPCTSTR lpCursorName) +{ +#if (WINVER >= 0x0500) + ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT || + lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE || + lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW || + lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL || + lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP || + lpCursorName == IDC_HAND); +#else // !(WINVER >= 0x0500) + ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT || + lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE || + lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW || + lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL || + lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP); +#endif // !(WINVER >= 0x0500) + return ::LoadCursor(NULL, lpCursorName); +} + +inline HICON AtlLoadIcon(ATL::_U_STRINGorID icon) +{ + return ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr); +} + +#ifndef _WIN32_WCE +inline HICON AtlLoadSysIcon(LPCTSTR lpIconName) +{ +#if (WINVER >= 0x0600) + ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION || + lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO || + lpIconName == IDI_SHIELD); +#else // !(WINVER >= 0x0600) + ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION || + lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO); +#endif // !(WINVER >= 0x0600) + return ::LoadIcon(NULL, lpIconName); +} +#endif // !_WIN32_WCE + +inline HBITMAP AtlLoadBitmapImage(ATL::_U_STRINGorID bitmap, UINT fuLoad = LR_DEFAULTCOLOR) +{ + return (HBITMAP)::LoadImage(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr, IMAGE_BITMAP, 0, 0, fuLoad); +} + +inline HCURSOR AtlLoadCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0) +{ + return (HCURSOR)::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad); +} + +inline HICON AtlLoadIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0) +{ + return (HICON)::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad); +} + +#ifdef OEMRESOURCE +inline HBITMAP AtlLoadSysBitmapImage(WORD wBitmapID, UINT fuLoad = LR_DEFAULTCOLOR) +{ + ATLASSERT(wBitmapID >= 32734 && wBitmapID <= 32767); + ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file + return (HBITMAP)::LoadImage(NULL, MAKEINTRESOURCE(wBitmapID), IMAGE_BITMAP, 0, 0, fuLoad); +} +#endif // OEMRESOURCE + +inline HCURSOR AtlLoadSysCursorImage(ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0) +{ +#ifdef _DEBUG + WORD wID = (WORD)cursor.m_lpstr; + ATLASSERT((wID >= 32512 && wID <= 32516) || (wID >= 32640 && wID <= 32648) || (wID == 32650) || (wID == 32651)); + ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file +#endif // _DEBUG + return (HCURSOR)::LoadImage(NULL, cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad); +} + +inline HICON AtlLoadSysIconImage(ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE, int cxDesired = 0, int cyDesired = 0) +{ +#ifdef _DEBUG + WORD wID = (WORD)icon.m_lpstr; + ATLASSERT(wID >= 32512 && wID <= 32517); + ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0); // this one doesn't load from a file +#endif // _DEBUG + return (HICON)::LoadImage(NULL, icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad); +} + +#if (_ATL_VER < 0x0700) +inline int AtlLoadString(UINT uID, LPTSTR lpBuffer, int nBufferMax) +{ + return ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpBuffer, nBufferMax); +} +#else + +using ATL::AtlLoadString; + +#endif // (_ATL_VER < 0x0700) + +#ifdef _WIN32_WCE // CE only direct access to the resource +inline LPCTSTR AtlLoadString(UINT uID) +{ + LPCTSTR s = (LPCTSTR)::LoadString(ModuleHelper::GetResourceInstance(), uID, NULL, 0); +#ifdef DEBUG // Check for null-termination + if(s != NULL) + // Note: RC -n compiles null-terminated resource strings + ATLASSERT(s[*((WORD*)s -1) - 1] == L'\0'); +#endif + return s; +} +#endif // _WIN32_WCE + +inline bool AtlLoadString(UINT uID, BSTR& bstrText) +{ + USES_CONVERSION; + ATLASSERT(bstrText == NULL); + + LPTSTR lpstrText = NULL; + int nRes = 0; + for(int nLen = 256; ; nLen *= 2) + { + ATLTRY(lpstrText = new TCHAR[nLen]); + if(lpstrText == NULL) + break; + nRes = ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpstrText, nLen); + if(nRes < nLen - 1) + break; + delete [] lpstrText; + lpstrText = NULL; + } + + if(lpstrText != NULL) + { + if(nRes != 0) + bstrText = ::SysAllocString(T2OLE(lpstrText)); + delete [] lpstrText; + } + + return (bstrText != NULL) ? true : false; +} + }; // namespace WTL #endif // __ATLUSER_H__ diff --git a/ext/CrashServer/external/WTL/Include/atlwinx.h b/ext/CrashServer/external/WTL/Include/atlwinx.h index 2d193f5fa..749dafb4a 100644 --- a/ext/CrashServer/external/WTL/Include/atlwinx.h +++ b/ext/CrashServer/external/WTL/Include/atlwinx.h @@ -1,5 +1,5 @@ -// Windows Template Library - WTL version 8.1 -// Copyright (C) Microsoft Corporation. All rights reserved. +// Windows Template Library - WTL version 9.0 +// Copyright (C) Microsoft Corporation, WTL Team. All rights reserved. // // This file is a part of the Windows Template Library. // The use and distribution terms for this software are covered by the @@ -14,10 +14,6 @@ #pragma once -#ifndef __cplusplus - #error ATL requires C++ compilation (use a .cpp suffix) -#endif - #ifndef __ATLAPP_H__ #error atlwinx.h requires atlapp.h to be included first #endif diff --git a/ext/CrashServer/external/gsoap-win32-2.8.0/mod_gsoap/gsoap_win/wininet/gsoapWinInet.h b/ext/CrashServer/external/gsoap-win32-2.8.0/mod_gsoap/gsoap_win/wininet/gsoapWinInet.h deleted file mode 100644 index 1f5b42878..000000000 --- a/ext/CrashServer/external/gsoap-win32-2.8.0/mod_gsoap/gsoap_win/wininet/gsoapWinInet.h +++ /dev/null @@ -1,196 +0,0 @@ -/* -=============================================================================== -GSOAP WININET PLUGIN -------------------------------------------------------------------------------- - -Allow gsoap clients (not servers) to direct all communications through the -WinInet API. This automatically provides all of the proxy and authentication -features supported by the control panel 'Internet Options' dialog to the -client. As these options are shared by IE, this means that "if IE works, -gsoap works." - -Project Home: http://code.google.com/p/gsoapwininet/ - -------------------------------------------------------------------------------- -Features -------------------------------------------------------------------------------- - - + gsoap plugin - extremely easy to use - + complete support for: - - HTTP/1.0 and HTTP/1.1 - - HTTPS (no extra libraries are required) - - HTTP authentication - - Proxy servers (simple, automatic discovery, etc) - - Proxy authentication (basic, NTLM, etc) - + authentication prompts and HTTPS warnings (e.g. invalid HTTPS CA) - can be resolved by the user via standard system dialog boxes. - + message size is limited only by available memory - + connect, receive and send timeouts are used - + supports all SOAP_IO types (see limitations) - + written completely in C, can be used in C, C++, and MFC projects - without modification (anywhere that gsoap is used) - + can be used in both MBCS and UNICODE projects - + compiles cleanly at warning level 4 (if gsoap uses SOAP_SOCKET - for the definition of sockets instead of int, it will also - compile without win64 warnings). - + all debug trace goes to the gsoap TEST.log file - + supports multiple threads (all plugin data is stored in the - soap structure - no static variables) - -------------------------------------------------------------------------------- -Limitations -------------------------------------------------------------------------------- - - DIME attachments are not supported - - may internally buffer the entire outgoing message before sending - (if the serialized message is larger then SOAP_BUFLEN, or if - SOAP_IO_CHUNK mode is being used then the entire message will - be buffered) - -------------------------------------------------------------------------------- -Usage -------------------------------------------------------------------------------- - -Add the gsoapWinInet2.h and gsoapWinInet2.cpp files to your project (if you -have a C project, rename gsoapWinInet2.cpp to .c and use it as is). Ensure -that you turn off precompiled headers for the .cpp file. - -In your source, just after calling soap_init(), register this plugin with -soap_register_plugin( soap, wininet_plugin ). - -For example: - struct soap soap; - soap_init( &soap ); - soap_register_plugin( &soap, wininet_plugin ); - soap.connect_timeout = 5; // this will be used by wininet too - ... - soap_done(&soap); - -------------------------------------------------------------------------------- -Notes -------------------------------------------------------------------------------- - -For extra control, you may also register this plugin using the -soap_register_plugin_arg() function, and supply as the argument flags which -you want to be passed to HttpOpenRequest. - -For example: - struct soap soap; - soap_init( &soap ); - soap_register_plugin_arg( &soap, wininet_plugin, - (void*) INTERNET_FLAG_IGNORE_CERT_CN_INVALID ); - -See the MSDN documentation on HttpOpenRequest for details of available flags. -The header file is required for the definitions of the flags. -Some flags which may be useful are: - -INTERNET_FLAG_KEEP_CONNECTION - - Uses keep-alive semantics, if available, for the connection. - This flag is required for Microsoft Network (MSN), NT LAN - Manager (NTLM), and other types of authentication. - ++ Note that this flag is used automatically when soap.omode - has the SOAP_IO_KEEPALIVE flag set. ++ - -INTERNET_FLAG_IGNORE_CERT_CN_INVALID - - Disables Microsoft Win32 Internet function checking of SSL/PCT- - based certificates that are returned from the server against - the host name given in the request. - -INTERNET_FLAG_IGNORE_CERT_DATE_INVALID - - Disables Win32 Internet function checking of SSL/PCT-based - certificates for proper validity dates. - -This plugin uses the following callback functions and is not compatible -with any other plugin that uses these functions. - - soap->fopen - soap->fposthdr - soap->fsend - soap->frecv - soap->fclose - -If there are errors in sending the HTTP request which would cause a dialog -box to be displayed in IE (for instance, invalid certificates on an HTTPS -connection), then a dialog will also be displayed by this library. At the -moment is is not possible to disable the UI. If you wish to remove the UI -then you will need to hack the source to remove the dialog box and resolve the -errors programmatically, or supply the appropriate flags in -soap_register_plugin_arg() to disable the unwanted warnings. - -Because messages are buffered internally to gsoapWinInet2 plugin it is -recommended that the SOAP_IO_STORE flag is not used otherwise the message may -be buffered twice on every send. Use the default flag SOAP_IO_BUFFER, -or SOAP_IO_FLUSH. - -------------------------------------------------------------------------------- -License -------------------------------------------------------------------------------- - -The licence text below is the boilerplate "MIT Licence" used from: -http://www.opensource.org/licenses/mit-license.php - -Copyright (c) 2009, Brodie Thiesfield - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------------------- -Developers -------------------------------------------------------------------------------- - -26 May 2003: Jack Kustanowitz (jackk@atomica.com) -Original version - -29 September 2003: Brodie Thiesfield (code@jellycan.com) -Rewritten as C plugin for gsoap. Bugs fixed and features added. - -14 January 2004: Brodie Thiesfield (code@jellycan.com) -Bug fix. - -17 March 2009: Brodie Thiesfield (code@jellycan.com) -Clean up and re-release. -*/ - -#ifndef INCLUDED_gsoapWinInet2_h -#define INCLUDED_gsoapWinInet2_h - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - rseFalse = 0, - rseTrue, - rseDisplayDlg -} wininet_rseReturn; - -typedef wininet_rseReturn(*wininet_rse_callback)(HINTERNET a_hHttpRequest, DWORD a_dwErrorCode); - -extern void wininet_set_rse_callback(struct soap *a_pSoap, wininet_rse_callback a_pRseCallback); - -extern int wininet_plugin(struct soap *a_pSoap, struct soap_plugin *a_pPluginData, void *a_pUnused); - -#ifdef __cplusplus -} -#endif - -#endif // INCLUDED_gsoapWinInet2_h diff --git a/src/TortoiseGit.sln b/src/TortoiseGit.sln index 25a7aae37..6479ee6f0 100644 --- a/src/TortoiseGit.sln +++ b/src/TortoiseGit.sln @@ -42,6 +42,7 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "WixSetup", "TortoiseGitSetu {A5498556-CE09-4095-8335-08FC8370552D} = {A5498556-CE09-4095-8335-08FC8370552D} {2B4F366C-93BA-491E-87AF-5EF7B37F75F7} = {2B4F366C-93BA-491E-87AF-5EF7B37F75F7} {E8C01071-3B47-4A3F-9168-AA58A4635638} = {E8C01071-3B47-4A3F-9168-AA58A4635638} + {BC62FB83-CFBB-4AE3-A60D-D73155AA33FA} = {BC62FB83-CFBB-4AE3-A60D-D73155AA33FA} {8ABB4F84-891A-4748-8507-F5494842173E} = {8ABB4F84-891A-4748-8507-F5494842173E} {4472028D-4ACF-474E-AA95-9B7E12B50F60} = {4472028D-4ACF-474E-AA95-9B7E12B50F60} {8E943F8F-ED43-42DB-A25B-C6356F01AAC7} = {8E943F8F-ED43-42DB-A25B-C6356F01AAC7} @@ -682,25 +683,26 @@ Global EndGlobalSection GlobalSection(NestedProjects) = preSolution {2CB340C3-B2ED-46F4-981E-847747E0A3BF} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} - {586BCCB7-619B-4F83-A07B-596F04E5A3E7} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} + {F9816C29-582C-4C99-B892-1900DB2C4064} = {586BCCB7-619B-4F83-A07B-596F04E5A3E7} {9D948C1D-52C8-4BEC-B2BE-26BE9B25ACD1} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} + {BD66F94E-B546-4B80-A536-FAB2CB61A398} = {9D948C1D-52C8-4BEC-B2BE-26BE9B25ACD1} + {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} = {9D948C1D-52C8-4BEC-B2BE-26BE9B25ACD1} {12E5B4AE-D7EF-4A57-A22D-6F9F9D8CE1FB} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} {4BE529FB-C2F2-49F7-A897-054B955564CF} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} {A5498556-CE09-4095-8335-08FC8370552D} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} - {7801D1BE-E2FE-476B-A4B4-5D27F387F479} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} {150172A5-8D02-4C00-ABB5-BD99D4B16B4C} = {97449875-7B08-41B1-AF99-1EBE64AD7939} {454D5FCC-E25A-4B45-9CA2-01ABB0FA5181} = {97449875-7B08-41B1-AF99-1EBE64AD7939} + {72EFB681-1397-4193-BBF9-CA05AC52B75D} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} + {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} + {EC88E7EC-3074-4841-BA45-B938D098EFF6} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} + {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE} = {F9816C29-582C-4C99-B892-1900DB2C4064} + {4472028D-4ACF-474E-AA95-9B7E12B50F60} = {586BCCB7-619B-4F83-A07B-596F04E5A3E7} + {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9} = {F9816C29-582C-4C99-B892-1900DB2C4064} {5C6B6A95-2053-4593-9617-C4F176736D5A} = {2CB340C3-B2ED-46F4-981E-847747E0A3BF} {F6DEC8C3-B803-4A86-8848-430F08B499E3} = {2CB340C3-B2ED-46F4-981E-847747E0A3BF} {4F0A55DE-DAFD-4A0B-A03D-2C14CB77E08F} = {2CB340C3-B2ED-46F4-981E-847747E0A3BF} - {2B4F366C-93BA-491E-87AF-5EF7B37F75F7} = {2CB340C3-B2ED-46F4-981E-847747E0A3BF} - {F9816C29-582C-4C99-B892-1900DB2C4064} = {586BCCB7-619B-4F83-A07B-596F04E5A3E7} - {4472028D-4ACF-474E-AA95-9B7E12B50F60} = {586BCCB7-619B-4F83-A07B-596F04E5A3E7} - {DA843306-3D6D-4198-890E-25E6177E01C3} = {586BCCB7-619B-4F83-A07B-596F04E5A3E7} {948733DE-FC5A-46C2-8CD6-429017508D63} = {84AFABE1-6139-457A-8645-F86D1F182E06} - {72EFB681-1397-4193-BBF9-CA05AC52B75D} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} - {1B3C273E-6DDF-4FBE-BA31-F9F39C6DAC99} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} - {EC88E7EC-3074-4841-BA45-B938D098EFF6} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} + {2B4F366C-93BA-491E-87AF-5EF7B37F75F7} = {2CB340C3-B2ED-46F4-981E-847747E0A3BF} {1B3C273E-6DDF-4FBE-BA31-FCF39C6DBCF9} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {56016512-D578-46FD-85E0-9EDCD37433AC} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {4C8C72BE-FE20-4A92-A592-0D44ED849B1C} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} @@ -711,11 +713,17 @@ Global {4E8ACC21-A321-478F-8D55-C5440F41203F} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {B9C725A7-9727-48B2-86E5-F905F6C2B9E6} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {AD35E207-3793-4A26-82A2-520D7C3C71BB} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} + {D0D57CA2-A972-47FE-92C8-63A3CAAF0E93} = {BD66F94E-B546-4B80-A536-FAB2CB61A398} + {1912DDA2-E7B9-437F-BA8E-DA2C1C2D79FA} = {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} + {BC62FB83-CFBB-4AE3-A60D-D73155AA33FA} = {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} + {8E943F8F-ED43-42DB-A25B-C6356F01AAC7} = {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} {2DA02430-FD59-4EE7-B8B1-E501FF390656} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {DD9A2398-7A47-48C4-9601-89856128AAC9} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {D83CB1C3-3DB4-4760-BBB7-618198180D5B} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {7A9B0E43-A97C-4771-BE30-1E7D128BAB52} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {1A015A9A-20FA-4E65-828A-B1BFB7190178} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} + {7801D1BE-E2FE-476B-A4B4-5D27F387F479} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} + {586BCCB7-619B-4F83-A07B-596F04E5A3E7} = {C4836DB1-8F21-4113-A9C4-CE7F5264C90C} {C3774955-ADE4-4CF0-92A2-71383C29CECE} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {3796A881-6668-41C7-88AE-005BB8DC6A8E} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {CE012F99-AA82-462C-8F7C-F8A946EAF4AE} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} @@ -728,13 +736,6 @@ Global {9A6767C9-DA46-4B6C-B899-4F0DEFBA181B} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {925C4E4C-D427-4051-86AE-A5B1149AACB3} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} {A67687EC-297B-4FDD-8240-F4C64D9A8FB6} = {FB607AFD-DD1E-4C6D-8C34-BC00AF725037} - {BD66F94E-B546-4B80-A536-FAB2CB61A398} = {9D948C1D-52C8-4BEC-B2BE-26BE9B25ACD1} - {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} = {9D948C1D-52C8-4BEC-B2BE-26BE9B25ACD1} - {D0D57CA2-A972-47FE-92C8-63A3CAAF0E93} = {BD66F94E-B546-4B80-A536-FAB2CB61A398} - {1912DDA2-E7B9-437F-BA8E-DA2C1C2D79FA} = {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} - {BC62FB83-CFBB-4AE3-A60D-D73155AA33FA} = {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} - {8E943F8F-ED43-42DB-A25B-C6356F01AAC7} = {C8F4D789-D86F-4B0C-8C47-4B263027B1A6} - {6BD19BAE-4041-4E85-B576-AAC9D54CAAB9} = {F9816C29-582C-4C99-B892-1900DB2C4064} - {AE6AAFBA-9992-452A-9EB8-DD69402A4ACE} = {F9816C29-582C-4C99-B892-1900DB2C4064} + {DA843306-3D6D-4198-890E-25E6177E01C3} = {586BCCB7-619B-4F83-A07B-596F04E5A3E7} EndGlobalSection EndGlobal diff --git a/src/TortoiseGitSetup/StructureFragment.wxi b/src/TortoiseGitSetup/StructureFragment.wxi index aca99332a..9bc5a6bb9 100644 --- a/src/TortoiseGitSetup/StructureFragment.wxi +++ b/src/TortoiseGitSetup/StructureFragment.wxi @@ -726,6 +726,8 @@ + + -- 2.11.4.GIT