commit 9dd4cb580eafee98b0d5d26cb36633e0badc4fec Author: 起床就犯困 <11730503+psx123456@user.noreply.gitee.com> Date: Thu Oct 31 16:25:18 2024 +0800 网关代码 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..08376be --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "C_Cpp.errorSquiggles": "disabled", + "files.associations": { + "uart": "cpp" + } +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a74fbd8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.16) + +# # 设置项目名称 +# project(uart) + +# # 如果是发行版本就更换Debug为Release +# set(CMAKE_BUILD_TYPE "Debug") +# if(CMAKE_BUILD_TYPE STREQUAL Debug) +# # 添加D_DEBUG编译参数 +# add_definitions(-D_DEBUG) +# endif() + +# 显式设置项目源代码目录 +set(PROJECT_SOURCE_DIR ${CMAKE_SOURCE_DIR}) + + +#项目编译选择,通过选择开关来进行编译选项,通过这种方式去选择编译测试模块中的哪一个 +option(source "main" OFF) +option(unit_test "unit_test" ON) + +#添加子工程目录,PROJECT_SOURCE_DIR为项目顶级CMakeLists.txt文件所在的目录 +if(Main_Source) + add_subdirectory(${PROJECT_SOURCE_DIR}/source) +endif() + +#项目编译选择,unit_test目录下哪些要编译 +option(board_test "board_test" OFF) + #项目编译选择,board_test目录下哪些要编译 + option(uart "uart_test" OFF) + option(json "json_test" ON) + +#项目编译选择,test目录下哪些要编译 +option(test "test" ON) + #项目编译选择,board_test目录下哪些要编译 + option(onvif "onvif" OFF) + option(hello "hello" ON) + +#测试程序 +if(unit_test) + add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test) +endif() + diff --git a/README.md b/README.md new file mode 100644 index 0000000..403b662 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +## 工程目录说明 + +1.bin +>该目录存放着程序的执行文件,如单元测试的执行文件以及总工程项目的执行文件。 + +2.build +>该目录存放CMake构建后的缓存文件。 + +3.cmake_config +>该目录存放CMake的配置文件。 + +4.doc +>该目录存放工程相关说明文档。 + +5.script +>该目录存放其他辅助的脚本。 + +6.source +>该目录存放主体业务源码。 + +7.third_lib +>该目录存放第三方使用的库。 + +8.unit_test +>该目录存放单元测试工程。 + +9.CMakeLists.txt +>总工程构建CMake文件。 + +10.build.sh +>总工程编译脚本文件。 + +11.buildcfg +>build.sh的配置文件。 + +12.log +>存放修改的详细内容 diff --git a/bin/json_test b/bin/json_test new file mode 100644 index 0000000..b543dcd Binary files /dev/null and b/bin/json_test differ diff --git a/bin/main b/bin/main new file mode 100644 index 0000000..9c080be Binary files /dev/null and b/bin/main differ diff --git a/bin/onvif-discover b/bin/onvif-discover new file mode 100644 index 0000000..f6d63f8 Binary files /dev/null and b/bin/onvif-discover differ diff --git a/bin/uart_test b/bin/uart_test new file mode 100644 index 0000000..d085f34 Binary files /dev/null and b/bin/uart_test differ diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..eef59a2 --- /dev/null +++ b/build.sh @@ -0,0 +1,16 @@ +#/bin/bash + +export ANDROID_NDK=/home/vboxuser/tools/ndk/android-ndk-r22b + +rm -r build +mkdir build && cd build + +cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI="armeabi-v7a" \ + -DANDROID_NDK=$ANDROID_NDK \ + -DANDROID_PLATFORM=android-22 \ + .. + +make && make install + +cd .. \ No newline at end of file diff --git a/build/CMakeCache.txt b/build/CMakeCache.txt new file mode 100644 index 0000000..78f4ec7 --- /dev/null +++ b/build/CMakeCache.txt @@ -0,0 +1,413 @@ +# This is the CMakeCache file. +# For build in directory: /media/sf_share/gateway/build +# It was generated by CMake: /usr/local/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//No help, variable specified on the command line. +ANDROID_ABI:UNINITIALIZED=armeabi-v7a + +//No help, variable specified on the command line. +ANDROID_NDK:UNINITIALIZED=/home/vboxuser/tools/ndk/android-ndk-r22b + +//No help, variable specified on the command line. +ANDROID_PLATFORM:UNINITIALIZED=android-22 + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line + +//Archiver +CMAKE_AR:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar + +//Flags used by the compiler during all build types. +CMAKE_ASM_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_ASM_FLAGS_DEBUG:STRING= + +//Flags used by the compiler during release builds. +CMAKE_ASM_FLAGS_RELEASE:STRING= + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//LLVM archiver +CMAKE_CXX_COMPILER_AR:FILEPATH=CMAKE_CXX_COMPILER_AR-NOTFOUND + +//Generate index for LLVM archive +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=CMAKE_CXX_COMPILER_RANLIB-NOTFOUND + +//Flags used by the compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_CXX_FLAGS_DEBUG:STRING= + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_CXX_FLAGS_RELEASE:STRING= + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Libraries linked by default with all C++ applications. +CMAKE_CXX_STANDARD_LIBRARIES:STRING=-latomic -lm + +//LLVM archiver +CMAKE_C_COMPILER_AR:FILEPATH=CMAKE_C_COMPILER_AR-NOTFOUND + +//Generate index for LLVM archive +CMAKE_C_COMPILER_RANLIB:FILEPATH=CMAKE_C_COMPILER_RANLIB-NOTFOUND + +//Flags used by the compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_C_FLAGS_DEBUG:STRING= + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_C_FLAGS_RELEASE:STRING= + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Libraries linked by default with all C applications. +CMAKE_C_STANDARD_LIBRARIES:STRING=-latomic -lm + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make + +//Flags used by the linker during the creation of modules. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=Project + +//Ranlib +CMAKE_RANLIB:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf + +//Flags used by the linker during the creation of dll's. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Strip +CMAKE_STRIP:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip + +//The CMake toolchain file +CMAKE_TOOLCHAIN_FILE:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r22b/build/cmake/android.toolchain.cmake + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Value Computed by CMake +Project_BINARY_DIR:STATIC=/media/sf_share/gateway/build + +//Value Computed by CMake +Project_SOURCE_DIR:STATIC=/media/sf_share/gateway + +//board_test +board_test:BOOL=OFF + +//hello +hello:BOOL=ON + +//json_test +json:BOOL=ON + +//Value Computed by CMake +main_BINARY_DIR:STATIC=/media/sf_share/gateway/build/unit_test/test/hello + +//Value Computed by CMake +main_SOURCE_DIR:STATIC=/media/sf_share/gateway/unit_test/test/hello + +//onvif +onvif:BOOL=OFF + +//main +source:BOOL=OFF + +//test +test:BOOL=ON + +//uart_test +uart:BOOL=OFF + +//unit_test +unit_test:BOOL=ON + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/media/sf_share/gateway/build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=20 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=6 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/local/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/local/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/local/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_STANDARD_LIBRARIES +CMAKE_CXX_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_STANDARD_LIBRARIES +CMAKE_C_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/local/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/media/sf_share/gateway +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=4 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/local/share/cmake-3.20 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 + diff --git a/build/CMakeFiles/3.20.6/CMakeCCompiler.cmake b/build/CMakeFiles/3.20.6/CMakeCCompiler.cmake new file mode 100644 index 0000000..58b6766 --- /dev/null +++ b/build/CMakeFiles/3.20.6/CMakeCCompiler.cmake @@ -0,0 +1,78 @@ +set(CMAKE_C_COMPILER "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "Clang") +set(CMAKE_C_COMPILER_VERSION "11.0.5") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar") +set(CMAKE_C_COMPILER_AR "CMAKE_C_COMPILER_AR-NOTFOUND") +set(CMAKE_RANLIB "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib") +set(CMAKE_C_COMPILER_RANLIB "CMAKE_C_COMPILER_RANLIB-NOTFOUND") +set(CMAKE_LINKER "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCC ) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "") +set(CMAKE_C_COMPILER_ABI "") +set(CMAKE_C_BYTE_ORDER "") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;dl;c;gcc;dl") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/CMakeFiles/3.20.6/CMakeCXXCompiler.cmake b/build/CMakeFiles/3.20.6/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..39c19bd --- /dev/null +++ b/build/CMakeFiles/3.20.6/CMakeCXXCompiler.cmake @@ -0,0 +1,91 @@ +set(CMAKE_CXX_COMPILER "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "Clang") +set(CMAKE_CXX_COMPILER_VERSION "11.0.5") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar") +set(CMAKE_CXX_COMPILER_AR "CMAKE_CXX_COMPILER_AR-NOTFOUND") +set(CMAKE_RANLIB "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "CMAKE_CXX_COMPILER_RANLIB-NOTFOUND") +set(CMAKE_LINKER "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCXX ) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "") +set(CMAKE_CXX_COMPILER_ABI "") +set(CMAKE_CXX_BYTE_ORDER "") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "c++;m;gcc;dl;c;gcc;dl") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_C.bin b/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_C.bin new file mode 100644 index 0000000..984e635 Binary files /dev/null and b/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_C.bin differ diff --git a/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_CXX.bin b/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_CXX.bin new file mode 100644 index 0000000..77f6e7c Binary files /dev/null and b/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_CXX.bin differ diff --git a/build/CMakeFiles/3.20.6/CMakeSystem.cmake b/build/CMakeFiles/3.20.6/CMakeSystem.cmake new file mode 100644 index 0000000..078a984 --- /dev/null +++ b/build/CMakeFiles/3.20.6/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-4.15.0-142-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "4.15.0-142-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + +include("/home/vboxuser/tools/ndk/android-ndk-r22b/build/cmake/android.toolchain.cmake") + +set(CMAKE_SYSTEM "Android-1") +set(CMAKE_SYSTEM_NAME "Android") +set(CMAKE_SYSTEM_VERSION "1") +set(CMAKE_SYSTEM_PROCESSOR "armv7-a") + +set(CMAKE_CROSSCOMPILING "TRUE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/build/CMakeFiles/3.20.6/CompilerIdC/CMakeCCompilerId.c b/build/CMakeFiles/3.20.6/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..ec981c8 --- /dev/null +++ b/build/CMakeFiles/3.20.6/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,751 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a versio is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_DIALECT "90" +# else +# define C_DIALECT +# endif +#elif __STDC_VERSION__ >= 201000L +# define C_DIALECT "11" +#elif __STDC_VERSION__ >= 199901L +# define C_DIALECT "99" +#else +# define C_DIALECT "90" +#endif +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/build/CMakeFiles/3.20.6/CompilerIdC/CMakeCCompilerId.o b/build/CMakeFiles/3.20.6/CompilerIdC/CMakeCCompilerId.o new file mode 100644 index 0000000..fc88c1c Binary files /dev/null and b/build/CMakeFiles/3.20.6/CompilerIdC/CMakeCCompilerId.o differ diff --git a/build/CMakeFiles/3.20.6/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build/CMakeFiles/3.20.6/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 0000000..92e7655 --- /dev/null +++ b/build/CMakeFiles/3.20.6/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,743 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a versio is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} diff --git a/build/CMakeFiles/3.20.6/CompilerIdCXX/CMakeCXXCompilerId.o b/build/CMakeFiles/3.20.6/CompilerIdCXX/CMakeCXXCompilerId.o new file mode 100644 index 0000000..6f5b956 Binary files /dev/null and b/build/CMakeFiles/3.20.6/CompilerIdCXX/CMakeCXXCompilerId.o differ diff --git a/build/CMakeFiles/CMakeDirectoryInformation.cmake b/build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..c8078c8 --- /dev/null +++ b/build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/media/sf_share/gateway") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/media/sf_share/gateway/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/CMakeFiles/CMakeOutput.log b/build/CMakeFiles/CMakeOutput.log new file mode 100644 index 0000000..c74f0d1 --- /dev/null +++ b/build/CMakeFiles/CMakeOutput.log @@ -0,0 +1,402 @@ +The target system is: Android - 1 - armv7-a +The host system is: Linux - 4.15.0-142-generic - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang +Build flags: -g;-DANDROID;-fdata-sections;-ffunction-sections;-funwind-tables;-fstack-protector-strong;-no-canonical-prefixes;-D_FORTIFY_SOURCE=2;-march=armv7-a;-mthumb;-Wformat;-Werror=format-security; +Id flags: -c;--target=armv7-none-linux-androideabi22 + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "CMakeCCompilerId.o" + +The C compiler identification is Clang, found in "/media/sf_share/gateway/build/CMakeFiles/3.20.6/CompilerIdC/CMakeCCompilerId.o" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ +Build flags: -g;-DANDROID;-fdata-sections;-ffunction-sections;-funwind-tables;-fstack-protector-strong;-no-canonical-prefixes;-D_FORTIFY_SOURCE=2;-march=armv7-a;-mthumb;-Wformat;-Werror=format-security;; +Id flags: -c;--target=armv7-none-linux-androideabi22 + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "CMakeCXXCompilerId.o" + +The CXX compiler identification is Clang, found in "/media/sf_share/gateway/build/CMakeFiles/3.20.6/CompilerIdCXX/CMakeCXXCompilerId.o" + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /media/sf_share/gateway/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_38aa5/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_38aa5.dir/build.make CMakeFiles/cmTC_38aa5.dir/build +make[1]: Entering directory `/media/sf_share/gateway/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c +Android (7155654, based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d) +Target: armv7-none-linux-android22 +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@mthumb +Candidate multilib: armv7-a;@march=armv7-a +Candidate multilib: armv7-a/thumb;@march=armv7-a@mthumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@march=armv7-a@mthumb + (in-process) + "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" -cc1 -triple thumbv7-none-linux-android22 -emit-obj -mrelax-all -mnoexecstack -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu generic -target-feature +soft-float-abi -target-feature +vfp2 -target-feature +vfp2sp -target-feature +vfp3 -target-feature +vfp3d16 -target-feature +vfp3d16sp -target-feature +vfp3sp -target-feature -fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature -vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature +fp64 -target-feature +d32 -target-feature +neon -target-feature -crypto -target-feature -fp16fml -target-abi aapcs-linux -mfloat-abi soft -fallow-half-arguments-and-returns -fno-split-dwarf-inlining -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -v -ffunction-sections -fdata-sections -resource-dir /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5 -dependency-file CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o.d -MT CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -sys-header-deps -D ANDROID -D _FORTIFY_SOURCE=2 -isysroot /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -Wformat -fdebug-compilation-dir /media/sf_share/gateway/build/CMakeFiles/CMakeTmp -ferror-limit 19 -stack-protector 2 -fno-signed-char -fgnuc-version=4.2.1 -o CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -x c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c +clang -cc1 version 11.0.5 based upon LLVM 11.0.5git default target x86_64-unknown-linux-gnu +ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include" +#include "..." search starts here: +#include <...> search starts here: + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include +End of search list. +Linking C executable cmTC_38aa5 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_38aa5.dir/link.txt --verbose=1 +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,--gc-sections -v CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -o cmTC_38aa5 +Android (7155654, based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d) +Target: armv7-none-linux-android22 +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@mthumb +Candidate multilib: armv7-a;@march=armv7-a +Candidate multilib: armv7-a/thumb;@march=armv7-a@mthumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@march=armv7-a@mthumb + "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -pie -z noexecstack -EL --warn-shared-textrel -z now -z relro -z max-page-size=4096 -X --hash-style=gnu --hash-style=both --enable-new-dtags --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_38aa5 /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22 -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib --exclude-libs libgcc.a --exclude-libs libgcc_real.a --exclude-libs libatomic.a --build-id=sha1 --no-rosegment --fatal-warnings --exclude-libs libunwind.a --no-undefined --gc-sections CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -lgcc -ldl -lc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o +make[1]: Leaving directory `/media/sf_share/gateway/build/CMakeFiles/CMakeTmp' + + + +Parsed C implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + end of search list found + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + implicit include dirs: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /media/sf_share/gateway/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_38aa5/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_38aa5.dir/build.make CMakeFiles/cmTC_38aa5.dir/build] + ignore line: [make[1]: Entering directory `/media/sf_share/gateway/build/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c] + ignore line: [Android (7155654 based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d)] + ignore line: [Target: armv7-none-linux-android22] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@mthumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@march=armv7-a] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + ignore line: [ (in-process)] + ignore line: [ "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" -cc1 -triple thumbv7-none-linux-android22 -emit-obj -mrelax-all -mnoexecstack -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu generic -target-feature +soft-float-abi -target-feature +vfp2 -target-feature +vfp2sp -target-feature +vfp3 -target-feature +vfp3d16 -target-feature +vfp3d16sp -target-feature +vfp3sp -target-feature -fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature -vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature +fp64 -target-feature +d32 -target-feature +neon -target-feature -crypto -target-feature -fp16fml -target-abi aapcs-linux -mfloat-abi soft -fallow-half-arguments-and-returns -fno-split-dwarf-inlining -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -v -ffunction-sections -fdata-sections -resource-dir /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5 -dependency-file CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o.d -MT CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -sys-header-deps -D ANDROID -D _FORTIFY_SOURCE=2 -isysroot /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -Wformat -fdebug-compilation-dir /media/sf_share/gateway/build/CMakeFiles/CMakeTmp -ferror-limit 19 -stack-protector 2 -fno-signed-char -fgnuc-version=4.2.1 -o CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -x c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c] + ignore line: [clang -cc1 version 11.0.5 based upon LLVM 11.0.5git default target x86_64-unknown-linux-gnu] + ignore line: [ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + ignore line: [End of search list.] + ignore line: [Linking C executable cmTC_38aa5] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_38aa5.dir/link.txt --verbose=1] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Wl --exclude-libs libgcc.a -Wl --exclude-libs libgcc_real.a -Wl --exclude-libs libatomic.a -static-libstdc++ -Wl --build-id=sha1 -Wl --no-rosegment -Wl --fatal-warnings -Wl --exclude-libs libunwind.a -Wl --no-undefined -Qunused-arguments -Wl --gc-sections -v CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -o cmTC_38aa5 ] + ignore line: [Android (7155654 based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d)] + ignore line: [Target: armv7-none-linux-android22] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@mthumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@march=armv7-a] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + link line: [ "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -pie -z noexecstack -EL --warn-shared-textrel -z now -z relro -z max-page-size=4096 -X --hash-style=gnu --hash-style=both --enable-new-dtags --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_38aa5 /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22 -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib --exclude-libs libgcc.a --exclude-libs libgcc_real.a --exclude-libs libatomic.a --build-id=sha1 --no-rosegment --fatal-warnings --exclude-libs libunwind.a --no-undefined --gc-sections CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o -lgcc -ldl -lc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] + arg [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld] ==> ignore + arg [--sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot] ==> ignore + arg [-pie] ==> ignore + arg [-znoexecstack] ==> ignore + arg [-EL] ==> ignore + arg [--warn-shared-textrel] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-zmax-page-size=4096] ==> ignore + arg [-X] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--hash-style=both] ==> ignore + arg [--enable-new-dtags] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [armelf_linux_eabi] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/system/bin/linker] ==> ignore + arg [-o] ==> ignore + arg [cmTC_38aa5] ==> ignore + arg [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + arg [--exclude-libs] ==> ignore + arg [libgcc.a] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libgcc_real.a] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libatomic.a] ==> ignore + arg [--build-id=sha1] ==> ignore + arg [--no-rosegment] ==> ignore + arg [--fatal-warnings] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libunwind.a] ==> ignore + arg [--no-undefined] ==> ignore + arg [--gc-sections] ==> ignore + arg [CMakeFiles/cmTC_38aa5.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + implicit libs: [gcc;dl;c;gcc;dl] + implicit objs: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] + implicit dirs: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + implicit fwks: [] + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /media/sf_share/gateway/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_e7425/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_e7425.dir/build.make CMakeFiles/cmTC_e7425.dir/build +make[1]: Entering directory `/media/sf_share/gateway/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o.d -o CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp +Android (7155654, based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d) +Target: armv7-none-linux-android22 +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@mthumb +Candidate multilib: armv7-a;@march=armv7-a +Candidate multilib: armv7-a/thumb;@march=armv7-a@mthumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@march=armv7-a@mthumb + (in-process) + "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++" -cc1 -triple thumbv7-none-linux-android22 -emit-obj -mrelax-all -mnoexecstack -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu generic -target-feature +soft-float-abi -target-feature +vfp2 -target-feature +vfp2sp -target-feature +vfp3 -target-feature +vfp3d16 -target-feature +vfp3d16sp -target-feature +vfp3sp -target-feature -fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature -vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature +fp64 -target-feature +d32 -target-feature +neon -target-feature -crypto -target-feature -fp16fml -target-abi aapcs-linux -mfloat-abi soft -fallow-half-arguments-and-returns -fno-split-dwarf-inlining -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -v -ffunction-sections -fdata-sections -resource-dir /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5 -dependency-file CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o.d -MT CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -sys-header-deps -D ANDROID -D _FORTIFY_SOURCE=2 -isysroot /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1 -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -Wformat -fdeprecated-macro -fdebug-compilation-dir /media/sf_share/gateway/build/CMakeFiles/CMakeTmp -ferror-limit 19 -stack-protector 2 -fno-signed-char -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -o CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -x c++ /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp +clang -cc1 version 11.0.5 based upon LLVM 11.0.5git default target x86_64-unknown-linux-gnu +ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include" +#include "..." search starts here: +#include <...> search starts here: + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1 + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include +End of search list. +Linking CXX executable cmTC_e7425 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e7425.dir/link.txt --verbose=1 +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,--gc-sections -v CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e7425 +Android (7155654, based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d) +Target: armv7-none-linux-android22 +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@mthumb +Candidate multilib: armv7-a;@march=armv7-a +Candidate multilib: armv7-a/thumb;@march=armv7-a@mthumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@march=armv7-a@mthumb + "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -pie -z noexecstack -EL --warn-shared-textrel -z now -z relro -z max-page-size=4096 -X --hash-style=gnu --hash-style=both --enable-new-dtags --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_e7425 /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22 -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib --exclude-libs libgcc.a --exclude-libs libgcc_real.a --exclude-libs libatomic.a --build-id=sha1 --no-rosegment --fatal-warnings --exclude-libs libunwind.a --no-undefined --gc-sections CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -Bstatic -lc++ -Bdynamic -lm -lgcc -ldl -lc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o +make[1]: Leaving directory `/media/sf_share/gateway/build/CMakeFiles/CMakeTmp' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1] + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] + add: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + end of search list found + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + implicit include dirs: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /media/sf_share/gateway/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_e7425/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_e7425.dir/build.make CMakeFiles/cmTC_e7425.dir/build] + ignore line: [make[1]: Entering directory `/media/sf_share/gateway/build/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o.d -o CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Android (7155654 based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d)] + ignore line: [Target: armv7-none-linux-android22] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@mthumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@march=armv7-a] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + ignore line: [ (in-process)] + ignore line: [ "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++" -cc1 -triple thumbv7-none-linux-android22 -emit-obj -mrelax-all -mnoexecstack -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu generic -target-feature +soft-float-abi -target-feature +vfp2 -target-feature +vfp2sp -target-feature +vfp3 -target-feature +vfp3d16 -target-feature +vfp3d16sp -target-feature +vfp3sp -target-feature -fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature -vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature +fp64 -target-feature +d32 -target-feature +neon -target-feature -crypto -target-feature -fp16fml -target-abi aapcs-linux -mfloat-abi soft -fallow-half-arguments-and-returns -fno-split-dwarf-inlining -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -v -ffunction-sections -fdata-sections -resource-dir /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5 -dependency-file CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o.d -MT CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -sys-header-deps -D ANDROID -D _FORTIFY_SOURCE=2 -isysroot /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1 -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -Wformat -fdeprecated-macro -fdebug-compilation-dir /media/sf_share/gateway/build/CMakeFiles/CMakeTmp -ferror-limit 19 -stack-protector 2 -fno-signed-char -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -o CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -x c++ /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [clang -cc1 version 11.0.5 based upon LLVM 11.0.5git default target x86_64-unknown-linux-gnu] + ignore line: [ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include] + ignore line: [End of search list.] + ignore line: [Linking CXX executable cmTC_e7425] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e7425.dir/link.txt --verbose=1] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Wl --exclude-libs libgcc.a -Wl --exclude-libs libgcc_real.a -Wl --exclude-libs libatomic.a -static-libstdc++ -Wl --build-id=sha1 -Wl --no-rosegment -Wl --fatal-warnings -Wl --exclude-libs libunwind.a -Wl --no-undefined -Qunused-arguments -Wl --gc-sections -v CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e7425 ] + ignore line: [Android (7155654 based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d)] + ignore line: [Target: armv7-none-linux-android22] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@mthumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@march=armv7-a] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@march=armv7-a@mthumb] + link line: [ "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -pie -z noexecstack -EL --warn-shared-textrel -z now -z relro -z max-page-size=4096 -X --hash-style=gnu --hash-style=both --enable-new-dtags --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_e7425 /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22 -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib --exclude-libs libgcc.a --exclude-libs libgcc_real.a --exclude-libs libatomic.a --build-id=sha1 --no-rosegment --fatal-warnings --exclude-libs libunwind.a --no-undefined --gc-sections CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o -Bstatic -lc++ -Bdynamic -lm -lgcc -ldl -lc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] + arg [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/ld] ==> ignore + arg [--sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot] ==> ignore + arg [-pie] ==> ignore + arg [-znoexecstack] ==> ignore + arg [-EL] ==> ignore + arg [--warn-shared-textrel] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-zmax-page-size=4096] ==> ignore + arg [-X] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--hash-style=both] ==> ignore + arg [--enable-new-dtags] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [armelf_linux_eabi] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/system/bin/linker] ==> ignore + arg [-o] ==> ignore + arg [cmTC_e7425] ==> ignore + arg [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + arg [--exclude-libs] ==> ignore + arg [libgcc.a] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libgcc_real.a] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libatomic.a] ==> ignore + arg [--build-id=sha1] ==> ignore + arg [--no-rosegment] ==> ignore + arg [--fatal-warnings] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libunwind.a] ==> ignore + arg [--no-undefined] ==> ignore + arg [--gc-sections] ==> ignore + arg [CMakeFiles/cmTC_e7425.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-Bstatic] ==> ignore + arg [-lc++] ==> lib [c++] + arg [-Bdynamic] ==> ignore + arg [-lm] ==> lib [m] + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/../lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/../../lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + implicit libs: [c++;m;gcc;dl;c;gcc;dl] + implicit objs: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtbegin_dynamic.o;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/crtend_android.o] + implicit dirs: [/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib] + implicit fwks: [] + + diff --git a/build/CMakeFiles/Makefile.cmake b/build/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..eb7ca24 --- /dev/null +++ b/build/CMakeFiles/Makefile.cmake @@ -0,0 +1,135 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "/home/vboxuser/tools/ndk/android-ndk-r22b/build/cmake/android.toolchain.cmake" + "/home/vboxuser/tools/ndk/android-ndk-r22b/build/cmake/platforms.cmake" + "../CMakeLists.txt" + "CMakeFiles/3.20.6/CMakeCCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.20.6/CMakeSystem.cmake" + "../unit_test/CMakeLists.txt" + "../unit_test/test/CMakeLists.txt" + "../unit_test/test/hello/CMakeLists.txt" + "/usr/local/share/cmake-3.20/Modules/CMakeCCompiler.cmake.in" + "/usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c" + "/usr/local/share/cmake-3.20/Modules/CMakeCInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeCXXCompiler.cmake.in" + "/usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp" + "/usr/local/share/cmake-3.20/Modules/CMakeCXXInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeCompilerIdDetection.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCXXCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCompilerId.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineSystem.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeFindBinUtils.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeGenericSystem.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeInitializeConfigs.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeLanguageInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeParseImplicitIncludeInfo.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeParseLibraryArchitecture.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeSystem.cmake.in" + "/usr/local/share/cmake-3.20/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeTestCCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeTestCXXCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeTestCompilerCommon.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeUnixFindMake.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-C.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-CXX.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-FindBinUtils.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/GNU-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/GNU.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/NVHPC-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/XLClang-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Internal/FeatureTesting.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Clang-C.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Clang-CXX.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Clang.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Determine-C.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Determine-CXX.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Determine.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Initialize.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android/Determine-Compiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Linux.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.20.6/CMakeSystem.cmake" + "CMakeFiles/3.20.6/CMakeCCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCXXCompiler.cmake" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "unit_test/CMakeFiles/CMakeDirectoryInformation.cmake" + "unit_test/test/CMakeFiles/CMakeDirectoryInformation.cmake" + "unit_test/test/hello/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "unit_test/test/hello/CMakeFiles/main.dir/DependInfo.cmake" + ) diff --git a/build/CMakeFiles/Makefile2 b/build/CMakeFiles/Makefile2 new file mode 100644 index 0000000..859f1e7 --- /dev/null +++ b/build/CMakeFiles/Makefile2 @@ -0,0 +1,157 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /media/sf_share/gateway + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /media/sf_share/gateway/build + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: unit_test/all +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: unit_test/preinstall +.PHONY : preinstall + +# The main recursive "clean" target. +clean: unit_test/clean +.PHONY : clean + +#============================================================================= +# Directory level rules for directory unit_test + +# Recursive "all" directory target. +unit_test/all: unit_test/test/all +.PHONY : unit_test/all + +# Recursive "preinstall" directory target. +unit_test/preinstall: unit_test/test/preinstall +.PHONY : unit_test/preinstall + +# Recursive "clean" directory target. +unit_test/clean: unit_test/test/clean +.PHONY : unit_test/clean + +#============================================================================= +# Directory level rules for directory unit_test/test + +# Recursive "all" directory target. +unit_test/test/all: unit_test/test/hello/all +.PHONY : unit_test/test/all + +# Recursive "preinstall" directory target. +unit_test/test/preinstall: unit_test/test/hello/preinstall +.PHONY : unit_test/test/preinstall + +# Recursive "clean" directory target. +unit_test/test/clean: unit_test/test/hello/clean +.PHONY : unit_test/test/clean + +#============================================================================= +# Directory level rules for directory unit_test/test/hello + +# Recursive "all" directory target. +unit_test/test/hello/all: unit_test/test/hello/CMakeFiles/main.dir/all +.PHONY : unit_test/test/hello/all + +# Recursive "preinstall" directory target. +unit_test/test/hello/preinstall: +.PHONY : unit_test/test/hello/preinstall + +# Recursive "clean" directory target. +unit_test/test/hello/clean: unit_test/test/hello/CMakeFiles/main.dir/clean +.PHONY : unit_test/test/hello/clean + +#============================================================================= +# Target rules for target unit_test/test/hello/CMakeFiles/main.dir + +# All Build rule for target. +unit_test/test/hello/CMakeFiles/main.dir/all: + $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/depend + $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/media/sf_share/gateway/build/CMakeFiles --progress-num=1,2 "Built target main" +.PHONY : unit_test/test/hello/CMakeFiles/main.dir/all + +# Build rule for subdir invocation for target. +unit_test/test/hello/CMakeFiles/main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles 2 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/hello/CMakeFiles/main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles 0 +.PHONY : unit_test/test/hello/CMakeFiles/main.dir/rule + +# Convenience name for target. +main: unit_test/test/hello/CMakeFiles/main.dir/rule +.PHONY : main + +# clean rule for target. +unit_test/test/hello/CMakeFiles/main.dir/clean: + $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/clean +.PHONY : unit_test/test/hello/CMakeFiles/main.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/CMakeFiles/TargetDirectories.txt b/build/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..7d9d94e --- /dev/null +++ b/build/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,25 @@ +/media/sf_share/gateway/build/CMakeFiles/install/strip.dir +/media/sf_share/gateway/build/CMakeFiles/install/local.dir +/media/sf_share/gateway/build/CMakeFiles/edit_cache.dir +/media/sf_share/gateway/build/CMakeFiles/rebuild_cache.dir +/media/sf_share/gateway/build/CMakeFiles/list_install_components.dir +/media/sf_share/gateway/build/CMakeFiles/install.dir +/media/sf_share/gateway/build/unit_test/CMakeFiles/install/strip.dir +/media/sf_share/gateway/build/unit_test/CMakeFiles/install/local.dir +/media/sf_share/gateway/build/unit_test/CMakeFiles/edit_cache.dir +/media/sf_share/gateway/build/unit_test/CMakeFiles/rebuild_cache.dir +/media/sf_share/gateway/build/unit_test/CMakeFiles/list_install_components.dir +/media/sf_share/gateway/build/unit_test/CMakeFiles/install.dir +/media/sf_share/gateway/build/unit_test/test/CMakeFiles/install/strip.dir +/media/sf_share/gateway/build/unit_test/test/CMakeFiles/install/local.dir +/media/sf_share/gateway/build/unit_test/test/CMakeFiles/edit_cache.dir +/media/sf_share/gateway/build/unit_test/test/CMakeFiles/rebuild_cache.dir +/media/sf_share/gateway/build/unit_test/test/CMakeFiles/list_install_components.dir +/media/sf_share/gateway/build/unit_test/test/CMakeFiles/install.dir +/media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/install/strip.dir +/media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/install/local.dir +/media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/main.dir +/media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/edit_cache.dir +/media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/rebuild_cache.dir +/media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/install.dir +/media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/list_install_components.dir diff --git a/build/CMakeFiles/cmake.check_cache b/build/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/CMakeFiles/progress.marks b/build/CMakeFiles/progress.marks new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +2 diff --git a/build/Makefile b/build/Makefile new file mode 100644 index 0000000..427dec1 --- /dev/null +++ b/build/Makefile @@ -0,0 +1,203 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /media/sf_share/gateway + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /media/sf_share/gateway/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles /media/sf_share/gateway/build//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named main + +# Build rule for target. +main: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 main +.PHONY : main + +# fast build rule for target. +main/fast: + $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/build +.PHONY : main/fast + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... main" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/cmake_install.cmake b/build/cmake_install.cmake new file mode 100644 index 0000000..90ae466 --- /dev/null +++ b/build/cmake_install.cmake @@ -0,0 +1,59 @@ +# Install script for directory: /media/sf_share/gateway + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for the subdirectory. + include("/media/sf_share/gateway/build/unit_test/cmake_install.cmake") +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/media/sf_share/gateway/build/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/build/install_manifest.txt b/build/install_manifest.txt new file mode 100644 index 0000000..8aefeef --- /dev/null +++ b/build/install_manifest.txt @@ -0,0 +1 @@ +/media/sf_share/gateway/build/../bin/main \ No newline at end of file diff --git a/build/unit_test/CMakeFiles/CMakeDirectoryInformation.cmake b/build/unit_test/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..c8078c8 --- /dev/null +++ b/build/unit_test/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/media/sf_share/gateway") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/media/sf_share/gateway/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/unit_test/CMakeFiles/progress.marks b/build/unit_test/CMakeFiles/progress.marks new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/build/unit_test/CMakeFiles/progress.marks @@ -0,0 +1 @@ +2 diff --git a/build/unit_test/cmake_install.cmake b/build/unit_test/cmake_install.cmake new file mode 100644 index 0000000..634a840 --- /dev/null +++ b/build/unit_test/cmake_install.cmake @@ -0,0 +1,49 @@ +# Install script for directory: /media/sf_share/gateway/unit_test + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for the subdirectory. + include("/media/sf_share/gateway/build/unit_test/test/cmake_install.cmake") +endif() + diff --git a/build/unit_test/test/CMakeFiles/CMakeDirectoryInformation.cmake b/build/unit_test/test/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..c8078c8 --- /dev/null +++ b/build/unit_test/test/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/media/sf_share/gateway") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/media/sf_share/gateway/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/unit_test/test/CMakeFiles/progress.marks b/build/unit_test/test/CMakeFiles/progress.marks new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/build/unit_test/test/CMakeFiles/progress.marks @@ -0,0 +1 @@ +2 diff --git a/build/unit_test/test/Makefile b/build/unit_test/test/Makefile new file mode 100644 index 0000000..ce7b95d --- /dev/null +++ b/build/unit_test/test/Makefile @@ -0,0 +1,189 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /media/sf_share/gateway + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /media/sf_share/gateway/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# The main all target +all: cmake_check_build_system + cd /media/sf_share/gateway/build && $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles /media/sf_share/gateway/build/unit_test/test//CMakeFiles/progress.marks + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/all + $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /media/sf_share/gateway/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /media/sf_share/gateway/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/unit_test/test/cmake_install.cmake b/build/unit_test/test/cmake_install.cmake new file mode 100644 index 0000000..7d7c150 --- /dev/null +++ b/build/unit_test/test/cmake_install.cmake @@ -0,0 +1,49 @@ +# Install script for directory: /media/sf_share/gateway/unit_test/test + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for the subdirectory. + include("/media/sf_share/gateway/build/unit_test/test/hello/cmake_install.cmake") +endif() + diff --git a/build/unit_test/test/hello/CMakeFiles/CMakeDirectoryInformation.cmake b/build/unit_test/test/hello/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..c8078c8 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/media/sf_share/gateway") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/media/sf_share/gateway/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/DependInfo.cmake b/build/unit_test/test/hello/CMakeFiles/main.dir/DependInfo.cmake new file mode 100644 index 0000000..5e8d24d --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/DependInfo.cmake @@ -0,0 +1,19 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/media/sf_share/gateway/unit_test/test/hello/main.cc" "unit_test/test/hello/CMakeFiles/main.dir/main.cc.o" "gcc" "unit_test/test/hello/CMakeFiles/main.dir/main.cc.o.d" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/build.make b/build/unit_test/test/hello/CMakeFiles/main.dir/build.make new file mode 100644 index 0000000..7df939d --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/build.make @@ -0,0 +1,110 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /media/sf_share/gateway + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /media/sf_share/gateway/build + +# Include any dependencies generated for this target. +include unit_test/test/hello/CMakeFiles/main.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.make + +# Include the progress variables for this target. +include unit_test/test/hello/CMakeFiles/main.dir/progress.make + +# Include the compile flags for this target's objects. +include unit_test/test/hello/CMakeFiles/main.dir/flags.make + +unit_test/test/hello/CMakeFiles/main.dir/main.cc.o: unit_test/test/hello/CMakeFiles/main.dir/flags.make +unit_test/test/hello/CMakeFiles/main.dir/main.cc.o: ../unit_test/test/hello/main.cc +unit_test/test/hello/CMakeFiles/main.dir/main.cc.o: unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/media/sf_share/gateway/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object unit_test/test/hello/CMakeFiles/main.dir/main.cc.o" + cd /media/sf_share/gateway/build/unit_test/test/hello && /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT unit_test/test/hello/CMakeFiles/main.dir/main.cc.o -MF CMakeFiles/main.dir/main.cc.o.d -o CMakeFiles/main.dir/main.cc.o -c /media/sf_share/gateway/unit_test/test/hello/main.cc + +unit_test/test/hello/CMakeFiles/main.dir/main.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/main.dir/main.cc.i" + cd /media/sf_share/gateway/build/unit_test/test/hello && /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /media/sf_share/gateway/unit_test/test/hello/main.cc > CMakeFiles/main.dir/main.cc.i + +unit_test/test/hello/CMakeFiles/main.dir/main.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/main.cc.s" + cd /media/sf_share/gateway/build/unit_test/test/hello && /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /media/sf_share/gateway/unit_test/test/hello/main.cc -o CMakeFiles/main.dir/main.cc.s + +# Object files for target main +main_OBJECTS = \ +"CMakeFiles/main.dir/main.cc.o" + +# External object files for target main +main_EXTERNAL_OBJECTS = + +unit_test/test/hello/main: unit_test/test/hello/CMakeFiles/main.dir/main.cc.o +unit_test/test/hello/main: unit_test/test/hello/CMakeFiles/main.dir/build.make +unit_test/test/hello/main: unit_test/test/hello/CMakeFiles/main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/media/sf_share/gateway/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable main" + cd /media/sf_share/gateway/build/unit_test/test/hello && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unit_test/test/hello/CMakeFiles/main.dir/build: unit_test/test/hello/main +.PHONY : unit_test/test/hello/CMakeFiles/main.dir/build + +unit_test/test/hello/CMakeFiles/main.dir/clean: + cd /media/sf_share/gateway/build/unit_test/test/hello && $(CMAKE_COMMAND) -P CMakeFiles/main.dir/cmake_clean.cmake +.PHONY : unit_test/test/hello/CMakeFiles/main.dir/clean + +unit_test/test/hello/CMakeFiles/main.dir/depend: + cd /media/sf_share/gateway/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /media/sf_share/gateway /media/sf_share/gateway/unit_test/test/hello /media/sf_share/gateway/build /media/sf_share/gateway/build/unit_test/test/hello /media/sf_share/gateway/build/unit_test/test/hello/CMakeFiles/main.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unit_test/test/hello/CMakeFiles/main.dir/depend + diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/cmake_clean.cmake b/build/unit_test/test/hello/CMakeFiles/main.dir/cmake_clean.cmake new file mode 100644 index 0000000..bc87d03 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/main.dir/main.cc.o" + "CMakeFiles/main.dir/main.cc.o.d" + "main" + "main.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.internal b/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.internal new file mode 100644 index 0000000..b8d99b6 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.internal @@ -0,0 +1,162 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +unit_test/test/hello/CMakeFiles/main.dir/main.cc.o + /media/sf_share/gateway/unit_test/test/hello/main.cc + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iostream + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__config + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/features.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/cdefs.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/versioning.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/api-level.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/get_device_api_level_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/ndk-version.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/pthread.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ios + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iosfwd + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wchar.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wchar.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wchar.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdio.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdio.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stddef.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stddef.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/__stddef_max_align_t.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__nullptr + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdint.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdint.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdint.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wchar_limits.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/int-ll64.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/bitsperlong.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/posix_types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/stddef.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler_types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/posix_types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/pthread_types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdarg.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/seek_constants.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/struct_file.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdio.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/time.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/time.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time_types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/select.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/signal.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/signal_types.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/limits.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/limits.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/float.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/float.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/limits.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/posix_limits.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/signal.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/signal.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/signal-defs.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/siginfo.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/timespec.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/ucontext.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/user.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_signal_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/xlocale.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/mbstate_t.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wctype.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__locale + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string_view + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__string + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/algorithm + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/initializer_list + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstddef + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/version + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/type_traits + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstring + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/string.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/strcasecmp.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/strings.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/strings.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/string.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/utility + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__tuple + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdint + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__debug + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/memory + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/typeinfo + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/exception + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdlib + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdlib.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/stdlib.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdlib.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/alloca.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wait.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/wait.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/malloc.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdlib.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_stdlib_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/math.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/math.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/math.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__undef_macros + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/new + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iterator + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__functional_base + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/tuple + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdexcept + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/atomic + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__threading_support + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/chrono + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctime + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ratio + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/climits + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/errno.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/errno.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/errno.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/errno.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno-base.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_errno_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sched.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/sched.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/semaphore.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bit + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdio + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwchar + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwctype + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cctype + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctype.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ctype.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/ctype_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wctype.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wctype.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wctype.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/mutex + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__mutex_base + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/system_error + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__errc + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cerrno + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/locale.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/locale.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/support/android/locale_bionic.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/streambuf + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/istream + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ostream + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdarg + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bsd_locale_fallbacks.h + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bitset + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bit_reference + diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.make b/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.make new file mode 100644 index 0000000..1a61a60 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.make @@ -0,0 +1,475 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +unit_test/test/hello/CMakeFiles/main.dir/main.cc.o: ../unit_test/test/hello/main.cc \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iostream \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__config \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/features.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/cdefs.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/versioning.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/api-level.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/get_device_api_level_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/ndk-version.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/pthread.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ios \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iosfwd \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/__stddef_max_align_t.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__nullptr \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wchar_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/int-ll64.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/pthread_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdarg.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/seek_constants.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/struct_file.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/select.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/signal_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/float.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/float.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/posix_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/signal-defs.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/timespec.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/ucontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/user.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_signal_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/xlocale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/mbstate_t.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__locale \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string_view \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__string \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/algorithm \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/initializer_list \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstddef \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/version \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/type_traits \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstring \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/strcasecmp.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/strings.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/strings.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/utility \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__tuple \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdint \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__debug \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/memory \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/typeinfo \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/exception \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdlib \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/alloca.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wait.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/wait.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/malloc.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_stdlib_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/math.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/math.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/math.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__undef_macros \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/new \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iterator \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__functional_base \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/tuple \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdexcept \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/atomic \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__threading_support \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/chrono \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctime \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ratio \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/climits \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno-base.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_errno_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/semaphore.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bit \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdio \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwchar \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwctype \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cctype \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/ctype_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/mutex \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__mutex_base \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/system_error \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__errc \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cerrno \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/support/android/locale_bionic.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/streambuf \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/istream \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ostream \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdarg \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bsd_locale_fallbacks.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bitset \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bit_reference + + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bsd_locale_fallbacks.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdarg: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/locale.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cerrno: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__errc: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__mutex_base: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwctype: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdio: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/sched.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/ctype_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno-base.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bit: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_errno_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cctype: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/climits: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ratio: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctime: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__threading_support: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/atomic: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdexcept: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/tuple: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ostream: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__functional_base: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/mutex: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/new: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__undef_macros: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/system_error: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/math.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/math.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/malloc.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/wait.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/float.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/bitsperlong.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string_view: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/string.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/pthread_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/posix_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bit_reference: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/features.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/posix_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdint.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdint.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wchar.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wchar_limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_stdlib_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wait.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/pthread.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/versioning.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/posix_limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stddef.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdarg.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iostream: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/struct_file.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/stddef.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/api-level.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/chrono: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__config: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/ndk-version.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdlib.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwchar: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__nullptr: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/float.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_signal_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iosfwd: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/math.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wchar.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/time.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/stdlib.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/time.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/signal.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wchar.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/support/android/locale_bionic.h: + +../unit_test/test/hello/main.cc: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/__stddef_max_align_t.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ios: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/select.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/locale.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdio.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdio.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/signal_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bitset: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sched.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/initializer_list: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/signal.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/signal-defs.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/strings.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdlib.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/siginfo.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdint.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/timespec.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/utility: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/istream: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/cdefs.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/exception: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/ucontext.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/user.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/alloca.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/xlocale.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/mbstate_t.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__locale: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/get_device_api_level_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__string: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/streambuf: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/int-ll64.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/algorithm: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/semaphore.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stddef.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstddef: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/version: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/typeinfo: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/string.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/type_traits: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/memory: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/seek_constants.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstring: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/strcasecmp.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/strings.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdio.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__tuple: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iterator: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/signal.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/types.h: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdint: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__debug: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdlib: + +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdlib.h: diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.ts b/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.ts new file mode 100644 index 0000000..a3467f4 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for main. diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/depend.make b/build/unit_test/test/hello/CMakeFiles/main.dir/depend.make new file mode 100644 index 0000000..7e75fee --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for main. +# This may be replaced when dependencies are built. diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/flags.make b/build/unit_test/test/hello/CMakeFiles/main.dir/flags.make new file mode 100644 index 0000000..98acaa4 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# compile CXX with /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ +CXX_DEFINES = + +CXX_INCLUDES = + +CXX_FLAGS = -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -fPIE -Wall -g + diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/link.txt b/build/unit_test/test/hello/CMakeFiles/main.dir/link.txt new file mode 100644 index 0000000..bde13db --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/link.txt @@ -0,0 +1 @@ +/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi22 --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,--gc-sections CMakeFiles/main.dir/main.cc.o -o main -latomic -lm diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/main.cc.o b/build/unit_test/test/hello/CMakeFiles/main.dir/main.cc.o new file mode 100644 index 0000000..bc02693 Binary files /dev/null and b/build/unit_test/test/hello/CMakeFiles/main.dir/main.cc.o differ diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/main.cc.o.d b/build/unit_test/test/hello/CMakeFiles/main.dir/main.cc.o.d new file mode 100644 index 0000000..b75efed --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/main.cc.o.d @@ -0,0 +1,158 @@ +unit_test/test/hello/CMakeFiles/main.dir/main.cc.o: \ + /media/sf_share/gateway/unit_test/test/hello/main.cc \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iostream \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__config \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/features.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/cdefs.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/versioning.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/api-level.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/get_device_api_level_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/ndk-version.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/pthread.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ios \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iosfwd \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/__stddef_max_align_t.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__nullptr \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wchar_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/int-ll64.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/compiler.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/pthread_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/stdarg.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/seek_constants.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/struct_file.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/time_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/select.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/signal_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/float.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/11.0.5/include/float.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/posix_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/signal-defs.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/timespec.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/ucontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sys/user.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_signal_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/xlocale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/mbstate_t.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__locale \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string_view \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__string \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/algorithm \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/initializer_list \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstddef \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/version \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/type_traits \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstring \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/strcasecmp.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/strings.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/strings.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/utility \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__tuple \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdint \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__debug \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/memory \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/typeinfo \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/exception \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdlib \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/alloca.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/wait.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/wait.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/malloc.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/fortify/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_stdlib_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/math.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/math.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/math.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/limits \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__undef_macros \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/new \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/iterator \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__functional_base \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/tuple \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/stdexcept \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/atomic \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__threading_support \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/chrono \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctime \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ratio \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/climits \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi/asm/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/asm-generic/errno-base.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/legacy_errno_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/linux/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/semaphore.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/functional \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bit \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdio \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwchar \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cwctype \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cctype \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/bits/ctype_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/mutex \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__mutex_base \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/system_error \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__errc \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cerrno \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/support/android/locale_bionic.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/streambuf \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/istream \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/ostream \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/locale \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cstdarg \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bsd_locale_fallbacks.h \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/bitset \ + /home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/__bit_reference diff --git a/build/unit_test/test/hello/CMakeFiles/main.dir/progress.make b/build/unit_test/test/hello/CMakeFiles/main.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/build/unit_test/test/hello/CMakeFiles/progress.marks b/build/unit_test/test/hello/CMakeFiles/progress.marks new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/build/unit_test/test/hello/CMakeFiles/progress.marks @@ -0,0 +1 @@ +2 diff --git a/build/unit_test/test/hello/Makefile b/build/unit_test/test/hello/Makefile new file mode 100644 index 0000000..13f79dc --- /dev/null +++ b/build/unit_test/test/hello/Makefile @@ -0,0 +1,231 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /media/sf_share/gateway + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /media/sf_share/gateway/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# The main all target +all: cmake_check_build_system + cd /media/sf_share/gateway/build && $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles /media/sf_share/gateway/build/unit_test/test/hello//CMakeFiles/progress.marks + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/hello/all + $(CMAKE_COMMAND) -E cmake_progress_start /media/sf_share/gateway/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/hello/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/hello/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/hello/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /media/sf_share/gateway/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +unit_test/test/hello/CMakeFiles/main.dir/rule: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 unit_test/test/hello/CMakeFiles/main.dir/rule +.PHONY : unit_test/test/hello/CMakeFiles/main.dir/rule + +# Convenience name for target. +main: unit_test/test/hello/CMakeFiles/main.dir/rule +.PHONY : main + +# fast build rule for target. +main/fast: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/build +.PHONY : main/fast + +main.o: main.cc.o +.PHONY : main.o + +# target to build an object file +main.cc.o: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/main.cc.o +.PHONY : main.cc.o + +main.i: main.cc.i +.PHONY : main.i + +# target to preprocess a source file +main.cc.i: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/main.cc.i +.PHONY : main.cc.i + +main.s: main.cc.s +.PHONY : main.s + +# target to generate assembly for a file +main.cc.s: + cd /media/sf_share/gateway/build && $(MAKE) $(MAKESILENT) -f unit_test/test/hello/CMakeFiles/main.dir/build.make unit_test/test/hello/CMakeFiles/main.dir/main.cc.s +.PHONY : main.cc.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... main" + @echo "... main.o" + @echo "... main.i" + @echo "... main.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /media/sf_share/gateway/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/unit_test/test/hello/cmake_install.cmake b/build/unit_test/test/hello/cmake_install.cmake new file mode 100644 index 0000000..d8faf61 --- /dev/null +++ b/build/unit_test/test/hello/cmake_install.cmake @@ -0,0 +1,68 @@ +# Install script for directory: /media/sf_share/gateway/unit_test/test/hello + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump") +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}/media/sf_share/gateway/build/../bin/main" AND + NOT IS_SYMLINK "$ENV{DESTDIR}/media/sf_share/gateway/build/../bin/main") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}/media/sf_share/gateway/build/../bin/main" + RPATH "") + endif() + list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES + "/media/sf_share/gateway/build/../bin/main") + if(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION) + message(WARNING "ABSOLUTE path INSTALL DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + if(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION) + message(FATAL_ERROR "ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() +file(INSTALL DESTINATION "/media/sf_share/gateway/build/../bin" TYPE EXECUTABLE FILES "/media/sf_share/gateway/build/unit_test/test/hello/main") + if(EXISTS "$ENV{DESTDIR}/media/sf_share/gateway/build/../bin/main" AND + NOT IS_SYMLINK "$ENV{DESTDIR}/media/sf_share/gateway/build/../bin/main") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/home/vboxuser/tools/ndk/android-ndk-r22b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip" "$ENV{DESTDIR}/media/sf_share/gateway/build/../bin/main") + endif() + endif() +endif() + diff --git a/build/unit_test/test/hello/main b/build/unit_test/test/hello/main new file mode 100644 index 0000000..9c080be Binary files /dev/null and b/build/unit_test/test/hello/main differ diff --git a/build/unit_test/test/hello/main.tmp6235896 b/build/unit_test/test/hello/main.tmp6235896 new file mode 100644 index 0000000..a6b6234 Binary files /dev/null and b/build/unit_test/test/hello/main.tmp6235896 differ diff --git a/build/unit_test/test/hello/main.tmpece8a3f b/build/unit_test/test/hello/main.tmpece8a3f new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/build/unit_test/test/hello/main.tmpece8a3f differ diff --git a/buildcfg b/buildcfg new file mode 100644 index 0000000..e69de29 diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000..e69de29 diff --git a/log/README.md b/log/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/log/README.md @@ -0,0 +1 @@ + diff --git a/script/README.md b/script/README.md new file mode 100644 index 0000000..e69de29 diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/third_lib/README.md b/third_lib/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/third_lib/README.md @@ -0,0 +1 @@ + diff --git a/third_lib/jsoncpp/json/allocator.h b/third_lib/jsoncpp/json/allocator.h new file mode 100644 index 0000000..0f5c224 --- /dev/null +++ b/third_lib/jsoncpp/json/allocator.h @@ -0,0 +1,89 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_ALLOCATOR_H_INCLUDED +#define JSON_ALLOCATOR_H_INCLUDED + +#include +#include + +#pragma pack(push, 8) + +namespace Json { +template class SecureAllocator { +public: + // Type definitions + using value_type = T; + using pointer = T*; + using const_pointer = const T*; + using reference = T&; + using const_reference = const T&; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; + + /** + * Allocate memory for N items using the standard allocator. + */ + pointer allocate(size_type n) { + // allocate using "global operator new" + return static_cast(::operator new(n * sizeof(T))); + } + + /** + * Release memory which was allocated for N items at pointer P. + * + * The memory block is filled with zeroes before being released. + * The pointer argument is tagged as "volatile" to prevent the + * compiler optimizing out this critical step. + */ + void deallocate(volatile pointer p, size_type n) { + std::memset(p, 0, n * sizeof(T)); + // free using "global operator delete" + ::operator delete(p); + } + + /** + * Construct an item in-place at pointer P. + */ + template void construct(pointer p, Args&&... args) { + // construct using "placement new" and "perfect forwarding" + ::new (static_cast(p)) T(std::forward(args)...); + } + + size_type max_size() const { return size_t(-1) / sizeof(T); } + + pointer address(reference x) const { return std::addressof(x); } + + const_pointer address(const_reference x) const { return std::addressof(x); } + + /** + * Destroy an item in-place at pointer P. + */ + void destroy(pointer p) { + // destroy using "explicit destructor" + p->~T(); + } + + // Boilerplate + SecureAllocator() {} + template SecureAllocator(const SecureAllocator&) {} + template struct rebind { using other = SecureAllocator; }; +}; + +template +bool operator==(const SecureAllocator&, const SecureAllocator&) { + return true; +} + +template +bool operator!=(const SecureAllocator&, const SecureAllocator&) { + return false; +} + +} // namespace Json + +#pragma pack(pop) + +#endif // JSON_ALLOCATOR_H_INCLUDED diff --git a/third_lib/jsoncpp/json/assertions.h b/third_lib/jsoncpp/json/assertions.h new file mode 100644 index 0000000..666fa7f --- /dev/null +++ b/third_lib/jsoncpp/json/assertions.h @@ -0,0 +1,61 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_ASSERTIONS_H_INCLUDED +#define JSON_ASSERTIONS_H_INCLUDED + +#include +#include + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +/** It should not be possible for a maliciously designed file to + * cause an abort() or seg-fault, so these macros are used only + * for pre-condition violations and internal logic errors. + */ +#if JSON_USE_EXCEPTION + +// @todo <= add detail about condition in exception +#define JSON_ASSERT(condition) \ + do { \ + if (!(condition)) { \ + Json::throwLogicError("assert json failed"); \ + } \ + } while (0) + +#define JSON_FAIL_MESSAGE(message) \ + do { \ + OStringStream oss; \ + oss << message; \ + Json::throwLogicError(oss.str()); \ + abort(); \ + } while (0) + +#else // JSON_USE_EXCEPTION + +#define JSON_ASSERT(condition) assert(condition) + +// The call to assert() will show the failure message in debug builds. In +// release builds we abort, for a core-dump or debugger. +#define JSON_FAIL_MESSAGE(message) \ + { \ + OStringStream oss; \ + oss << message; \ + assert(false && oss.str().c_str()); \ + abort(); \ + } + +#endif + +#define JSON_ASSERT_MESSAGE(condition, message) \ + do { \ + if (!(condition)) { \ + JSON_FAIL_MESSAGE(message); \ + } \ + } while (0) + +#endif // JSON_ASSERTIONS_H_INCLUDED diff --git a/third_lib/jsoncpp/json/config.h b/third_lib/jsoncpp/json/config.h new file mode 100644 index 0000000..6359273 --- /dev/null +++ b/third_lib/jsoncpp/json/config.h @@ -0,0 +1,150 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED +#include +#include +#include +#include +#include +#include +#include +#include + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +// Temporary, tracked for removal with issue #982. +#ifndef JSON_USE_NULLREF +#define JSON_USE_NULLREF 1 +#endif + +/// If defined, indicates that the source file is amalgamated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgamated header. +// #define JSON_IS_AMALGAMATION + +// Export macros for DLL visibility +#if defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#elif defined(__GNUC__) || defined(__clang__) +#define JSON_API __attribute__((visibility("default"))) +#endif // if defined(_MSC_VER) + +#elif defined(JSON_DLL) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_DLL_BUILD + +#if !defined(JSON_API) +#define JSON_API +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1800 +#error \ + "ERROR: Visual Studio 12 (2013) with _MSC_VER=1800 is the oldest supported compiler with sufficient C++11 capabilities" +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1900 +// As recommended at +// https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 +extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size, + const char* format, ...); +#define jsoncpp_snprintf msvc_pre1900_c99_snprintf +#else +#define jsoncpp_snprintf std::snprintf +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +// JSONCPP_OVERRIDE is maintained for backwards compatibility of external tools. +// C++11 should be used directly in JSONCPP. +#define JSONCPP_OVERRIDE override + +#ifdef __clang__ +#if __has_extension(attribute_deprecated_with_message) +#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) +#endif +#elif defined(__GNUC__) // not clang (gcc comes later since clang emulates gcc) +#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message))) +#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +#define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +#endif // GNUC version +#elif defined(_MSC_VER) // MSVC (after clang because clang on Windows emulates + // MSVC) +#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +#endif // __clang__ || __GNUC__ || _MSC_VER + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6)) +#define JSON_USE_INT64_DOUBLE_CONVERSION 1 +#endif + +#if !defined(JSON_IS_AMALGAMATION) + +#include "allocator.h" +#include "version.h" + +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { +using Int = int; +using UInt = unsigned int; +#if defined(JSON_NO_INT64) +using LargestInt = int; +using LargestUInt = unsigned int; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +using Int64 = __int64; +using UInt64 = unsigned __int64; +#else // if defined(_MSC_VER) // Other platforms, use long long +using Int64 = int64_t; +using UInt64 = uint64_t; +#endif // if defined(_MSC_VER) +using LargestInt = Int64; +using LargestUInt = UInt64; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) + +template +using Allocator = + typename std::conditional, + std::allocator>::type; +using String = std::basic_string, Allocator>; +using IStringStream = + std::basic_istringstream; +using OStringStream = + std::basic_ostringstream; +using IStream = std::istream; +using OStream = std::ostream; +} // namespace Json + +// Legacy names (formerly macros). +using JSONCPP_STRING = Json::String; +using JSONCPP_ISTRINGSTREAM = Json::IStringStream; +using JSONCPP_OSTRINGSTREAM = Json::OStringStream; +using JSONCPP_ISTREAM = Json::IStream; +using JSONCPP_OSTREAM = Json::OStream; + +#endif // JSON_CONFIG_H_INCLUDED diff --git a/third_lib/jsoncpp/json/forwards.h b/third_lib/jsoncpp/json/forwards.h new file mode 100644 index 0000000..affe33a --- /dev/null +++ b/third_lib/jsoncpp/json/forwards.h @@ -0,0 +1,43 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class StreamWriter; +class StreamWriterBuilder; +class Writer; +class FastWriter; +class StyledWriter; +class StyledStreamWriter; + +// reader.h +class Reader; +class CharReader; +class CharReaderBuilder; + +// json_features.h +class Features; + +// value.h +using ArrayIndex = unsigned int; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED diff --git a/third_lib/jsoncpp/json/json.h b/third_lib/jsoncpp/json/json.h new file mode 100644 index 0000000..5c776a1 --- /dev/null +++ b/third_lib/jsoncpp/json/json.h @@ -0,0 +1,15 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_JSON_H_INCLUDED +#define JSON_JSON_H_INCLUDED + +#include "config.h" +#include "json_features.h" +#include "reader.h" +#include "value.h" +#include "writer.h" + +#endif // JSON_JSON_H_INCLUDED diff --git a/third_lib/jsoncpp/json/json_features.h b/third_lib/jsoncpp/json/json_features.h new file mode 100644 index 0000000..7c7e9f5 --- /dev/null +++ b/third_lib/jsoncpp/json/json_features.h @@ -0,0 +1,61 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FEATURES_H_INCLUDED +#define JSON_FEATURES_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +#pragma pack(push, 8) + +namespace Json { + +/** \brief Configuration passed to reader and writer. + * This configuration object can be used to force the Reader or Writer + * to behave in a standard conforming way. + */ +class JSON_API Features { +public: + /** \brief A configuration that allows all features and assumes all strings + * are UTF-8. + * - C & C++ comments are allowed + * - Root object can be any JSON value + * - Assumes Value strings are encoded in UTF-8 + */ + static Features all(); + + /** \brief A configuration that is strictly compatible with the JSON + * specification. + * - Comments are forbidden. + * - Root object must be either an array or an object value. + * - Assumes Value strings are encoded in UTF-8 + */ + static Features strictMode(); + + /** \brief Initialize the configuration like JsonConfig::allFeatures; + */ + Features(); + + /// \c true if comments are allowed. Default: \c true. + bool allowComments_{true}; + + /// \c true if root must be either an array or an object value. Default: \c + /// false. + bool strictRoot_{false}; + + /// \c true if dropped null placeholders are allowed. Default: \c false. + bool allowDroppedNullPlaceholders_{false}; + + /// \c true if numeric object key are allowed. Default: \c false. + bool allowNumericKeys_{false}; +}; + +} // namespace Json + +#pragma pack(pop) + +#endif // JSON_FEATURES_H_INCLUDED diff --git a/third_lib/jsoncpp/json/reader.h b/third_lib/jsoncpp/json/reader.h new file mode 100644 index 0000000..9175466 --- /dev/null +++ b/third_lib/jsoncpp/json/reader.h @@ -0,0 +1,403 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_READER_H_INCLUDED +#define JSON_READER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "json_features.h" +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include +#include +#include + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#pragma pack(push, 8) + +namespace Json { + +/** \brief Unserialize a JSON document into a + * Value. + * + * \deprecated Use CharReader and CharReaderBuilder. + */ + +class JSONCPP_DEPRECATED( + "Use CharReader and CharReaderBuilder instead.") JSON_API Reader { +public: + using Char = char; + using Location = const Char*; + + /** \brief An error tagged with where in the JSON text it was encountered. + * + * The offsets give the [start, limit) range of bytes within the text. Note + * that this is bytes, not codepoints. + */ + struct StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + String message; + }; + + /** \brief Constructs a Reader allowing all features for parsing. + */ + JSONCPP_DEPRECATED("Use CharReader and CharReaderBuilder instead") + Reader(); + + /** \brief Constructs a Reader allowing the specified feature set for parsing. + */ + JSONCPP_DEPRECATED("Use CharReader and CharReaderBuilder instead") + Reader(const Features& features); + + /** \brief Read a Value from a JSON + * document. + * + * \param document UTF-8 encoded string containing the document + * to read. + * \param[out] root Contains the root value of the document if it + * was successfully parsed. + * \param collectComments \c true to collect comment and allow writing + * them back during serialization, \c false to + * discard comments. This parameter is ignored + * if Features::allowComments_ is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool parse(const std::string& document, Value& root, + bool collectComments = true); + + /** \brief Read a Value from a JSON + * document. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded + * string of the document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string + * of the document to read. Must be >= beginDoc. + * \param[out] root Contains the root value of the document if it + * was successfully parsed. + * \param collectComments \c true to collect comment and allow writing + * them back during serialization, \c false to + * discard comments. This parameter is ignored + * if Features::allowComments_ is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool parse(const char* beginDoc, const char* endDoc, Value& root, + bool collectComments = true); + + /// \brief Parse from input stream. + /// \see Json::operator>>(std::istream&, Json::Value&). + bool parse(IStream& is, Value& root, bool collectComments = true); + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * + * \return Formatted error message with the list of errors with their + * location in the parsed document. An empty string is returned if no error + * occurred during parsing. + * \deprecated Use getFormattedErrorMessages() instead (typo fix). + */ + JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") + String getFormatedErrorMessages() const; + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * + * \return Formatted error message with the list of errors with their + * location in the parsed document. An empty string is returned if no error + * occurred during parsing. + */ + String getFormattedErrorMessages() const; + + /** \brief Returns a vector of structured errors encountered while parsing. + * + * \return A (possibly empty) vector of StructuredError objects. Currently + * only one error can be returned, but the caller should tolerate multiple + * errors. This can occur if the parser recovers from a non-fatal parse + * error and then encounters additional errors. + */ + std::vector getStructuredErrors() const; + + /** \brief Add a semantic error message. + * + * \param value JSON Value location associated with the error + * \param message The error message. + * \return \c true if the error was successfully added, \c false if the Value + * offset exceeds the document size. + */ + bool pushError(const Value& value, const String& message); + + /** \brief Add a semantic error message with extra context. + * + * \param value JSON Value location associated with the error + * \param message The error message. + * \param extra Additional JSON Value location to contextualize the error + * \return \c true if the error was successfully added, \c false if either + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const String& message, const Value& extra); + + /** \brief Return whether there are any errors. + * + * \return \c true if there are no errors to report \c false if errors have + * occurred. + */ + bool good() const; + +private: + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + String message_; + Location extra_; + }; + + using Errors = std::deque; + + bool readToken(Token& token); + void skipSpaces(); + bool match(const Char* pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + void readNumber(); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, String& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, Location& current, Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, Location& current, + Location end, unsigned int& unicode); + bool addError(const String& message, Token& token, Location extra = nullptr); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const String& message, Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void getLocationLineAndColumn(Location location, int& line, + int& column) const; + String getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + static bool containsNewLine(Location begin, Location end); + static String normalizeEOL(Location begin, Location end); + + using Nodes = std::stack; + Nodes nodes_; + Errors errors_; + String document_; + Location begin_{}; + Location end_{}; + Location current_{}; + Location lastValueEnd_{}; + Value* lastValue_{}; + String commentsBefore_; + Features features_; + bool collectComments_{}; +}; // Reader + +/** Interface for reading JSON from a char array. + */ +class JSON_API CharReader { +public: + virtual ~CharReader() = default; + /** \brief Read a Value from a JSON + * document. The document must be a UTF-8 encoded string containing the + * document to read. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string + * of the document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + * document to read. Must be >= beginDoc. + * \param[out] root Contains the root value of the document if it was + * successfully parsed. + * \param[out] errs Formatted error messages (if not NULL) a user + * friendly string that lists errors in the parsed + * document. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, + String* errs) = 0; + + class JSON_API Factory { + public: + virtual ~Factory() = default; + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual CharReader* newCharReader() const = 0; + }; // Factory +}; // CharReader + +/** \brief Build a CharReader implementation. + * + * Usage: + * \code + * using namespace Json; + * CharReaderBuilder builder; + * builder["collectComments"] = false; + * Value value; + * String errs; + * bool ok = parseFromStream(builder, std::cin, &value, &errs); + * \endcode + */ +class JSON_API CharReaderBuilder : public CharReader::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + * These are case-sensitive. + * Available settings (case-sensitive): + * - `"collectComments": false or true` + * - true to collect comment and allow writing them back during + * serialization, false to discard comments. This parameter is ignored + * if allowComments is false. + * - `"allowComments": false or true` + * - true if comments are allowed. + * - `"allowTrailingCommas": false or true` + * - true if trailing commas in objects and arrays are allowed. + * - `"strictRoot": false or true` + * - true if root must be either an array or an object value + * - `"allowDroppedNullPlaceholders": false or true` + * - true if dropped null placeholders are allowed. (See + * StreamWriterBuilder.) + * - `"allowNumericKeys": false or true` + * - true if numeric object keys are allowed. + * - `"allowSingleQuotes": false or true` + * - true if '' are allowed for strings (both keys and values) + * - `"stackLimit": integer` + * - Exceeding stackLimit (recursive depth of `readValue()`) will cause an + * exception. + * - This is a security issue (seg-faults caused by deeply nested JSON), so + * the default is low. + * - `"failIfExtra": false or true` + * - If true, `parse()` returns false when extra non-whitespace trails the + * JSON value in the input string. + * - `"rejectDupKeys": false or true` + * - If true, `parse()` returns false when a key is duplicated within an + * object. + * - `"allowSpecialFloats": false or true` + * - If true, special float values (NaNs and infinities) are allowed and + * their values are lossfree restorable. + * + * You can examine 'settings_` yourself to see the defaults. You can also + * write and read them just like any JSON Value. + * \sa setDefaults() + */ + Json::Value settings_; + + CharReaderBuilder(); + ~CharReaderBuilder() override; + + CharReader* newCharReader() const override; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + + /** A simple way to update a specific setting. + */ + Value& operator[](const String& key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults + */ + static void setDefaults(Json::Value* settings); + /** Same as old Features::strictMode(). + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode + */ + static void strictMode(Json::Value* settings); +}; + +/** Consume entire stream and use its begin/end. + * Someday we might have a real StreamReader, but for now this + * is convenient. + */ +bool JSON_API parseFromStream(CharReader::Factory const&, IStream&, Value* root, + String* errs); + +/** \brief Read from 'sin' into 'root'. + * + * Always keep comments from the input JSON. + * + * This can be used to read a file into a particular sub-object. + * For example: + * \code + * Json::Value root; + * cin >> root["dir"]["file"]; + * cout << root; + * \endcode + * Result: + * \verbatim + * { + * "dir": { + * "file": { + * // The input stream JSON would be nested here. + * } + * } + * } + * \endverbatim + * \throw std::exception on parse error. + * \see Json::operator<<() + */ +JSON_API IStream& operator>>(IStream&, Value&); + +} // namespace Json + +#pragma pack(pop) + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_READER_H_INCLUDED diff --git a/third_lib/jsoncpp/json/value.h b/third_lib/jsoncpp/json/value.h new file mode 100644 index 0000000..df1eba6 --- /dev/null +++ b/third_lib/jsoncpp/json/value.h @@ -0,0 +1,935 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_H_INCLUDED +#define JSON_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +// Conditional NORETURN attribute on the throw functions would: +// a) suppress false positives from static code analysis +// b) possibly improve optimization opportunities. +#if !defined(JSONCPP_NORETURN) +#if defined(_MSC_VER) && _MSC_VER == 1800 +#define JSONCPP_NORETURN __declspec(noreturn) +#else +#define JSONCPP_NORETURN [[noreturn]] +#endif +#endif + +// Support for '= delete' with template declarations was a late addition +// to the c++11 standard and is rejected by clang 3.8 and Apple clang 8.2 +// even though these declare themselves to be c++11 compilers. +#if !defined(JSONCPP_TEMPLATE_DELETE) +#if defined(__clang__) && defined(__apple_build_version__) +#if __apple_build_version__ <= 8000042 +#define JSONCPP_TEMPLATE_DELETE +#endif +#elif defined(__clang__) +#if __clang_major__ == 3 && __clang_minor__ <= 8 +#define JSONCPP_TEMPLATE_DELETE +#endif +#endif +#if !defined(JSONCPP_TEMPLATE_DELETE) +#define JSONCPP_TEMPLATE_DELETE = delete +#endif +#endif + +#include +#include +#include +#include +#include +#include + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#pragma pack(push, 8) + +/** \brief JSON (JavaScript Object Notation). + */ +namespace Json { + +#if JSON_USE_EXCEPTION +/** Base class for all exceptions we throw. + * + * We use nothing but these internally. Of course, STL can throw others. + */ +class JSON_API Exception : public std::exception { +public: + Exception(String msg); + ~Exception() noexcept override; + char const* what() const noexcept override; + +protected: + String msg_; +}; + +/** Exceptions which the user cannot easily avoid. + * + * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input + * + * \remark derived from Json::Exception + */ +class JSON_API RuntimeError : public Exception { +public: + RuntimeError(String const& msg); +}; + +/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. + * + * These are precondition-violations (user bugs) and internal errors (our bugs). + * + * \remark derived from Json::Exception + */ +class JSON_API LogicError : public Exception { +public: + LogicError(String const& msg); +}; +#endif + +/// used internally +JSONCPP_NORETURN void throwRuntimeError(String const& msg); +/// used internally +JSONCPP_NORETURN void throwLogicError(String const& msg); + +/** \brief Type of the value held by a Value object. + */ +enum ValueType { + nullValue = 0, ///< 'null' value + intValue, ///< signed integer value + uintValue, ///< unsigned integer value + realValue, ///< double value + stringValue, ///< UTF-8 string value + booleanValue, ///< bool value + arrayValue, ///< array value (ordered list) + objectValue ///< object value (collection of name/value pairs). +}; + +enum CommentPlacement { + commentBefore = 0, ///< a comment placed on the line before a value + commentAfterOnSameLine, ///< a comment just after a value on the same line + commentAfter, ///< a comment on the line after a value (only make sense for + /// root value) + numberOfCommentPlacement +}; + +/** \brief Type of precision for formatting of real values. + */ +enum PrecisionType { + significantDigits = 0, ///< we set max number of significant digits in string + decimalPlaces ///< we set max number of digits after "." in string +}; + +/** \brief Lightweight wrapper to tag static string. + * + * Value constructor and objectValue member assignment takes advantage of the + * StaticString and avoid the cost of string duplication when storing the + * string or the member name. + * + * Example of usage: + * \code + * Json::Value aValue( StaticString("some text") ); + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ +class JSON_API StaticString { +public: + explicit StaticString(const char* czstring) : c_str_(czstring) {} + + operator const char*() const { return c_str_; } + + const char* c_str() const { return c_str_; } + +private: + const char* c_str_; +}; + +/** \brief Represents a JSON value. + * + * This class is a discriminated union wrapper that can represents a: + * - signed integer [range: Value::minInt - Value::maxInt] + * - unsigned integer (range: 0 - Value::maxUInt) + * - double + * - UTF-8 string + * - boolean + * - 'null' + * - an ordered list of Value + * - collection of name/value pairs (javascript object) + * + * The type of the held value is represented by a #ValueType and + * can be obtained using type(). + * + * Values of an #objectValue or #arrayValue can be accessed using operator[]() + * methods. + * Non-const methods will automatically create the a #nullValue element + * if it does not exist. + * The sequence of an #arrayValue will be automatically resized and initialized + * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue. + * + * The get() methods can be used to obtain default value in the case the + * required element does not exist. + * + * It is possible to iterate over the list of member keys of an object using + * the getMemberNames() method. + * + * \note #Value string-length fit in size_t, but keys must be < 2^30. + * (The reason is an implementation detail.) A #CharReader will raise an + * exception if a bound is exceeded to avoid security holes in your app, + * but the Value API does *not* check bounds. That is the responsibility + * of the caller. + */ +class JSON_API Value { + friend class ValueIteratorBase; + +public: + using Members = std::vector; + using iterator = ValueIterator; + using const_iterator = ValueConstIterator; + using UInt = Json::UInt; + using Int = Json::Int; +#if defined(JSON_HAS_INT64) + using UInt64 = Json::UInt64; + using Int64 = Json::Int64; +#endif // defined(JSON_HAS_INT64) + using LargestInt = Json::LargestInt; + using LargestUInt = Json::LargestUInt; + using ArrayIndex = Json::ArrayIndex; + + // Required for boost integration, e. g. BOOST_TEST + using value_type = std::string; + +#if JSON_USE_NULLREF + // Binary compatibility kludges, do not use. + static const Value& null; + static const Value& nullRef; +#endif + + // null and nullRef are deprecated, use this instead. + static Value const& nullSingleton(); + + /// Minimum signed integer value that can be stored in a Json::Value. + static constexpr LargestInt minLargestInt = + LargestInt(~(LargestUInt(-1) / 2)); + /// Maximum signed integer value that can be stored in a Json::Value. + static constexpr LargestInt maxLargestInt = LargestInt(LargestUInt(-1) / 2); + /// Maximum unsigned integer value that can be stored in a Json::Value. + static constexpr LargestUInt maxLargestUInt = LargestUInt(-1); + + /// Minimum signed int value that can be stored in a Json::Value. + static constexpr Int minInt = Int(~(UInt(-1) / 2)); + /// Maximum signed int value that can be stored in a Json::Value. + static constexpr Int maxInt = Int(UInt(-1) / 2); + /// Maximum unsigned int value that can be stored in a Json::Value. + static constexpr UInt maxUInt = UInt(-1); + +#if defined(JSON_HAS_INT64) + /// Minimum signed 64 bits int value that can be stored in a Json::Value. + static constexpr Int64 minInt64 = Int64(~(UInt64(-1) / 2)); + /// Maximum signed 64 bits int value that can be stored in a Json::Value. + static constexpr Int64 maxInt64 = Int64(UInt64(-1) / 2); + /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. + static constexpr UInt64 maxUInt64 = UInt64(-1); +#endif // defined(JSON_HAS_INT64) + /// Default precision for real value for string representation. + static constexpr UInt defaultRealPrecision = 17; + // The constant is hard-coded because some compiler have trouble + // converting Value::maxUInt64 to a double correctly (AIX/xlC). + // Assumes that UInt64 is a 64 bits integer. + static constexpr double maxUInt64AsDouble = 18446744073709551615.0; +// Workaround for bug in the NVIDIAs CUDA 9.1 nvcc compiler +// when using gcc and clang backend compilers. CZString +// cannot be defined as private. See issue #486 +#ifdef __NVCC__ +public: +#else +private: +#endif +#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + class CZString { + public: + enum DuplicationPolicy { noDuplication = 0, duplicate, duplicateOnCopy }; + CZString(ArrayIndex index); + CZString(char const* str, unsigned length, DuplicationPolicy allocate); + CZString(CZString const& other); + CZString(CZString&& other); + ~CZString(); + CZString& operator=(const CZString& other); + CZString& operator=(CZString&& other); + + bool operator<(CZString const& other) const; + bool operator==(CZString const& other) const; + ArrayIndex index() const; + // const char* c_str() const; ///< \deprecated + char const* data() const; + unsigned length() const; + bool isStaticString() const; + + private: + void swap(CZString& other); + + struct StringStorage { + unsigned policy_ : 2; + unsigned length_ : 30; // 1GB max + }; + + char const* cstr_; // actually, a prefixed string, unless policy is noDup + union { + ArrayIndex index_; + StringStorage storage_; + }; + }; + +public: + typedef std::map ObjectValues; +#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + +public: + /** + * \brief Create a default Value of the given type. + * + * This is a very useful constructor. + * To create an empty array, pass arrayValue. + * To create an empty object, pass objectValue. + * Another Value can then be set to this one by assignment. + * This is useful since clear() and resize() will not alter types. + * + * Examples: + * \code + * Json::Value null_value; // null + * Json::Value arr_value(Json::arrayValue); // [] + * Json::Value obj_value(Json::objectValue); // {} + * \endcode + */ + Value(ValueType type = nullValue); + Value(Int value); + Value(UInt value); +#if defined(JSON_HAS_INT64) + Value(Int64 value); + Value(UInt64 value); +#endif // if defined(JSON_HAS_INT64) + Value(double value); + Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) + Value(const char* begin, const char* end); ///< Copy all, incl zeroes. + /** + * \brief Constructs a value from a static string. + * + * Like other value string constructor but do not duplicate the string for + * internal storage. The given string must remain alive after the call to + * this constructor. + * + * \note This works only for null-terminated strings. (We cannot change the + * size of this class, so we have nowhere to store the length, which might be + * computed later for various operations.) + * + * Example of usage: + * \code + * static StaticString foo("some text"); + * Json::Value aValue(foo); + * \endcode + */ + Value(const StaticString& value); + Value(const String& value); + Value(bool value); + Value(std::nullptr_t ptr) = delete; + Value(const Value& other); + Value(Value&& other); + ~Value(); + + /// \note Overwrite existing comments. To preserve comments, use + /// #swapPayload(). + Value& operator=(const Value& other); + Value& operator=(Value&& other); + + /// Swap everything. + void swap(Value& other); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); + + /// copy everything. + void copy(const Value& other); + /// copy values but leave comments and source offsets in place. + void copyPayload(const Value& other); + + ValueType type() const; + + /// Compare payload only, not comments etc. + bool operator<(const Value& other) const; + bool operator<=(const Value& other) const; + bool operator>=(const Value& other) const; + bool operator>(const Value& other) const; + bool operator==(const Value& other) const; + bool operator!=(const Value& other) const; + int compare(const Value& other) const; + + const char* asCString() const; ///< Embedded zeroes could cause you trouble! +#if JSONCPP_USING_SECURE_MEMORY + unsigned getCStringLength() const; // Allows you to understand the length of + // the CString +#endif + String asString() const; ///< Embedded zeroes are possible. + /** Get raw char* of string-value. + * \return false if !string. (Seg-fault if str or end are NULL.) + */ + bool getString(char const** begin, char const** end) const; + Int asInt() const; + UInt asUInt() const; +#if defined(JSON_HAS_INT64) + Int64 asInt64() const; + UInt64 asUInt64() const; +#endif // if defined(JSON_HAS_INT64) + LargestInt asLargestInt() const; + LargestUInt asLargestUInt() const; + float asFloat() const; + double asDouble() const; + bool asBool() const; + + bool isNull() const; + bool isBool() const; + bool isInt() const; + bool isInt64() const; + bool isUInt() const; + bool isUInt64() const; + bool isIntegral() const; + bool isDouble() const; + bool isNumeric() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + + /// The `as` and `is` member function templates and specializations. + template T as() const JSONCPP_TEMPLATE_DELETE; + template bool is() const JSONCPP_TEMPLATE_DELETE; + + bool isConvertibleTo(ValueType other) const; + + /// Number of values in array or object + ArrayIndex size() const; + + /// \brief Return true if empty array, empty object, or null; + /// otherwise, false. + bool empty() const; + + /// Return !isNull() + explicit operator bool() const; + + /// Remove all object members and array elements. + /// \pre type() is arrayValue, objectValue, or nullValue + /// \post type() is unchanged + void clear(); + + /// Resize the array to newSize elements. + /// New elements are initialized to null. + /// May only be called on nullValue or arrayValue. + /// \pre type() is arrayValue or nullValue + /// \post type() is arrayValue + void resize(ArrayIndex newSize); + + //@{ + /// Access an array element (zero based index). If the array contains less + /// than index element, then null value are inserted in the array so that + /// its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](ArrayIndex index); + Value& operator[](int index); + //@} + + //@{ + /// Access an array element (zero based index). + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](ArrayIndex index) const; + const Value& operator[](int index) const; + //@} + + /// If the array contains at least index+1 elements, returns the element + /// value, otherwise returns defaultValue. + Value get(ArrayIndex index, const Value& defaultValue) const; + /// Return true if index < size(). + bool isValidIndex(ArrayIndex index) const; + /// \brief Append value to array at the end. + /// + /// Equivalent to jsonvalue[jsonvalue.size()] = value; + Value& append(const Value& value); + Value& append(Value&& value); + + /// \brief Insert value in array at specific index + bool insert(ArrayIndex index, const Value& newValue); + bool insert(ArrayIndex index, Value&& newValue); + + /// Access an object value by name, create a null member if it does not exist. + /// \note Because of our implementation, keys are limited to 2^30 -1 chars. + /// Exceeding that will cause an exception. + Value& operator[](const char* key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const char* key) const; + /// Access an object value by name, create a null member if it does not exist. + /// \param key may contain embedded nulls. + Value& operator[](const String& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + /// \param key may contain embedded nulls. + const Value& operator[](const String& key) const; + /** \brief Access an object value by name, create a null member if it does not + * exist. + * + * If the object has no entry for that name, then the member name used to + * store the new entry is not duplicated. + * Example of use: + * \code + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ + Value& operator[](const StaticString& key); + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const char* key, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \note key may contain embedded nulls. + Value get(const char* begin, const char* end, + const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \param key may contain embedded nulls. + Value get(const String& key, const Value& defaultValue) const; + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of object-mutators. + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. + Value* demand(char const* begin, char const* end); + /// \brief Remove and return the named member. + /// + /// Do nothing if it did not exist. + /// \pre type() is objectValue or nullValue + /// \post type() is unchanged + void removeMember(const char* key); + /// Same as removeMember(const char*) + /// \param key may contain embedded nulls. + void removeMember(const String& key); + /// Same as removeMember(const char* begin, const char* end, Value* removed), + /// but 'key' is null-terminated. + bool removeMember(const char* key, Value* removed); + /** \brief Remove the named map member. + * + * Update 'removed' iff removed. + * \param key may contain embedded nulls. + * \return true iff removed (no exceptions) + */ + bool removeMember(String const& key, Value* removed); + /// Same as removeMember(String const& key, Value* removed) + bool removeMember(const char* begin, const char* end, Value* removed); + /** \brief Remove the indexed array element. + * + * O(n) expensive operations. + * Update 'removed' iff removed. + * \return true if removed (no exceptions) + */ + bool removeIndex(ArrayIndex index, Value* removed); + + /// Return true if the object has a member named key. + /// \note 'key' must be null-terminated. + bool isMember(const char* key) const; + /// Return true if the object has a member named key. + /// \param key may contain embedded nulls. + bool isMember(const String& key) const; + /// Same as isMember(String const& key)const + bool isMember(const char* begin, const char* end) const; + + /// \brief Return a list of the member names. + /// + /// If null, return an empty list. + /// \pre type() is objectValue or nullValue + /// \post if type() was nullValue, it remains nullValue + Members getMemberNames() const; + + /// \deprecated Always pass len. + JSONCPP_DEPRECATED("Use setComment(String const&) instead.") + void setComment(const char* comment, CommentPlacement placement) { + setComment(String(comment, strlen(comment)), placement); + } + /// Comments must be //... or /* ... */ + void setComment(const char* comment, size_t len, CommentPlacement placement) { + setComment(String(comment, len), placement); + } + /// Comments must be //... or /* ... */ + void setComment(String comment, CommentPlacement placement); + bool hasComment(CommentPlacement placement) const; + /// Include delimiters and embedded newlines. + String getComment(CommentPlacement placement) const; + + String toStyledString() const; + + const_iterator begin() const; + const_iterator end() const; + + iterator begin(); + iterator end(); + + // Accessors for the [start, limit) range of bytes within the JSON text from + // which this value was parsed, if any. + void setOffsetStart(ptrdiff_t start); + void setOffsetLimit(ptrdiff_t limit); + ptrdiff_t getOffsetStart() const; + ptrdiff_t getOffsetLimit() const; + +private: + void setType(ValueType v) { + bits_.value_type_ = static_cast(v); + } + bool isAllocated() const { return bits_.allocated_; } + void setIsAllocated(bool v) { bits_.allocated_ = v; } + + void initBasic(ValueType type, bool allocated = false); + void dupPayload(const Value& other); + void releasePayload(); + void dupMeta(const Value& other); + + Value& resolveReference(const char* key); + Value& resolveReference(const char* key, const char* end); + + // struct MemberNamesTransform + //{ + // typedef const char *result_type; + // const char *operator()( const CZString &name ) const + // { + // return name.c_str(); + // } + //}; + + union ValueHolder { + LargestInt int_; + LargestUInt uint_; + double real_; + bool bool_; + char* string_; // if allocated_, ptr to { unsigned, char[] }. + ObjectValues* map_; + } value_; + + struct { + // Really a ValueType, but types should agree for bitfield packing. + unsigned int value_type_ : 8; + // Unless allocated_, string_ must be null-terminated. + unsigned int allocated_ : 1; + } bits_; + + class Comments { + public: + Comments() = default; + Comments(const Comments& that); + Comments(Comments&& that); + Comments& operator=(const Comments& that); + Comments& operator=(Comments&& that); + bool has(CommentPlacement slot) const; + String get(CommentPlacement slot) const; + void set(CommentPlacement slot, String comment); + + private: + using Array = std::array; + std::unique_ptr ptr_; + }; + Comments comments_; + + // [start, limit) byte offsets in the source JSON text from which this Value + // was extracted. + ptrdiff_t start_; + ptrdiff_t limit_; +}; + +template <> inline bool Value::as() const { return asBool(); } +template <> inline bool Value::is() const { return isBool(); } + +template <> inline Int Value::as() const { return asInt(); } +template <> inline bool Value::is() const { return isInt(); } + +template <> inline UInt Value::as() const { return asUInt(); } +template <> inline bool Value::is() const { return isUInt(); } + +#if defined(JSON_HAS_INT64) +template <> inline Int64 Value::as() const { return asInt64(); } +template <> inline bool Value::is() const { return isInt64(); } + +template <> inline UInt64 Value::as() const { return asUInt64(); } +template <> inline bool Value::is() const { return isUInt64(); } +#endif + +template <> inline double Value::as() const { return asDouble(); } +template <> inline bool Value::is() const { return isDouble(); } + +template <> inline String Value::as() const { return asString(); } +template <> inline bool Value::is() const { return isString(); } + +/// These `as` specializations are type conversions, and do not have a +/// corresponding `is`. +template <> inline float Value::as() const { return asFloat(); } +template <> inline const char* Value::as() const { + return asCString(); +} + +/** \brief Experimental and untested: represents an element of the "path" to + * access a node. + */ +class JSON_API PathArgument { +public: + friend class Path; + + PathArgument(); + PathArgument(ArrayIndex index); + PathArgument(const char* key); + PathArgument(String key); + +private: + enum Kind { kindNone = 0, kindIndex, kindKey }; + String key_; + ArrayIndex index_{}; + Kind kind_{kindNone}; +}; + +/** \brief Experimental and untested: represents a "path" to access a node. + * + * Syntax: + * - "." => root node + * - ".[n]" => elements at index 'n' of root node (an array value) + * - ".name" => member named 'name' of root node (an object value) + * - ".name1.name2.name3" + * - ".[0][1][2].name1[3]" + * - ".%" => member name is provided as parameter + * - ".[%]" => index is provided as parameter + */ +class JSON_API Path { +public: + Path(const String& path, const PathArgument& a1 = PathArgument(), + const PathArgument& a2 = PathArgument(), + const PathArgument& a3 = PathArgument(), + const PathArgument& a4 = PathArgument(), + const PathArgument& a5 = PathArgument()); + + const Value& resolve(const Value& root) const; + Value resolve(const Value& root, const Value& defaultValue) const; + /// Creates the "path" to access the specified node and returns a reference on + /// the node. + Value& make(Value& root) const; + +private: + using InArgs = std::vector; + using Args = std::vector; + + void makePath(const String& path, const InArgs& in); + void addPathInArg(const String& path, const InArgs& in, + InArgs::const_iterator& itInArg, PathArgument::Kind kind); + static void invalidPath(const String& path, int location); + + Args args_; +}; + +/** \brief base class for Value iterators. + * + */ +class JSON_API ValueIteratorBase { +public: + using iterator_category = std::bidirectional_iterator_tag; + using size_t = unsigned int; + using difference_type = int; + using SelfType = ValueIteratorBase; + + bool operator==(const SelfType& other) const { return isEqual(other); } + + bool operator!=(const SelfType& other) const { return !isEqual(other); } + + difference_type operator-(const SelfType& other) const { + return other.computeDistance(*this); + } + + /// Return either the index or the member name of the referenced value as a + /// Value. + Value key() const; + + /// Return the index of the referenced Value, or -1 if it is not an + /// arrayValue. + UInt index() const; + + /// Return the member name of the referenced Value, or "" if it is not an + /// objectValue. + /// \note Avoid `c_str()` on result, as embedded zeroes are possible. + String name() const; + + /// Return the member name of the referenced Value. "" if it is not an + /// objectValue. + /// \deprecated This cannot be used for UTF-8 strings, since there can be + /// embedded nulls. + JSONCPP_DEPRECATED("Use `key = name();` instead.") + char const* memberName() const; + /// Return the member name of the referenced Value, or NULL if it is not an + /// objectValue. + /// \note Better version than memberName(). Allows embedded nulls. + char const* memberName(char const** end) const; + +protected: + /*! Internal utility functions to assist with implementing + * other iterator functions. The const and non-const versions + * of the "deref" protected methods expose the protected + * current_ member variable in a way that can often be + * optimized away by the compiler. + */ + const Value& deref() const; + Value& deref(); + + void increment(); + + void decrement(); + + difference_type computeDistance(const SelfType& other) const; + + bool isEqual(const SelfType& other) const; + + void copy(const SelfType& other); + +private: + Value::ObjectValues::iterator current_; + // Indicates that iterator is for a null value. + bool isNull_{true}; + +public: + // For some reason, BORLAND needs these at the end, rather + // than earlier. No idea why. + ValueIteratorBase(); + explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); +}; + +/** \brief const iterator for object and array value. + * + */ +class JSON_API ValueConstIterator : public ValueIteratorBase { + friend class Value; + +public: + using value_type = const Value; + // typedef unsigned int size_t; + // typedef int difference_type; + using reference = const Value&; + using pointer = const Value*; + using SelfType = ValueConstIterator; + + ValueConstIterator(); + ValueConstIterator(ValueIterator const& other); + +private: + /*! \internal Use by Value to create an iterator. + */ + explicit ValueConstIterator(const Value::ObjectValues::iterator& current); + +public: + SelfType& operator=(const ValueIteratorBase& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +/** \brief Iterator for object and array value. + */ +class JSON_API ValueIterator : public ValueIteratorBase { + friend class Value; + +public: + using value_type = Value; + using size_t = unsigned int; + using difference_type = int; + using reference = Value&; + using pointer = Value*; + using SelfType = ValueIterator; + + ValueIterator(); + explicit ValueIterator(const ValueConstIterator& other); + ValueIterator(const ValueIterator& other); + +private: + /*! \internal Use by Value to create an iterator. + */ + explicit ValueIterator(const Value::ObjectValues::iterator& current); + +public: + SelfType& operator=(const SelfType& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + /*! The return value of non-const iterators can be + * changed, so the these functions are not const + * because the returned references/pointers can be used + * to change state of the base class. + */ + reference operator*() { return deref(); } + pointer operator->() { return &deref(); } +}; + +inline void swap(Value& a, Value& b) { a.swap(b); } + +} // namespace Json + +#pragma pack(pop) + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_H_INCLUDED diff --git a/third_lib/jsoncpp/json/version.h b/third_lib/jsoncpp/json/version.h new file mode 100644 index 0000000..5b9783d --- /dev/null +++ b/third_lib/jsoncpp/json/version.h @@ -0,0 +1,28 @@ +#ifndef JSON_VERSION_H_INCLUDED +#define JSON_VERSION_H_INCLUDED + +// Note: version must be updated in three places when doing a release. This +// annoying process ensures that amalgamate, CMake, and meson all report the +// correct version. +// 1. /meson.build +// 2. /include/json/version.h +// 3. /CMakeLists.txt +// IMPORTANT: also update the SOVERSION!! + +#define JSONCPP_VERSION_STRING "1.9.4" +#define JSONCPP_VERSION_MAJOR 1 +#define JSONCPP_VERSION_MINOR 9 +#define JSONCPP_VERSION_PATCH 3 +#define JSONCPP_VERSION_QUALIFIER +#define JSONCPP_VERSION_HEXA \ + ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | \ + (JSONCPP_VERSION_PATCH << 8)) + +#ifdef JSONCPP_USING_SECURE_MEMORY +#undef JSONCPP_USING_SECURE_MEMORY +#endif +#define JSONCPP_USING_SECURE_MEMORY 0 +// If non-zero, the library zeroes any memory that it has allocated before +// it frees its memory. + +#endif // JSON_VERSION_H_INCLUDED diff --git a/third_lib/jsoncpp/json/writer.h b/third_lib/jsoncpp/json/writer.h new file mode 100644 index 0000000..fb0852a --- /dev/null +++ b/third_lib/jsoncpp/json/writer.h @@ -0,0 +1,367 @@ +// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_WRITER_H_INCLUDED +#define JSON_WRITER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include +#include +#include + +// Disable warning C4251: : needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) && defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#pragma pack(push, 8) + +namespace Json { + +class Value; + +/** + * + * Usage: + * \code + * using namespace Json; + * void writeToStdout(StreamWriter::Factory const& factory, Value const& value) + * { std::unique_ptr const writer( factory.newStreamWriter()); + * writer->write(value, &std::cout); + * std::cout << std::endl; // add lf and flush + * } + * \endcode + */ +class JSON_API StreamWriter { +protected: + OStream* sout_; // not owned; will not delete +public: + StreamWriter(); + virtual ~StreamWriter(); + /** Write Value into document as configured in sub-class. + * Do not take ownership of sout, but maintain a reference during function. + * \pre sout != NULL + * \return zero on success (For now, we always return zero, so check the + * stream instead.) \throw std::exception possibly, depending on + * configuration + */ + virtual int write(Value const& root, OStream* sout) = 0; + + /** \brief A simple abstract factory. + */ + class JSON_API Factory { + public: + virtual ~Factory(); + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual StreamWriter* newStreamWriter() const = 0; + }; // Factory +}; // StreamWriter + +/** \brief Write into stringstream, then return string, for convenience. + * A StreamWriter will be created from the factory, used, and then deleted. + */ +String JSON_API writeString(StreamWriter::Factory const& factory, + Value const& root); + +/** \brief Build a StreamWriter implementation. + +* Usage: +* \code +* using namespace Json; +* Value value = ...; +* StreamWriterBuilder builder; +* builder["commentStyle"] = "None"; +* builder["indentation"] = " "; // or whatever you like +* std::unique_ptr writer( +* builder.newStreamWriter()); +* writer->write(value, &std::cout); +* std::cout << std::endl; // add lf and flush +* \endcode +*/ +class JSON_API StreamWriterBuilder : public StreamWriter::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + * Available settings (case-sensitive): + * - "commentStyle": "None" or "All" + * - "indentation": "". + * - Setting this to an empty string also omits newline characters. + * - "enableYAMLCompatibility": false or true + * - slightly change the whitespace around colons + * - "dropNullPlaceholders": false or true + * - Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's JavaScript, it makes for smaller output and the + * browser can handle the output just fine. + * - "useSpecialFloats": false or true + * - If true, outputs non-finite floating point values in the following way: + * NaN values as "NaN", positive infinity as "Infinity", and negative + * infinity as "-Infinity". + * - "precision": int + * - Number of precision digits for formatting of real values. + * - "precisionType": "significant"(default) or "decimal" + * - Type of precision for formatting of real values. + + * You can examine 'settings_` yourself + * to see the defaults. You can also write and read them just like any + * JSON Value. + * \sa setDefaults() + */ + Json::Value settings_; + + StreamWriterBuilder(); + ~StreamWriterBuilder() override; + + /** + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + StreamWriter* newStreamWriter() const override; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + /** A simple way to update a specific setting. + */ + Value& operator[](const String& key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults + */ + static void setDefaults(Json::Value* settings); +}; + +/** \brief Abstract class for writers. + * \deprecated Use StreamWriter. (And really, this is an implementation detail.) + */ +class JSONCPP_DEPRECATED("Use StreamWriter instead") JSON_API Writer { +public: + virtual ~Writer(); + + virtual String write(const Value& root) = 0; +}; + +/** \brief Outputs a Value in JSON format + *without formatting (not human friendly). + * + * The JSON document is written in a single line. It is not intended for 'human' + *consumption, + * but may be useful to support feature such as RPC where bandwidth is limited. + * \sa Reader, Value + * \deprecated Use StreamWriterBuilder. + */ +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4996) // Deriving from deprecated class +#endif +class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API FastWriter + : public Writer { +public: + FastWriter(); + ~FastWriter() override = default; + + void enableYAMLCompatibility(); + + /** \brief Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's JavaScript, it makes for smaller output and the + * browser can handle the output just fine. + */ + void dropNullPlaceholders(); + + void omitEndingLineFeed(); + +public: // overridden from Writer + String write(const Value& root) override; + +private: + void writeValue(const Value& value); + + String document_; + bool yamlCompatibilityEnabled_{false}; + bool dropNullPlaceholders_{false}; + bool omitEndingLineFeed_{false}; +}; +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +/** \brief Writes a Value in JSON format in a + *human friendly way. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + *line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + *types, + * and all the values fit on one lines, then print the array on a single + *line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + *#CommentPlacement. + * + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4996) // Deriving from deprecated class +#endif +class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API + StyledWriter : public Writer { +public: + StyledWriter(); + ~StyledWriter() override = default; + +public: // overridden from Writer + /** \brief Serialize a Value in JSON format. + * \param root Value to serialize. + * \return String containing the JSON document that represents the root value. + */ + String write(const Value& root) override; + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultilineArray(const Value& value); + void pushValue(const String& value); + void writeIndent(); + void writeWithIndent(const String& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + static bool hasCommentForValue(const Value& value); + static String normalizeEOL(const String& text); + + using ChildValues = std::vector; + + ChildValues childValues_; + String document_; + String indentString_; + unsigned int rightMargin_{74}; + unsigned int indentSize_{3}; + bool addChildValues_{false}; +}; +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +/** \brief Writes a Value in JSON format in a + human friendly way, + to a stream rather than to a string. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + types, + * and all the values fit on one lines, then print the array on a single + line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + #CommentPlacement. + * + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable : 4996) // Deriving from deprecated class +#endif +class JSONCPP_DEPRECATED("Use StreamWriterBuilder instead") JSON_API + StyledStreamWriter { +public: + /** + * \param indentation Each level will be indented by this amount extra. + */ + StyledStreamWriter(String indentation = "\t"); + ~StyledStreamWriter() = default; + +public: + /** \brief Serialize a Value in JSON format. + * \param out Stream to write to. (Can be ostringstream, e.g.) + * \param root Value to serialize. + * \note There is no point in deriving from Writer, since write() should not + * return a value. + */ + void write(OStream& out, const Value& root); + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultilineArray(const Value& value); + void pushValue(const String& value); + void writeIndent(); + void writeWithIndent(const String& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + static bool hasCommentForValue(const Value& value); + static String normalizeEOL(const String& text); + + using ChildValues = std::vector; + + ChildValues childValues_; + OStream* document_; + String indentString_; + unsigned int rightMargin_{74}; + String indentation_; + bool addChildValues_ : 1; + bool indented_ : 1; +}; +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(JSON_HAS_INT64) +String JSON_API valueToString(Int value); +String JSON_API valueToString(UInt value); +#endif // if defined(JSON_HAS_INT64) +String JSON_API valueToString(LargestInt value); +String JSON_API valueToString(LargestUInt value); +String JSON_API valueToString( + double value, unsigned int precision = Value::defaultRealPrecision, + PrecisionType precisionType = PrecisionType::significantDigits); +String JSON_API valueToString(bool value); +String JSON_API valueToQuotedString(const char* value); + +/// \brief Output using the StyledStreamWriter. +/// \see Json::operator>>() +JSON_API OStream& operator<<(OStream&, const Value& root); + +} // namespace Json + +#pragma pack(pop) + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_WRITER_H_INCLUDED diff --git a/third_lib/jsoncpp/libjsoncpp.so b/third_lib/jsoncpp/libjsoncpp.so new file mode 100644 index 0000000..bf3aa51 Binary files /dev/null and b/third_lib/jsoncpp/libjsoncpp.so differ diff --git a/unit_test/CMakeLists.txt b/unit_test/CMakeLists.txt new file mode 100644 index 0000000..ee6ae0a --- /dev/null +++ b/unit_test/CMakeLists.txt @@ -0,0 +1,11 @@ + +# message(STATUS "in unit_test/CMakeLists.txt.") + +if(board_test) + add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test/borad_test) +endif() + +if(test) + add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test/test) +endif() + diff --git a/unit_test/README.md b/unit_test/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/unit_test/README.md @@ -0,0 +1 @@ + diff --git a/unit_test/borad_test/CMakeLists.txt b/unit_test/borad_test/CMakeLists.txt new file mode 100644 index 0000000..cb84a2b --- /dev/null +++ b/unit_test/borad_test/CMakeLists.txt @@ -0,0 +1,9 @@ +message(STATUS "in unit_test/borad_test/CMakeLists.txt.") + +if(uart) + add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test/borad_test/uart/uart3) +endif() + +if(json) + add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test/borad_test/json/jsoncppReadJsonData) +endif() diff --git a/unit_test/borad_test/README.md b/unit_test/borad_test/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/unit_test/borad_test/README.md @@ -0,0 +1 @@ + diff --git a/unit_test/borad_test/json/jsoncppReadJsonData/CMakeLists.txt b/unit_test/borad_test/json/jsoncppReadJsonData/CMakeLists.txt new file mode 100644 index 0000000..2a88e6f --- /dev/null +++ b/unit_test/borad_test/json/jsoncppReadJsonData/CMakeLists.txt @@ -0,0 +1,23 @@ +# cmake_minimum_required(VERSION 3.0) +# project(uart) +message(STATUS "unit_test/borad_test/json/jsoncppReadJsonData/CMakeLists.txt.") +# 设置项目名称 +project(jsontest) + +add_definitions("-Wall -g") + +# 添加头文件目录 +include_directories(/media/sf_share/gateway/third_lib/jsoncpp) + +add_executable(json_test main.cc) + +# 添加库文件目录(对于静态库或动态库) +# link_directories(/media/sf_share/gateway/third_lib/jsoncpp) +# target_link_libraries(json_test jsoncpp) +target_link_libraries(json_test /media/sf_share/gateway/third_lib/jsoncpp/libjsoncpp.so) + + +# install(TARGETS uart_test +# RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/bin) +install(TARGETS json_test + RUNTIME DESTINATION ${CMAKE_BINARY_DIR}/../bin) \ No newline at end of file diff --git a/unit_test/borad_test/json/jsoncppReadJsonData/main.cc b/unit_test/borad_test/json/jsoncppReadJsonData/main.cc new file mode 100644 index 0000000..1a98b29 --- /dev/null +++ b/unit_test/borad_test/json/jsoncppReadJsonData/main.cc @@ -0,0 +1,182 @@ +/* + This is a part of Tocy's Sample Code + demo to use JsonCpp + https://github.com/open-source-parsers/jsoncpp +*/ + +#include +#include +#include +#include +#include "json/json.h" + +using namespace std; + +// =========================== parse-json ================================== +void demo_simple() +{ + ifstream ifs; + ifs.open("checkjson.json"); + /* + In this file, its content is : (key-value) + { + "name" : "tocy", + "age" : 1000 + } + */ + assert(ifs.is_open()); + + Json::Reader reader; + Json::Value root; + if (!reader.parse(ifs, root, false)) + { + cerr << "parse failed \n"; + return; + } + + string name = root["name"].asString(); + int age = root["age"].asInt(); + + cout << "demo read from filet result =============\n"; + cout << "name : " << name << endl; + cout << "age : " << age << endl; + cout << endl; + + ifs.close(); +} + +void demo_parse_mem_object() +{ + const char json_data[] = + "{\"name\" : \"Tocy\", \"salary\" : 100, \"msg\" : \"work hard\", \ + \"files\" : [\"1.ts\", \"2.txt\"]}"; + + Json::Reader reader; + Json::Value root; + // reader将Json字符串解析到root,root将包含Json里所有子元素 + if (!reader.parse(json_data, json_data + sizeof(json_data), root)) + { + cerr << "json parse failed\n"; + return; + } + + cout << "demo read from memory using object ---------\n"; + string name = root["name"].asString(); + int salary = root["salary"].asInt(); + string msg = root["msg"].asString(); + cout << "name: " << name << " salary: " << salary; + cout << " msg: " << msg << endl; + cout << "enter files: \n"; + Json::Value files = root["files"]; // read array here + for (unsigned int i = 0; i < files.size(); ++i) + { + cout << files[i].asString() << " "; + } + cout << endl << endl; +} + +void demo_parse_mem_array() +{ + const char json_data[] = + "[{\"name\" : \"Tocy\", \"salary\" : 100}, {\"name\" : \"Kit\", \"salary\" : 89}, \ + \"a json note\"]"; + + Json::Reader reader; + Json::Value root; + // reader将Json字符串解析到root,root将包含Json里所有子元素 + if (!reader.parse(json_data, json_data + sizeof(json_data), root)) + { + cerr << "json parse failed\n"; + return; + } + + cout << "demo read from memory using array---------\n"; + unsigned int count = root.size() - 1; + for (unsigned int i = 0; i < count; ++i) + { + string name = root[i]["name"].asString(); + int salary = root[i]["salary"].asInt(); + cout << "name: " << name << " salary: " << salary << endl; + } + cout << "last msg: " << root[count].asString() << endl; + cout << endl << endl; +} + + +// =================== save-json ===================================== +void demo_write_simple() +{ + Json::Value root; + Json::FastWriter writer; + Json::Value person; + + person["name"] = "tocy"; + person["age"] = 1000; + root.append(person); + + string json_file = writer.write(root); + cout << "demo write json ==============\n"; + cout << json_file << endl; +} + +void demo_write_object() +{ + Json::Value root; + Json::FastWriter writer; + + root["name"] = "tocy"; + root["salary"] = 100; + root["msg"] = "work hard"; + Json::Value files; + files[0] = "1.ts"; + files[1] = "2.txt"; + root["files"] = files; + + string json_file = writer.write(root); + cout << "demo write json object ==============\n"; + cout << json_file << endl; +} + +void demo_write_array() +{ + Json::Value root; + Json::FastWriter writer; + + { + Json::Value person; + person["name"] = "Tocy"; + person["salary"] = 100; + root[0] = person; + } + + { + Json::Value person; + person["name"] = "Kit"; + person["salary"] = 89; + root[1] = person; + } + + root[2] = "a json note"; + + string json_file = writer.write(root); + cout << "demo write json ==============\n"; + cout << json_file << endl; +} + +int main(int argc, char * argv[]) +{ + // demo_simple(); + // demo_parse_mem_object(); + // demo_parse_mem_array(); + + fflush(stdout); + printf("hello world\n"); + fflush(stdout); + + cout << "\n\nnext are write json example\n================================\n" << std::flush;; + + // demo_write_simple(); + // demo_write_object(); + // demo_write_array(); + return 0; +} diff --git a/unit_test/borad_test/uart/README.md b/unit_test/borad_test/uart/README.md new file mode 100644 index 0000000..e07d318 --- /dev/null +++ b/unit_test/borad_test/uart/README.md @@ -0,0 +1,5 @@ +uart1 +>使用的为正点原子例程 + +uart2 +>打印和发送数据 \ No newline at end of file diff --git a/unit_test/borad_test/uart/uart1/CMakeLists.txt b/unit_test/borad_test/uart/uart1/CMakeLists.txt new file mode 100644 index 0000000..05796a2 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.0) +project(uart) + +add_definitions("-Wall -g") + +add_executable(${PROJECT_NAME} uart.cc) + +install(TARGETS ${PROJECT_NAME} + RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}) + diff --git a/unit_test/borad_test/uart/uart1/build.sh b/unit_test/borad_test/uart/uart1/build.sh new file mode 100644 index 0000000..a7d4ce0 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build.sh @@ -0,0 +1,16 @@ +#/bin/bash + +export ANDROID_NDK=/home/vboxuser/tools/ndk/android-ndk-r16b + +rm -r build +mkdir build && cd build + +cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI="armeabi-v7a" \ + -DANDROID_NDK=$ANDROID_NDK \ + -DANDROID_PLATFORM=android-22 \ + .. + +make && make install + +cd .. diff --git a/unit_test/borad_test/uart/uart1/build/CMakeCache.txt b/unit_test/borad_test/uart/uart1/build/CMakeCache.txt new file mode 100644 index 0000000..58553c8 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeCache.txt @@ -0,0 +1,381 @@ +# This is the CMakeCache file. +# For build in directory: /home/vboxuser/gateway/test/uart/uart1/build +# It was generated by CMake: /usr/local/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//No help, variable specified on the command line. +ANDROID_ABI:UNINITIALIZED=armeabi-v7a + +//No help, variable specified on the command line. +ANDROID_NDK:UNINITIALIZED=/home/vboxuser/tools/ndk/android-ndk-r16b + +//No help, variable specified on the command line. +ANDROID_PLATFORM:UNINITIALIZED=android-22 + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line + +//Archiver +CMAKE_AR:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar + +//Flags used by the compiler during all build types. +CMAKE_ASM_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_ASM_FLAGS_DEBUG:STRING= + +//Flags used by the compiler during release builds. +CMAKE_ASM_FLAGS_RELEASE:STRING= + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//LLVM archiver +CMAKE_CXX_COMPILER_AR:FILEPATH=CMAKE_CXX_COMPILER_AR-NOTFOUND + +//Generate index for LLVM archive +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=CMAKE_CXX_COMPILER_RANLIB-NOTFOUND + +//Flags used by the compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_CXX_FLAGS_DEBUG:STRING= + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_CXX_FLAGS_RELEASE:STRING= + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Libraries linked by default with all C++ applications. +CMAKE_CXX_STANDARD_LIBRARIES:STRING=-latomic -lm "/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a" + +//LLVM archiver +CMAKE_C_COMPILER_AR:FILEPATH=CMAKE_C_COMPILER_AR-NOTFOUND + +//Generate index for LLVM archive +CMAKE_C_COMPILER_RANLIB:FILEPATH=CMAKE_C_COMPILER_RANLIB-NOTFOUND + +//Flags used by the compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_C_FLAGS_DEBUG:STRING= + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_C_FLAGS_RELEASE:STRING= + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Libraries linked by default with all C applications. +CMAKE_C_STANDARD_LIBRARIES:STRING=-latomic -lm + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make + +//Flags used by the linker during the creation of modules. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=uart + +//Ranlib +CMAKE_RANLIB:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf + +//Flags used by the linker during the creation of dll's. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip + +//The CMake toolchain file +CMAKE_TOOLCHAIN_FILE:FILEPATH=/home/vboxuser/tools/ndk/android-ndk-r16b/build/cmake/android.toolchain.cmake + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Value Computed by CMake +uart_BINARY_DIR:STATIC=/home/vboxuser/gateway/test/uart/uart1/build + +//Value Computed by CMake +uart_SOURCE_DIR:STATIC=/home/vboxuser/gateway/test/uart/uart1 + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/vboxuser/gateway/test/uart/uart1/build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=20 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=6 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/local/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/local/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/local/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_STANDARD_LIBRARIES +CMAKE_CXX_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_STANDARD_LIBRARIES +CMAKE_C_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/local/bin/ccmake +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/vboxuser/gateway/test/uart/uart1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/local/share/cmake-3.20 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 + diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeCCompiler.cmake b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeCCompiler.cmake new file mode 100644 index 0000000..06271c1 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeCCompiler.cmake @@ -0,0 +1,78 @@ +set(CMAKE_C_COMPILER "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "Clang") +set(CMAKE_C_COMPILER_VERSION "3.8") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") + +set(CMAKE_C_PLATFORM_ID "") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar") +set(CMAKE_C_COMPILER_AR "CMAKE_C_COMPILER_AR-NOTFOUND") +set(CMAKE_RANLIB "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib") +set(CMAKE_C_COMPILER_RANLIB "CMAKE_C_COMPILER_RANLIB-NOTFOUND") +set(CMAKE_LINKER "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCC ) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "4") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include;/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;dl;c;gcc;dl") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeCXXCompiler.cmake b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..71a4728 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeCXXCompiler.cmake @@ -0,0 +1,91 @@ +set(CMAKE_CXX_COMPILER "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "Clang") +set(CMAKE_CXX_COMPILER_VERSION "3.8") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "98") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "") +set(CMAKE_CXX23_COMPILE_FEATURES "") + +set(CMAKE_CXX_PLATFORM_ID "") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar") +set(CMAKE_CXX_COMPILER_AR "CMAKE_CXX_COMPILER_AR-NOTFOUND") +set(CMAKE_RANLIB "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "CMAKE_CXX_COMPILER_RANLIB-NOTFOUND") +set(CMAKE_LINKER "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCXX ) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "4") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include;/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc;gcc;dl;c;gcc;gcc;dl") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_C.bin b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_C.bin new file mode 100644 index 0000000..3677804 Binary files /dev/null and b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_C.bin differ diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_CXX.bin b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_CXX.bin new file mode 100644 index 0000000..6e19514 Binary files /dev/null and b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeDetermineCompilerABI_CXX.bin differ diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeSystem.cmake b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeSystem.cmake new file mode 100644 index 0000000..5158fd6 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/3.20.6/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-4.15.0-142-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "4.15.0-142-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + +include("/home/vboxuser/tools/ndk/android-ndk-r16b/build/cmake/android.toolchain.cmake") + +set(CMAKE_SYSTEM "Android-1") +set(CMAKE_SYSTEM_NAME "Android") +set(CMAKE_SYSTEM_VERSION "1") +set(CMAKE_SYSTEM_PROCESSOR "armv7-a") + +set(CMAKE_CROSSCOMPILING "TRUE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/CMakeDirectoryInformation.cmake b/unit_test/borad_test/uart/uart1/build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..e2dbc11 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/vboxuser/gateway/test/uart/uart1") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/vboxuser/gateway/test/uart/uart1/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/CMakeOutput.log b/unit_test/borad_test/uart/uart1/build/CMakeFiles/CMakeOutput.log new file mode 100644 index 0000000..84e220d --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/CMakeOutput.log @@ -0,0 +1,358 @@ +The target system is: Android - 1 - armv7-a +The host system is: Linux - 4.15.0-142-generic - x86_64 +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_afa37/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_afa37.dir/build.make CMakeFiles/cmTC_afa37.dir/build +make[1]: Entering directory `/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c +Android clang version 5.0.300080 (based on LLVM 5.0.300080) +Target: armv7-none-linux-android +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@thumb +Candidate multilib: armv7-a;@armv7 +Candidate multilib: armv7-a/thumb;@armv7@thumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@armv7@thumb + "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" -cc1 -triple thumbv7-none-linux-android -S -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -no-integrated-as -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu cortex-a8 -target-feature +soft-float-abi -target-feature -fp-only-sp -target-feature +d16 -target-feature +vfp3 -target-feature -fp16 -target-feature -vfp4 -target-feature -fp-armv8 -target-feature -neon -target-feature -crypto -target-abi aapcs-linux -mfloat-abi soft -target-linker-version 2.24 -v -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -ffunction-sections -coverage-notes-file /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp/CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.gcno -resource-dir /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080 -dependency-file CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o.d -sys-header-deps -MT CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D __ANDROID_API__=22 -D ANDROID -isysroot /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include -Wformat -fno-dwarf-directory-asm -fdebug-compilation-dir /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fmessage-length 0 -femulated-tls -stack-protector 2 -fallow-half-arguments-and-returns -fno-signed-char -fobjc-runtime=gcc -fdiagnostics-show-option -o /tmp/CMakeCCompilerABI-1f81e1.s -x c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c +clang -cc1 version 5.0.300080 based upon LLVM 5.0.300080 default target x86_64-unknown-linux +ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include" +ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include" +#include "..." search starts here: +#include <...> search starts here: + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include +End of search list. + "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/as" -mfpu=neon -mfloat-abi=softfp -march=armv7-a -mfpu=vfpv3-d16 --noexecstack -o CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o /tmp/CMakeCCompilerABI-1f81e1.s +Linking C executable cmTC_afa37 +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_afa37.dir/link.txt --verbose=1 +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a --sysroot /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections -Wl,-z,nocopyreloc -pie -fPIE -v CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -o cmTC_afa37 +Android clang version 5.0.300080 (based on LLVM 5.0.300080) +Target: armv7-none-linux-android +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@thumb +Candidate multilib: armv7-a;@armv7 +Candidate multilib: armv7-a/thumb;@armv7@thumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@armv7@thumb + "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -pie -z relro -X --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_afa37 /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib --exclude-libs libgcc.a --exclude-libs libatomic.a --build-id --warn-shared-textrel --fatal-warnings --fix-cortex-a8 --no-undefined -z noexecstack -z relro -z now --gc-sections -z nocopyreloc CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -lgcc -ldl -lc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o +make[1]: Leaving directory `/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp' + + + +Parsed C implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + end of search list found + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + implicit include dirs: [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include;/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(arm-linux-androideabi-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_afa37/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_afa37.dir/build.make CMakeFiles/cmTC_afa37.dir/build] + ignore line: [make[1]: Entering directory `/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa --noexecstack -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c] + ignore line: [Android clang version 5.0.300080 (based on LLVM 5.0.300080)] + ignore line: [Target: armv7-none-linux-android] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@thumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@armv7] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + ignore line: [ "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" -cc1 -triple thumbv7-none-linux-android -S -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -no-integrated-as -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu cortex-a8 -target-feature +soft-float-abi -target-feature -fp-only-sp -target-feature +d16 -target-feature +vfp3 -target-feature -fp16 -target-feature -vfp4 -target-feature -fp-armv8 -target-feature -neon -target-feature -crypto -target-abi aapcs-linux -mfloat-abi soft -target-linker-version 2.24 -v -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -ffunction-sections -coverage-notes-file /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp/CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.gcno -resource-dir /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080 -dependency-file CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o.d -sys-header-deps -MT CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D __ANDROID_API__=22 -D ANDROID -isysroot /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include -Wformat -fno-dwarf-directory-asm -fdebug-compilation-dir /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fmessage-length 0 -femulated-tls -stack-protector 2 -fallow-half-arguments-and-returns -fno-signed-char -fobjc-runtime=gcc -fdiagnostics-show-option -o /tmp/CMakeCCompilerABI-1f81e1.s -x c /usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c] + ignore line: [clang -cc1 version 5.0.300080 based upon LLVM 5.0.300080 default target x86_64-unknown-linux] + ignore line: [ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include"] + ignore line: [ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + ignore line: [End of search list.] + ignore line: [ "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/as" -mfpu=neon -mfloat-abi=softfp -march=armv7-a -mfpu=vfpv3-d16 --noexecstack -o CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o /tmp/CMakeCCompilerABI-1f81e1.s] + ignore line: [Linking C executable cmTC_afa37] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_afa37.dir/link.txt --verbose=1] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa --noexecstack -Wformat -Wl --exclude-libs libgcc.a -Wl --exclude-libs libatomic.a --sysroot /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -Wl --build-id -Wl --warn-shared-textrel -Wl --fatal-warnings -Wl --fix-cortex-a8 -Wl --no-undefined -Wl -z noexecstack -Qunused-arguments -Wl -z relro -Wl -z now -Wl --gc-sections -Wl -z nocopyreloc -pie -fPIE -v CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -o cmTC_afa37 ] + ignore line: [Android clang version 5.0.300080 (based on LLVM 5.0.300080)] + ignore line: [Target: armv7-none-linux-android] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@thumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@armv7] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + link line: [ "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -pie -z relro -X --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_afa37 /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib --exclude-libs libgcc.a --exclude-libs libatomic.a --build-id --warn-shared-textrel --fatal-warnings --fix-cortex-a8 --no-undefined -z noexecstack -z relro -z now --gc-sections -z nocopyreloc CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o -lgcc -ldl -lc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] + arg [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld] ==> ignore + arg [--sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm] ==> ignore + arg [-pie] ==> ignore + arg [-zrelro] ==> ignore + arg [-X] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [armelf_linux_eabi] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/system/bin/linker] ==> ignore + arg [-o] ==> ignore + arg [cmTC_afa37] ==> ignore + arg [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + arg [--exclude-libs] ==> ignore + arg [libgcc.a] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libatomic.a] ==> ignore + arg [--build-id] ==> ignore + arg [--warn-shared-textrel] ==> ignore + arg [--fatal-warnings] ==> ignore + arg [--fix-cortex-a8] ==> ignore + arg [--no-undefined] ==> ignore + arg [-znoexecstack] ==> ignore + arg [-zrelro] ==> ignore + arg [-znow] ==> ignore + arg [--gc-sections] ==> ignore + arg [-znocopyreloc] ==> ignore + arg [CMakeFiles/cmTC_afa37.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] + collapse obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtbegin_dynamic.o] + collapse obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtend_android.o] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + implicit libs: [gcc;dl;c;gcc;dl] + implicit objs: [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtbegin_dynamic.o;/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtend_android.o] + implicit dirs: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + implicit fwks: [] + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_7e4bf/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_7e4bf.dir/build.make CMakeFiles/cmTC_7e4bf.dir/build +make[1]: Entering directory `/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o.d -o CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp +Android clang version 5.0.300080 (based on LLVM 5.0.300080) +Target: armv7-none-linux-android +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@thumb +Candidate multilib: armv7-a;@armv7 +Candidate multilib: armv7-a/thumb;@armv7@thumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@armv7@thumb + "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++" -cc1 -triple thumbv7-none-linux-android -S -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -no-integrated-as -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu cortex-a8 -target-feature +soft-float-abi -target-feature -fp-only-sp -target-feature +d16 -target-feature +vfp3 -target-feature -fp16 -target-feature -vfp4 -target-feature -fp-armv8 -target-feature -neon -target-feature -crypto -target-abi aapcs-linux -mfloat-abi soft -target-linker-version 2.24 -v -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -ffunction-sections -coverage-notes-file /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp/CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.gcno -resource-dir /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080 -dependency-file CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o.d -sys-header-deps -MT CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D __ANDROID_API__=22 -D ANDROID -isysroot /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include -Wformat -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fmessage-length 0 -femulated-tls -stack-protector 2 -fallow-half-arguments-and-returns -fno-signed-char -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o /tmp/CMakeCXXCompilerABI-190a2e.s -x c++ /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp +clang -cc1 version 5.0.300080 based upon LLVM 5.0.300080 default target x86_64-unknown-linux +ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include" +ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include" +#include "..." search starts here: +#include <...> search starts here: + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include +End of search list. + "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/as" -mfpu=neon -mfloat-abi=softfp -march=armv7-a -mfpu=vfpv3-d16 --noexecstack -o CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o /tmp/CMakeCXXCompilerABI-190a2e.s +Linking CXX executable cmTC_7e4bf +/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7e4bf.dir/link.txt --verbose=1 +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a --sysroot /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections -Wl,-z,nocopyreloc -pie -fPIE -v CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_7e4bf +Android clang version 5.0.300080 (based on LLVM 5.0.300080) +Target: armv7-none-linux-android +Thread model: posix +InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin +Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x +Candidate multilib: thumb;@thumb +Candidate multilib: armv7-a;@armv7 +Candidate multilib: armv7-a/thumb;@armv7@thumb +Candidate multilib: .; +Selected multilib: armv7-a/thumb;@armv7@thumb + "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -pie -z relro -X --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_7e4bf /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib --exclude-libs libgcc.a --exclude-libs libatomic.a --build-id --warn-shared-textrel --fatal-warnings --fix-cortex-a8 --no-undefined -z noexecstack -z relro -z now --gc-sections -z nocopyreloc CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc -lgcc -ldl -lc -lgcc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o +make[1]: Leaving directory `/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward] + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] + add: [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + end of search list found + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] + collapse include dir [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + implicit include dirs: [/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include;/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include;/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward;/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include;/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(arm-linux-androideabi-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f Makefile cmTC_7e4bf/fast && /home/vboxuser/tools/ndk/android_toolchain_16b/bin/make -f CMakeFiles/cmTC_7e4bf.dir/build.make CMakeFiles/cmTC_7e4bf.dir/build] + ignore line: [make[1]: Entering directory `/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa --noexecstack -Wformat -fPIE -v -MD -MT CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o.d -o CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -c /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Android clang version 5.0.300080 (based on LLVM 5.0.300080)] + ignore line: [Target: armv7-none-linux-android] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@thumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@armv7] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + ignore line: [ "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++" -cc1 -triple thumbv7-none-linux-android -S -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -no-integrated-as -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu cortex-a8 -target-feature +soft-float-abi -target-feature -fp-only-sp -target-feature +d16 -target-feature +vfp3 -target-feature -fp16 -target-feature -vfp4 -target-feature -fp-armv8 -target-feature -neon -target-feature -crypto -target-abi aapcs-linux -mfloat-abi soft -target-linker-version 2.24 -v -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -ffunction-sections -coverage-notes-file /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp/CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.gcno -resource-dir /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080 -dependency-file CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o.d -sys-header-deps -MT CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D __ANDROID_API__=22 -D ANDROID -isysroot /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include -internal-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include -internal-externc-isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include -Wformat -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/CMakeTmp -ferror-limit 19 -fmessage-length 0 -femulated-tls -stack-protector 2 -fallow-half-arguments-and-returns -fno-signed-char -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o /tmp/CMakeCXXCompilerABI-190a2e.s -x c++ /usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [clang -cc1 version 5.0.300080 based upon LLVM 5.0.300080 default target x86_64-unknown-linux] + ignore line: [ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/local/include"] + ignore line: [ignoring nonexistent directory "/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include] + ignore line: [ /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include] + ignore line: [End of search list.] + ignore line: [ "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/as" -mfpu=neon -mfloat-abi=softfp -march=armv7-a -mfpu=vfpv3-d16 --noexecstack -o CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o /tmp/CMakeCXXCompilerABI-190a2e.s] + ignore line: [Linking CXX executable cmTC_7e4bf] + ignore line: [/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7e4bf.dir/link.txt --verbose=1] + ignore line: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa --noexecstack -Wformat -Wl --exclude-libs libgcc.a -Wl --exclude-libs libatomic.a --sysroot /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -Wl --build-id -Wl --warn-shared-textrel -Wl --fatal-warnings -Wl --fix-cortex-a8 -Wl --no-undefined -Wl -z noexecstack -Qunused-arguments -Wl -z relro -Wl -z now -Wl --gc-sections -Wl -z nocopyreloc -pie -fPIE -v CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_7e4bf ] + ignore line: [Android clang version 5.0.300080 (based on LLVM 5.0.300080)] + ignore line: [Target: armv7-none-linux-android] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin] + ignore line: [Found candidate GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Selected GCC installation: /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x] + ignore line: [Candidate multilib: thumb] + ignore line: [@thumb] + ignore line: [Candidate multilib: armv7-a] + ignore line: [@armv7] + ignore line: [Candidate multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + ignore line: [Candidate multilib: .] + ignore line: [] + ignore line: [Selected multilib: armv7-a/thumb] + ignore line: [@armv7@thumb] + link line: [ "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld" --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -pie -z relro -X --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o cmTC_7e4bf /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib -L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb -L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib --exclude-libs libgcc.a --exclude-libs libatomic.a --build-id --warn-shared-textrel --fatal-warnings --fix-cortex-a8 --no-undefined -z noexecstack -z relro -z now --gc-sections -z nocopyreloc CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc -lgcc -ldl -lc -lgcc -lgcc -ldl /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] + arg [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld] ==> ignore + arg [--sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm] ==> ignore + arg [-pie] ==> ignore + arg [-zrelro] ==> ignore + arg [-X] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [armelf_linux_eabi] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/system/bin/linker] ==> ignore + arg [-o] ==> ignore + arg [cmTC_7e4bf] ==> ignore + arg [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] + arg [-L/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] ==> dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + arg [--exclude-libs] ==> ignore + arg [libgcc.a] ==> ignore + arg [--exclude-libs] ==> ignore + arg [libatomic.a] ==> ignore + arg [--build-id] ==> ignore + arg [--warn-shared-textrel] ==> ignore + arg [--fatal-warnings] ==> ignore + arg [--fix-cortex-a8] ==> ignore + arg [--no-undefined] ==> ignore + arg [-znoexecstack] ==> ignore + arg [-zrelro] ==> ignore + arg [-znow] ==> ignore + arg [--gc-sections] ==> ignore + arg [-znocopyreloc] ==> ignore + arg [CMakeFiles/cmTC_7e4bf.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc] ==> lib [gcc] + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [-lgcc] ==> lib [gcc] + arg [-ldl] ==> lib [dl] + arg [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] ==> obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] + collapse obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtbegin_dynamic.o] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtbegin_dynamic.o] + collapse obj [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib/crtend_android.o] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtend_android.o] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/../lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/../lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/lib/armv7-a/thumb] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb] + collapse library dir [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] ==> [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + implicit libs: [stdc++;m;gcc;gcc;dl;c;gcc;gcc;dl] + implicit objs: [/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtbegin_dynamic.o;/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib/crtend_android.o] + implicit dirs: [/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/lib/linux/arm;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/armv7-a/thumb;/home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm/usr/lib] + implicit fwks: [] + + diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/Makefile.cmake b/unit_test/borad_test/uart/uart1/build/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..46643e1 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/Makefile.cmake @@ -0,0 +1,81 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "../CMakeLists.txt" + "CMakeFiles/3.20.6/CMakeCCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.20.6/CMakeSystem.cmake" + "/home/vboxuser/tools/ndk/android-ndk-r16b/build/cmake/android.toolchain.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeCCompiler.cmake.in" + "/usr/local/share/cmake-3.20/Modules/CMakeCCompilerABI.c" + "/usr/local/share/cmake-3.20/Modules/CMakeCInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeCXXCompiler.cmake.in" + "/usr/local/share/cmake-3.20/Modules/CMakeCXXCompilerABI.cpp" + "/usr/local/share/cmake-3.20/Modules/CMakeCXXInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCXXCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeDetermineSystem.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeFindBinUtils.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeGenericSystem.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeInitializeConfigs.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeLanguageInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeParseImplicitIncludeInfo.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeParseLibraryArchitecture.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeSystem.cmake.in" + "/usr/local/share/cmake-3.20/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeTestCCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeTestCXXCompiler.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeTestCompilerCommon.cmake" + "/usr/local/share/cmake-3.20/Modules/CMakeUnixFindMake.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-C.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-CXX.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang-FindBinUtils.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/Clang.cmake" + "/usr/local/share/cmake-3.20/Modules/Compiler/GNU.cmake" + "/usr/local/share/cmake-3.20/Modules/Internal/FeatureTesting.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Clang-C.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Clang-CXX.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Clang.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Determine-C.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Determine-CXX.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Determine.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android-Initialize.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Android/Determine-Compiler.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/Linux.cmake" + "/usr/local/share/cmake-3.20/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.20.6/CMakeSystem.cmake" + "CMakeFiles/3.20.6/CMakeCCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCXXCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCCompiler.cmake" + "CMakeFiles/3.20.6/CMakeCXXCompiler.cmake" + "CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/uart.dir/DependInfo.cmake" + ) diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/Makefile2 b/unit_test/borad_test/uart/uart1/build/CMakeFiles/Makefile2 new file mode 100644 index 0000000..2a37c5e --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/Makefile2 @@ -0,0 +1,112 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/vboxuser/gateway/test/uart/uart1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/vboxuser/gateway/test/uart/uart1/build + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/uart.dir/all +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/uart.dir/clean +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/uart.dir + +# All Build rule for target. +CMakeFiles/uart.dir/all: + $(MAKE) $(MAKESILENT) -f CMakeFiles/uart.dir/build.make CMakeFiles/uart.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/uart.dir/build.make CMakeFiles/uart.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles --progress-num=1,2 "Built target uart" +.PHONY : CMakeFiles/uart.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/uart.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles 2 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/uart.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles 0 +.PHONY : CMakeFiles/uart.dir/rule + +# Convenience name for target. +uart: CMakeFiles/uart.dir/rule +.PHONY : uart + +# clean rule for target. +CMakeFiles/uart.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/uart.dir/build.make CMakeFiles/uart.dir/clean +.PHONY : CMakeFiles/uart.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/TargetDirectories.txt b/unit_test/borad_test/uart/uart1/build/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..a48528f --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,7 @@ +/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/install/strip.dir +/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/install/local.dir +/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/uart.dir +/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/rebuild_cache.dir +/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/edit_cache.dir +/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/install.dir +/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/list_install_components.dir diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/cmake.check_cache b/unit_test/borad_test/uart/uart1/build/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/progress.marks b/unit_test/borad_test/uart/uart1/build/CMakeFiles/progress.marks new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +2 diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/DependInfo.cmake b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/DependInfo.cmake new file mode 100644 index 0000000..b20bab9 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/DependInfo.cmake @@ -0,0 +1,19 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/vboxuser/gateway/test/uart/uart1/uart.cc" "CMakeFiles/uart.dir/uart.cc.o" "gcc" "CMakeFiles/uart.dir/uart.cc.o.d" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/build.make b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/build.make new file mode 100644 index 0000000..a64909c --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/build.make @@ -0,0 +1,110 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/vboxuser/gateway/test/uart/uart1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/vboxuser/gateway/test/uart/uart1/build + +# Include any dependencies generated for this target. +include CMakeFiles/uart.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/uart.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/uart.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/uart.dir/flags.make + +CMakeFiles/uart.dir/uart.cc.o: CMakeFiles/uart.dir/flags.make +CMakeFiles/uart.dir/uart.cc.o: ../uart.cc +CMakeFiles/uart.dir/uart.cc.o: CMakeFiles/uart.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/uart.dir/uart.cc.o" + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/uart.dir/uart.cc.o -MF CMakeFiles/uart.dir/uart.cc.o.d -o CMakeFiles/uart.dir/uart.cc.o -c /home/vboxuser/gateway/test/uart/uart1/uart.cc + +CMakeFiles/uart.dir/uart.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/uart.dir/uart.cc.i" + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/vboxuser/gateway/test/uart/uart1/uart.cc > CMakeFiles/uart.dir/uart.cc.i + +CMakeFiles/uart.dir/uart.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/uart.dir/uart.cc.s" + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/vboxuser/gateway/test/uart/uart1/uart.cc -o CMakeFiles/uart.dir/uart.cc.s + +# Object files for target uart +uart_OBJECTS = \ +"CMakeFiles/uart.dir/uart.cc.o" + +# External object files for target uart +uart_EXTERNAL_OBJECTS = + +uart: CMakeFiles/uart.dir/uart.cc.o +uart: CMakeFiles/uart.dir/build.make +uart: CMakeFiles/uart.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable uart" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/uart.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/uart.dir/build: uart +.PHONY : CMakeFiles/uart.dir/build + +CMakeFiles/uart.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/uart.dir/cmake_clean.cmake +.PHONY : CMakeFiles/uart.dir/clean + +CMakeFiles/uart.dir/depend: + cd /home/vboxuser/gateway/test/uart/uart1/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/vboxuser/gateway/test/uart/uart1 /home/vboxuser/gateway/test/uart/uart1 /home/vboxuser/gateway/test/uart/uart1/build /home/vboxuser/gateway/test/uart/uart1/build /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles/uart.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/uart.dir/depend + diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/cmake_clean.cmake b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/cmake_clean.cmake new file mode 100644 index 0000000..328a43f --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/uart.dir/uart.cc.o" + "CMakeFiles/uart.dir/uart.cc.o.d" + "uart" + "uart.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/uart.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.internal b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.internal new file mode 100644 index 0000000..e3d00b2 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.internal @@ -0,0 +1,168 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +CMakeFiles/uart.dir/uart.cc.o + /home/vboxuser/gateway/test/uart/uart1/uart.cc + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iostream + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++config.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/os_defines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/cpu_defines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ostream + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ios + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iosfwd + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stringfwd.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/memoryfwd.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/postypes.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwchar + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wchar.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/cdefs.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/api-level.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/versioning.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdio.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stddef.h + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdint.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdint.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wchar_limits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/int-ll64.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/bitsperlong.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/posix_types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stddef.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/compiler.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/posix_types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/pthread_types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdarg.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/seek_constants.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/struct_file.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/time.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/time.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/time.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/select.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/signal.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/timespec.h + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/limits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/limits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/float.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/limits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/posix_limits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/signal.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/signal.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/signal-defs.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/siginfo.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ucontext.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/user.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_signal_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/xlocale.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/mbstate_t.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wctype.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/exception + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/atomic_lockfree_defines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/char_traits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_algobase.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/functexcept.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/exception_defines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cpp_type_traits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/type_traits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/numeric_traits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_pair.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/move.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/concept_check.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_types.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_funcs.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/debug/debug.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ptr_traits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/predefined_ops.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/localefwd.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++locale.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/clocale + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/locale.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cctype + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/ctype.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ios_base.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/atomicity.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr-default.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/pthread.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sched.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/sched.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/atomic_word.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/string + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/allocator.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++allocator.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/new_allocator.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/new + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream_insert.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cxxabi_forced.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_function.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward/binders.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/range_access.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.tcc + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.tcc + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/streambuf + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf.tcc + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwctype + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wctype.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_base.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf_iterator.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_inline.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.tcc + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.tcc + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream.tcc + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/istream + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/istream.tcc + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdlib.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/alloca.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/malloc.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_stdlib_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/stat.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stat.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_sys_stat_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/fcntl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fadvise.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/falloc.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fcntl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/fcntl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/fcntl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/uio.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/fcntl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/lockf.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/unistd.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/getopt.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/ioctl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/sysconf.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/errno.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/errno.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/errno.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno-base.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_errno_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/string.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/strcasecmp.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/strings.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_strings_inlines.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/termios.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ioctl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/ioctl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctl.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/termios.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termios.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termios.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termbits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termbits.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctls.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctls.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/tty.h + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_termios_inlines.h + diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.make b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.make new file mode 100644 index 0000000..4f36a6e --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.make @@ -0,0 +1,493 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +CMakeFiles/uart.dir/uart.cc.o: ../uart.cc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iostream \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++config.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/os_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/cpu_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ostream \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ios \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iosfwd \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stringfwd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/memoryfwd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/postypes.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwchar \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/cdefs.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/api-level.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/versioning.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wchar_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/int-ll64.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/compiler.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/pthread_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdarg.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/seek_constants.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/struct_file.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/select.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/timespec.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/float.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/posix_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/signal-defs.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ucontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/user.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_signal_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/xlocale.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/mbstate_t.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/exception \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/atomic_lockfree_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/char_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_algobase.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/functexcept.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/exception_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cpp_type_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/type_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/numeric_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_pair.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/move.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/concept_check.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_funcs.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/debug/debug.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ptr_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/predefined_ops.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/localefwd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/clocale \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cctype \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/ctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ios_base.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/atomicity.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr-default.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/pthread.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/atomic_word.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/string \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/allocator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++allocator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/new_allocator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/new \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream_insert.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cxxabi_forced.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_function.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward/binders.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/range_access.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/streambuf \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwctype \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_base.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf_iterator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_inline.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/istream \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/istream.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/alloca.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/malloc.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_stdlib_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/stat.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stat.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_sys_stat_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fadvise.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/falloc.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/uio.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/lockf.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/unistd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/getopt.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/sysconf.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno-base.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_errno_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/strcasecmp.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/strings.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_strings_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termbits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termbits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctls.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctls.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/tty.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_termios_inlines.h + + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_termios_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/tty.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctls.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ioctl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_strings_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/strcasecmp.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/string.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/sysconf.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/unistd.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/fcntl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fcntl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/falloc.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_sys_stat_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stat.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/istream.tcc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/istream: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/fcntl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream.tcc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.tcc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwctype: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno-base.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/streambuf: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.tcc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.tcc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/range_access.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/uio.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_function.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/pthread_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/termios.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/signal.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/select.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/int-ll64.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/time.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwchar: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/exception: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/seek_constants.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/time.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/posix_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stddef.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/allocator.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/bitsperlong.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cxxabi_forced.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stringfwd.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/stat.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_inline.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stddef.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iosfwd: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/time.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdint.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/struct_file.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ostream: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/ioctl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/atomicity.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/user.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ios: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++locale.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/float.h: + +../uart.cc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/api-level.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/memoryfwd.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdlib.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/cpu_defines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.tcc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wchar.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ucontext.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf_iterator.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/locale.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++config.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/ioctl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/os_defines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/debug/debug.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termios.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/lockf.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/cdefs.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iostream: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/versioning.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/timespec.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cpp_type_traits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/type_traits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/postypes.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdint.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_base.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/mbstate_t.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wchar_limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/posix_limits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/pthread.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/termios.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/sched.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/signal.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream_insert.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/signal.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/signal-defs.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/siginfo.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctls.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_algobase.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termios.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/move.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/string: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_signal_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/fcntl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/xlocale.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf.tcc: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_errno_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/errno.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/atomic_lockfree_defines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/strings.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/char_traits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/compiler.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/exception_defines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/numeric_traits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/malloc.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_pair.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/concept_check.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cctype: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termbits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/new: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/getopt.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward/binders.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/predefined_ops.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sched.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termbits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdio.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_funcs.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ptr_traits.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fadvise.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/functexcept.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/localefwd.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/clocale: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/fcntl.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ios_base.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/ctype.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/alloca.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr-default.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/atomic_word.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/posix_types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/types.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++allocator.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_stdlib_inlines.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdarg.h: + +/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/new_allocator.h: diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.ts b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.ts new file mode 100644 index 0000000..36b3847 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for uart. diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/depend.make b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/depend.make new file mode 100644 index 0000000..43c57b7 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for uart. +# This may be replaced when dependencies are built. diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/flags.make b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/flags.make new file mode 100644 index 0000000..a2e701b --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# compile CXX with /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ +CXX_DEFINES = + +CXX_INCLUDES = -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward + +CXX_FLAGS = -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -fPIE -Wall -g + diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/link.txt b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/link.txt new file mode 100644 index 0000000..28b1c15 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/link.txt @@ -0,0 +1 @@ +/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/vboxuser/tools/ndk/android-ndk-r16b/sysroot -isystem /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=22 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a --sysroot /home/vboxuser/tools/ndk/android-ndk-r16b/platforms/android-22/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections -Wl,-z,nocopyreloc -pie -fPIE CMakeFiles/uart.dir/uart.cc.o -o uart -latomic -lm "/home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a" diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/progress.make b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/uart.cc.o b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/uart.cc.o new file mode 100644 index 0000000..b0d4f65 Binary files /dev/null and b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/uart.cc.o differ diff --git a/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/uart.cc.o.d b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/uart.cc.o.d new file mode 100644 index 0000000..ee16621 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/CMakeFiles/uart.dir/uart.cc.o.d @@ -0,0 +1,164 @@ +CMakeFiles/uart.dir/uart.cc.o: \ + /home/vboxuser/gateway/test/uart/uart1/uart.cc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iostream \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++config.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/os_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/cpu_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ostream \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ios \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/iosfwd \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stringfwd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/memoryfwd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/postypes.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwchar \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wchar.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/cdefs.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/api-level.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/versioning.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdio.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdint.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wchar_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/int-ll64.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/bitsperlong.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stddef.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/compiler.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/posix_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/pthread_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/stdarg.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/seek_constants.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/struct_file.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/time.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/select.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/sigcontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/timespec.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/5.0.300080/include/float.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/posix_limits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/signal.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/signal-defs.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/siginfo.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ucontext.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/user.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_signal_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/xlocale.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/mbstate_t.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/exception \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/atomic_lockfree_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/char_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_algobase.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/functexcept.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/exception_defines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cpp_type_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/type_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/numeric_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_pair.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/move.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/concept_check.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_types.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator_base_funcs.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/debug/debug.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_iterator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ptr_traits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/predefined_ops.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/localefwd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/clocale \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/locale.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cctype \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/ctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ios_base.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/atomicity.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/gthr-default.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/pthread.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/sched.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/atomic_word.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/string \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/allocator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/c++allocator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/new_allocator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/new \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream_insert.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/cxxabi_forced.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/stl_function.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/backward/binders.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/range_access.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_string.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_classes.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/streambuf \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/cwctype \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/wctype.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_base.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/streambuf_iterator.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits/ctype_inline.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/locale_facets.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/basic_ios.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/ostream.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/istream \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/istream.tcc \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/stdlib.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/alloca.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/malloc.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_stdlib_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/stat.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/stat.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_sys_stat_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fadvise.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/falloc.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/uio.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/fcntl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/lockf.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/unistd.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/getopt.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/sysconf.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/errno-base.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_errno_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/string.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/bits/strcasecmp.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/strings.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_strings_inlines.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/sys/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctl.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termios.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/termbits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/termbits.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi/asm/ioctls.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/asm-generic/ioctls.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/linux/tty.h \ + /home/vboxuser/tools/ndk/android-ndk-r16b/sysroot/usr/include/android/legacy_termios_inlines.h diff --git a/unit_test/borad_test/uart/uart1/build/Makefile b/unit_test/borad_test/uart/uart1/build/Makefile new file mode 100644 index 0000000..37cc816 --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/Makefile @@ -0,0 +1,230 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.20 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/local/bin/cmake + +# The command to remove a file. +RM = /usr/local/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/vboxuser/gateway/test/uart/uart1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/vboxuser/gateway/test/uart/uart1/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/local/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/local/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles /home/vboxuser/gateway/test/uart/uart1/build//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/vboxuser/gateway/test/uart/uart1/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named uart + +# Build rule for target. +uart: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 uart +.PHONY : uart + +# fast build rule for target. +uart/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/uart.dir/build.make CMakeFiles/uart.dir/build +.PHONY : uart/fast + +uart.o: uart.cc.o +.PHONY : uart.o + +# target to build an object file +uart.cc.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/uart.dir/build.make CMakeFiles/uart.dir/uart.cc.o +.PHONY : uart.cc.o + +uart.i: uart.cc.i +.PHONY : uart.i + +# target to preprocess a source file +uart.cc.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/uart.dir/build.make CMakeFiles/uart.dir/uart.cc.i +.PHONY : uart.cc.i + +uart.s: uart.cc.s +.PHONY : uart.s + +# target to generate assembly for a file +uart.cc.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/uart.dir/build.make CMakeFiles/uart.dir/uart.cc.s +.PHONY : uart.cc.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... uart" + @echo "... uart.o" + @echo "... uart.i" + @echo "... uart.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/unit_test/borad_test/uart/uart1/build/cmake_install.cmake b/unit_test/borad_test/uart/uart1/build/cmake_install.cmake new file mode 100644 index 0000000..1c0f1fc --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/cmake_install.cmake @@ -0,0 +1,72 @@ +# Install script for directory: /home/vboxuser/gateway/test/uart/uart1 + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-objdump") +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT) + list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES + "/home/vboxuser/gateway/test/uart/uart1/uart") + if(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION) + message(WARNING "ABSOLUTE path INSTALL DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + if(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION) + message(FATAL_ERROR "ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() +file(INSTALL DESTINATION "/home/vboxuser/gateway/test/uart/uart1" TYPE EXECUTABLE FILES "/home/vboxuser/gateway/test/uart/uart1/build/uart") + if(EXISTS "$ENV{DESTDIR}/home/vboxuser/gateway/test/uart/uart1/uart" AND + NOT IS_SYMLINK "$ENV{DESTDIR}/home/vboxuser/gateway/test/uart/uart1/uart") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/home/vboxuser/tools/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip" "$ENV{DESTDIR}/home/vboxuser/gateway/test/uart/uart1/uart") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/vboxuser/gateway/test/uart/uart1/build/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/unit_test/borad_test/uart/uart1/build/install_manifest.txt b/unit_test/borad_test/uart/uart1/build/install_manifest.txt new file mode 100644 index 0000000..04b694f --- /dev/null +++ b/unit_test/borad_test/uart/uart1/build/install_manifest.txt @@ -0,0 +1 @@ +/home/vboxuser/gateway/test/uart/uart1/uart \ No newline at end of file diff --git a/unit_test/borad_test/uart/uart1/build/uart b/unit_test/borad_test/uart/uart1/build/uart new file mode 100644 index 0000000..b9963b5 Binary files /dev/null and b/unit_test/borad_test/uart/uart1/build/uart differ diff --git a/unit_test/borad_test/uart/uart1/uart b/unit_test/borad_test/uart/uart1/uart new file mode 100644 index 0000000..b9963b5 Binary files /dev/null and b/unit_test/borad_test/uart/uart1/uart differ diff --git a/unit_test/borad_test/uart/uart1/uart.cc b/unit_test/borad_test/uart/uart1/uart.cc new file mode 100644 index 0000000..94ca6ea --- /dev/null +++ b/unit_test/borad_test/uart/uart1/uart.cc @@ -0,0 +1,331 @@ + +// #define _GNU_SOURCE + +# include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct uart_hardware_cfg { + unsigned int baudrate; /* 波特率 */ + unsigned char dbit; /* 数据位 */ + char parity; /* 奇偶校验 */ + unsigned char sbit; /* 停止位 */ +} uart_cfg_t; + +static struct termios old_cfg; //用于保存终端的配置参数 +static int fd; //串口终端对应的文件描述符 + +/** +** 串口初始化操作 +** 参数 device 表示串口终端的设备节点 +**/ +static int uart_init(const char *device) +{ + /* 打开串口终端 */ + fd = open(device, O_RDWR | O_NOCTTY); + if (0 > fd) { + fprintf(stderr, "open error: %s: %s\n", device, strerror(errno)); + return -1; + } + + /* 获取串口当前的配置参数 */ + if (0 > tcgetattr(fd, &old_cfg)) { + fprintf(stderr, "tcgetattr error: %s\n", strerror(errno)); + close(fd); + return -1; + } + return 0; +} + +/** +** 串口配置 +** 参数 cfg 指向一个 uart_cfg_t 结构体对象 +**/ +static int uart_cfg(const uart_cfg_t *cfg) +{ + struct termios new_cfg = {0}; //将 new_cfg 对象清零 + speed_t speed; + + /* 设置为原始模式 */ + cfmakeraw(&new_cfg); + + /* 使能接收 */ + new_cfg.c_cflag |= CREAD; + + /* 设置波特率 */ + switch (cfg->baudrate) { + case 1200: speed = B1200; + break; + case 1800: speed = B1800; + break; + case 2400: speed = B2400; + break; + case 4800: speed = B4800; + break; + case 9600: speed = B9600; + break; + case 19200: speed = B19200; + break; + case 38400: speed = B38400; + break; + case 57600: speed = B57600; + break; + case 115200: speed = B115200; + break; + case 230400: speed = B230400; + break; + case 460800: speed = B460800; + break; + case 500000: speed = B500000; + break; + default: //默认配置为 115200 + speed = B115200; + printf("default baud rate: 115200\n"); + break; + } + + if (0 > cfsetspeed(&new_cfg, speed)) { + fprintf(stderr, "cfsetspeed error: %s\n", strerror(errno)); + return -1; + } + + /* 设置数据位大小 */ + new_cfg.c_cflag &= ~CSIZE; //将数据位相关的比特位清零 + switch (cfg->dbit) { + case 5: + new_cfg.c_cflag |= CS5; + break; + case 6: + new_cfg.c_cflag |= CS6; + break; + case 7: + new_cfg.c_cflag |= CS7; + break; + case 8: + new_cfg.c_cflag |= CS8; + break; + default: //默认数据位大小为 8 + new_cfg.c_cflag |= CS8; + printf("default data bit size: 8\n"); + break; + } + + /* 设置奇偶校验 */ + switch (cfg->parity) { + case 'N': //无校验 + new_cfg.c_cflag &= ~PARENB; + new_cfg.c_iflag &= ~INPCK; + break; + case 'O': //奇校验 + new_cfg.c_cflag |= (PARODD | PARENB); + new_cfg.c_iflag |= INPCK; + break; + case 'E': //偶校验 + new_cfg.c_cflag |= PARENB; + new_cfg.c_cflag &= ~PARODD; /* 清除 PARODD 标志,配置为偶校验 */ + new_cfg.c_iflag |= INPCK; + break; + default: //默认配置为无校验 + new_cfg.c_cflag &= ~PARENB; + new_cfg.c_iflag &= ~INPCK; + printf("default parity: N\n"); + break; + } + + /* 设置停止位 */ + switch (cfg->sbit) { + case 1: //1 个停止位 + new_cfg.c_cflag &= ~CSTOPB; + break; + case 2: //2 个停止位 + new_cfg.c_cflag |= CSTOPB; + break; + default: //默认配置为 1 个停止位 + new_cfg.c_cflag &= ~CSTOPB; + printf("default stop bit size: 1\n"); + break; + } + + /* 将 MIN 和 TIME 设置为 0 */ + new_cfg.c_cc[VTIME] = 0; + new_cfg.c_cc[VMIN] = 0; + + /* 清空缓冲区 */ + if (0 > tcflush(fd, TCIOFLUSH)) { + fprintf(stderr, "tcflush error: %s\n", strerror(errno)); + return -1; + } + + /* 写入配置、使配置生效 */ + if (0 > tcsetattr(fd, TCSANOW, &new_cfg)) { + fprintf(stderr, "tcsetattr error: %s\n", strerror(errno)); + return -1; + } + + /* 配置 OK 退出 */ + return 0; +} + +/*** +--dev=/dev/ttyHS1 +--brate=115200 +--dbit=8 +--parity=N +--sbit=1 +--type=read +***/ +/** +** 打印帮助信息 +**/ +static void show_help(const char *app) +{ + printf("Usage: %s [选项]\n" + "\n 必选选项:\n" + " --dev=DEVICE 指定串口终端设备名称, 譬如--dev=/dev/ttyHS1\n" + " --type=TYPE 指定操作类型, 读串口还是写串口, 譬如--type=read(read 表示读、write 表示写、其它值无效)\n" + "\n 可选选项:\n" + " --brate=SPEED 指定串口波特率, 譬如--brate=115200\n" + " --dbit=SIZE 指定串口数据位个数, 譬如--dbit=8(可取值为: 5/6/7/8)\n" + " --parity=PARITY 指定串口奇偶校验方式, 譬如--parity=N(N 表示无校验、O 表示奇校验、E 表示偶校验)\n" + " --sbit=SIZE 指定串口停止位个数, 譬如--sbit=1(可取值为: 1/2)\n" + " --help 查看本程序使用帮助信息\n\n", app); +} + +/** +** 信号处理函数,当串口有数据可读时,会跳转到该函数执行 +**/ +static void io_handler(int sig, siginfo_t *info, void *context) +{ + unsigned char buf[10] = {0}; + int ret; + int n; + + if(SIGRTMIN != sig) + return; + + /* 判断串口是否有数据可读 */ + if (POLL_IN == info->si_code) { + ret = read(fd, buf, 8); //一次最多读 8 个字节数据 + printf("[ "); + + for (n = 0; n < ret; n++) + printf("0x%hhx ", buf[n]); + + printf("]\n"); + } +} + +/** +** 异步 I/O 初始化函数 +**/ +static void async_io_init(void) +{ + struct sigaction sigatn; + int flag; + + /* 使能异步 I/O */ + flag = fcntl(fd, F_GETFL); //使能串口的异步 I/O 功能 + flag |= O_ASYNC; + fcntl(fd, F_SETFL, flag); + + /* 设置异步 I/O 的所有者 */ + fcntl(fd, F_SETOWN, getpid()); + + /* 指定实时信号 SIGRTMIN 作为异步 I/O 通知信号 */ + fcntl(fd, F_SETSIG, SIGRTMIN); + + /* 为实时信号 SIGRTMIN 注册信号处理函数 */ + sigatn.sa_sigaction = io_handler; //当串口有数据可读时,会跳转到 io_handler 函数 + sigatn.sa_flags = SA_SIGINFO; + sigemptyset(&sigatn.sa_mask); + sigaction(SIGRTMIN, &sigatn, NULL); +} + +int main(int argc, char *argv[]) +{ + uart_cfg_t cfg = {0}; + char *device = NULL; + int rw_flag = -1; + unsigned char w_buf[10] = {0x11, 0x22, 0x33, 0x44, + 0x55, 0x66, 0x77, 0x88}; //通过串口发送出去的数据 + int n; + + /* 解析出参数 */ + for (n = 1; n < argc; n++) { + if (!strncmp("--dev=", argv[n], 6)) + device = &argv[n][6]; + else if (!strncmp("--brate=", argv[n], 8)) + cfg.baudrate = atoi(&argv[n][8]); + else if (!strncmp("--dbit=", argv[n], 7)) + cfg.dbit = atoi(&argv[n][7]); + else if (!strncmp("--parity=", argv[n], 9)) + cfg.parity = argv[n][9]; + else if (!strncmp("--sbit=", argv[n], 7)) + cfg.sbit = atoi(&argv[n][7]); + else if (!strncmp("--type=", argv[n], 7)) { + if (!strcmp("read", &argv[n][7])) + rw_flag = 0; //读 + else if (!strcmp("write", &argv[n][7])) + rw_flag = 1; //写 + } + else if (!strcmp("--help", argv[n])) { + show_help(argv[0]); //打印帮助信息 + exit(EXIT_SUCCESS); + } + } + + if (NULL == device || -1 == rw_flag) { + fprintf(stderr, "Error: the device and read|write type must be set!\n"); + show_help(argv[0]); + exit(EXIT_FAILURE); + } + + /* 串口初始化 */ + if (uart_init(device)) + exit(EXIT_FAILURE); + + /* 串口配置 */ + if (uart_cfg(&cfg)) { + tcsetattr(fd, TCSANOW, &old_cfg); //恢复到之前的配置 + close(fd); + exit(EXIT_FAILURE); + } + + /* 读|写串口 */ + switch (rw_flag) { + case 0: //读串口数据 + async_io_init(); //我们使用异步 I/O 方式读取串口的数据,调用该函数去初始化串口的异步 I/O + // for ( ; ; ) + for (int i = 0; i < 100; i++) + sleep(1); //进入休眠、等待有数据可读,有数据可读之后就会跳转到 io_handler()函数 + break; + case 1: //向串口写入数据 + // for ( ; ; ) { //循环向串口写入数据 + for (int i = 0; i < 100; i++) { + write(fd, w_buf, 8); //一次向串口写入 8 个字节 + sleep(1); //间隔 1 秒钟 + } + break; + } + + /* 退出 */ + tcsetattr(fd, TCSANOW, &old_cfg); //恢复到之前的配置 + close(fd); + exit(EXIT_SUCCESS); +} + + + + + + diff --git a/unit_test/borad_test/uart/uart2/CMakeLists.txt b/unit_test/borad_test/uart/uart2/CMakeLists.txt new file mode 100644 index 0000000..de66fcc --- /dev/null +++ b/unit_test/borad_test/uart/uart2/CMakeLists.txt @@ -0,0 +1,12 @@ +# cmake_minimum_required(VERSION 3.0) +# project(uart) +message(STATUS "unit_test/borad_test/uart/uart2/CMakeLists.txt.") +# 设置项目名称 +project(uart) + +add_executable(uart_test uart.c main.c) + +# install(TARGETS uart_test +# RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/bin) +install(TARGETS uart_test + RUNTIME DESTINATION ${CMAKE_BINARY_DIR}/../bin) \ No newline at end of file diff --git a/unit_test/borad_test/uart/uart2/main.c b/unit_test/borad_test/uart/uart2/main.c new file mode 100644 index 0000000..555669e --- /dev/null +++ b/unit_test/borad_test/uart/uart2/main.c @@ -0,0 +1,18 @@ +#include "uart.h" + + +int main(int argc, char *argv[]) +{ + unsigned char w_buf[10] = {0x11, 0x22, 0x33, 0x44, + 0x55, 0x66, 0x77, 0x88}; //通过串口发送出去的数据 + + if (uart_Init()) + exit(EXIT_FAILURE); + + for (int i = 0; i < 100; i++) { + write(fd, w_buf, 8); //一次向串口写入 8 个字节 + sleep(1); //间隔 1 秒钟 + } +} + + diff --git a/unit_test/borad_test/uart/uart2/uart.c b/unit_test/borad_test/uart/uart2/uart.c new file mode 100644 index 0000000..58ff199 --- /dev/null +++ b/unit_test/borad_test/uart/uart2/uart.c @@ -0,0 +1,199 @@ +#include "uart.h" + + +int fd = -1; +uart_cfg_t uart_cfg = { + .baudrate = 115200, + .dbit = 8, + .parity = 'N', + .sbit = 0, +}; + + +static void io_handler(int sig, siginfo_t *info, void *context) +{ + unsigned char buf[50] = {0}; + int ret; + int n; + + if(SIGRTMIN != sig) + return; + + /* 判断串口是否有数据可读 */ + if (POLL_IN == info->si_code) { + ret = read(fd, buf, 50); //一次最多读 50 个字节数据 + printf("[ "); + + for (n = 0; n < ret; n++) + printf("%hhx ", buf[n]); + + printf("]\n"); + } +} + +int uart_Init(void) +{ + /* 打开串口终端 */ + fd = open(UART_DEV, O_RDWR | O_NOCTTY); + if (0 > fd) { + fprintf(stderr, "open error: %s: %s\n", UART_DEV, strerror(errno)); + return -1; + } + + setuart_cfg(&uart_cfg); + + async_io_init(); + + return 0; +} + +int setuart_cfg(const uart_cfg_t *cfg) +{ + struct termios new_cfg = {0}; //将 new_cfg 对象清零 + speed_t speed; + + /* 设置为原始模式 */ + cfmakeraw(&new_cfg); + + /* 使能接收 */ + new_cfg.c_cflag |= CREAD; + + /* 设置波特率 */ + switch (cfg->baudrate) { + case 1200: speed = B1200; + break; + case 1800: speed = B1800; + break; + case 2400: speed = B2400; + break; + case 4800: speed = B4800; + break; + case 9600: speed = B9600; + break; + case 19200: speed = B19200; + break; + case 38400: speed = B38400; + break; + case 57600: speed = B57600; + break; + case 115200: speed = B115200; + break; + case 230400: speed = B230400; + break; + case 460800: speed = B460800; + break; + case 500000: speed = B500000; + break; + default: //默认配置为 115200 + speed = B115200; + printf("default baud rate: 115200\n"); + break; + } + + if (0 > cfsetspeed(&new_cfg, speed)) { + fprintf(stderr, "cfsetspeed error: %s\n", strerror(errno)); + return -1; + } + + /* 设置数据位大小 */ + new_cfg.c_cflag &= ~CSIZE; //将数据位相关的比特位清零 + switch (cfg->dbit) { + case 5: + new_cfg.c_cflag |= CS5; + break; + case 6: + new_cfg.c_cflag |= CS6; + break; + case 7: + new_cfg.c_cflag |= CS7; + break; + case 8: + new_cfg.c_cflag |= CS8; + break; + default: //默认数据位大小为 8 + new_cfg.c_cflag |= CS8; + printf("default data bit size: 8\n"); + break; + } + + /* 设置奇偶校验 */ + switch (cfg->parity) { + case 'N': //无校验 + new_cfg.c_cflag &= ~PARENB; + new_cfg.c_iflag &= ~INPCK; + break; + case 'O': //奇校验 + new_cfg.c_cflag |= (PARODD | PARENB); + new_cfg.c_iflag |= INPCK; + break; + case 'E': //偶校验 + new_cfg.c_cflag |= PARENB; + new_cfg.c_cflag &= ~PARODD; /* 清除 PARODD 标志,配置为偶校验 */ + new_cfg.c_iflag |= INPCK; + break; + default: //默认配置为无校验 + new_cfg.c_cflag &= ~PARENB; + new_cfg.c_iflag &= ~INPCK; + printf("default parity: N\n"); + break; + } + + /* 设置停止位 */ + switch (cfg->sbit) { + case 1: //1 个停止位 + new_cfg.c_cflag &= ~CSTOPB; + break; + case 2: //2 个停止位 + new_cfg.c_cflag |= CSTOPB; + break; + default: //默认配置为 1 个停止位 + new_cfg.c_cflag &= ~CSTOPB; + printf("default stop bit size: 1\n"); + break; + } + + /* 将 MIN 和 TIME 设置为 0 */ + new_cfg.c_cc[VTIME] = 0; + new_cfg.c_cc[VMIN] = 0; + + /* 清空缓冲区 */ + if (0 > tcflush(fd, TCIOFLUSH)) { + fprintf(stderr, "tcflush error: %s\n", strerror(errno)); + return -1; + } + + /* 写入配置、使配置生效 */ + if (0 > tcsetattr(fd, TCSANOW, &new_cfg)) { + fprintf(stderr, "tcsetattr error: %s\n", strerror(errno)); + return -1; + } + + /* 配置 OK 退出 */ + return 0; +} + + + +void async_io_init(void) +{ + struct sigaction sigatn; + int flag; + + /* 使能异步 I/O */ + flag = fcntl(fd, F_GETFL); //使能串口的异步 I/O 功能 + flag |= O_ASYNC; + fcntl(fd, F_SETFL, flag); + + /* 设置异步 I/O 的所有者 */ + fcntl(fd, F_SETOWN, getpid()); + + /* 指定实时信号 SIGRTMIN 作为异步 I/O 通知信号 */ + fcntl(fd, F_SETSIG, SIGRTMIN); + + /* 为实时信号 SIGRTMIN 注册信号处理函数 */ + sigatn.sa_sigaction = io_handler; //当串口有数据可读时,会跳转到 io_handler 函数 + sigatn.sa_flags = SA_SIGINFO; + sigemptyset(&sigatn.sa_mask); + sigaction(SIGRTMIN, &sigatn, NULL); +} + diff --git a/unit_test/borad_test/uart/uart2/uart.h b/unit_test/borad_test/uart/uart2/uart.h new file mode 100644 index 0000000..e05add7 --- /dev/null +++ b/unit_test/borad_test/uart/uart2/uart.h @@ -0,0 +1,28 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define UART_DEV "/dev/ttyHS1" + +extern int fd; + +typedef struct uart_hardware_cfg { + unsigned int baudrate; /* 波特率 */ + unsigned char dbit; /* 数据位 */ + char parity; /* 奇偶校验 */ + unsigned char sbit; /* 停止位 */ +} uart_cfg_t; + + +void async_io_init(void); +int setuart_cfg(const uart_cfg_t *cfg); +int uart_Init(void); + diff --git a/unit_test/borad_test/uart/uart3/CMakeLists.txt b/unit_test/borad_test/uart/uart3/CMakeLists.txt new file mode 100644 index 0000000..b5380b2 --- /dev/null +++ b/unit_test/borad_test/uart/uart3/CMakeLists.txt @@ -0,0 +1,12 @@ +# cmake_minimum_required(VERSION 3.0) +# project(uart) +message(STATUS "unit_test/borad_test/uart/uart3/CMakeLists.txt.") +# 设置项目名称 +project(uart) + +add_executable(uart_test uart_dev.cc sl_protocol.cc main.cc) + +# install(TARGETS uart_test +# RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/bin) +install(TARGETS uart_test + RUNTIME DESTINATION ${CMAKE_BINARY_DIR}/../bin) \ No newline at end of file diff --git a/unit_test/borad_test/uart/uart3/main.cc b/unit_test/borad_test/uart/uart3/main.cc new file mode 100644 index 0000000..e95e877 --- /dev/null +++ b/unit_test/borad_test/uart/uart3/main.cc @@ -0,0 +1,9 @@ +#include "sl_protocol.h" +#include "uart_dev.h" + +int main() +{ + + + return 0; +} \ No newline at end of file diff --git a/unit_test/borad_test/uart/uart3/sl_protocol.cc b/unit_test/borad_test/uart/uart3/sl_protocol.cc new file mode 100644 index 0000000..38a2b5a --- /dev/null +++ b/unit_test/borad_test/uart/uart3/sl_protocol.cc @@ -0,0 +1,7 @@ +#include + +#include "sl_protocol.h" + + + + \ No newline at end of file diff --git a/unit_test/borad_test/uart/uart3/sl_protocol.h b/unit_test/borad_test/uart/uart3/sl_protocol.h new file mode 100644 index 0000000..9b8c46a --- /dev/null +++ b/unit_test/borad_test/uart/uart3/sl_protocol.h @@ -0,0 +1,95 @@ +#ifndef __SL_PROTOCOL_H_ +#define __SL_PROTOCOL_H_ + +/* 功能码 */ +typedef enum +{ + SL_Function_Code_Read_Register = 0x30, /* 读寄存器数据 */ + SL_Function_Code_Write_Register = 0x10, /* 写寄存器数据 */ + SL_Function_Code_Broadcast_Scan = 0xA0, /* 广播扫描 */ + SL_Function_Code_Registration_request = 0xA1, /* 注册请求 */ + SL_Function_Code_Update_Profile = 0xD0, /* 配置文件 */ + SL_Function_Code_Remote_Upgrade = 0xD1, /* 远程升级 */ +}SL_MsgFunctionCode; + +/* 寄存器地址 */ +typedef enum +{ + SL_Register_Registration_Status = 0x0000, /* 注册状态 */ + SL_Register_address = 0x0001, /* 地址 */ + SL_Register_Access_Node_Type = 0x0002, /* 接入节点类型 */ + SL_Register_Communication_Methods = 0x0003, /* 通信方式 */ + SL_Register_Output_Voltage = 0x0100, /* 输出电压 */ + SL_Register_Battery_Voltage = 0x0101, /* 电池电压 */ + SL_Register_Charg_Current = 0x0102, /* 充电电流(流向电池+负载) */ + SL_Register_Discharg_Current = 0x0103, /* 放电电流(流向负载) */ + SL_Register_Solar_Open_Circuit_Voltage = 0x0104, /* 太阳能开路电压 */ + SL_Register_HighSideMos_Temperature = 0x0105, /* 高端mos的温度 */ + SL_Register_DischargMos_State = 0x0106, /* 放电mos的状态 */ + SL_Register_MPPT_Mode = 0x0107, /* 工作模式 */ +}SL_Mppt_MsgRegister; + +/* 注册状态 */ +typedef enum +{ + UNREGISTER = 0, /* 未注册 */ + REGISTER_FAIL = 1, /* 注册失败 */ + REGISTER_SUCCESS = 2, /* 注册成功 */ +}SL_REGISTERSTATUS; + +/* 接入节点类型 */ +typedef enum +{ + POWERBOX = 1, /* 电源箱子 */ + MICROMETEOROLOGY = 2, /* 微气象 */ +}SL_ACCESSNODETYPE; + +/* 通信方式 */ +typedef enum +{ + RS485 = 1, + RJ45 = 2, + Lora = 3, +}SL_COMMUNICATIONMETHODS; + +/* 放电mos管状态 */ +typedef enum +{ + close = 0, + open = 1, +}SL_DischargMos_State; + +/* mppt工作模式 */ +typedef enum +{ + NoWork = 0, /* 没有工作 */ + TRICKLE = 1, /* 涓流模式 */ + CONSTANTCURRENT = 2, /* 恒流模式 */ + CONSTANTVOLTAGE = 3, /* 恒压模式 */ + FLOAT = 4, /* 浮充模式 */ + NoBattery = 5, /* 没有电池 */ +}SL_MPPT_MODE; + +#define chang_8_to_16(L,H) (L | (H<<8)) + +/* 指定对齐方式为1字节 */ +#pragma pack(push,1) + +/* 功能码处理函数 */ +typedef void (*MsgProcFunc)(device_handle device, void*, uint32_t MsgLen); +typedef struct _SL_FunctionMsgProcTable{ + u_int32_t msgId; + MsgProcFunc pMsgProc; +}SL_FuncionMsgProcTable; + +/* 寄存器处理表 */ +typedef uint16_t (*RegProcFunc)(void*); +typedef struct _SL_RegProcTable{ + uint32_t regId; + RegProcFunc pRegProc; +}SL_RegProcTable; + +/* 恢复默认的对齐设置 */ +#pragma pack(pop) + +#endif /* __SL_PROTOCOL_H_ */ diff --git a/unit_test/borad_test/uart/uart3/uart_dev.cc b/unit_test/borad_test/uart/uart3/uart_dev.cc new file mode 100644 index 0000000..3978560 --- /dev/null +++ b/unit_test/borad_test/uart/uart3/uart_dev.cc @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "uart_dev.h" + + +uart_dev::uart_dev(/* args */) +{ +} + +uart_dev::~uart_dev() +{ +} diff --git a/unit_test/borad_test/uart/uart3/uart_dev.h b/unit_test/borad_test/uart/uart3/uart_dev.h new file mode 100644 index 0000000..d6ad64a --- /dev/null +++ b/unit_test/borad_test/uart/uart3/uart_dev.h @@ -0,0 +1,26 @@ +#ifndef __UART_DEV_H_ +#define __UART_DEV_H_ + +#define UART_DEV "/dev/ttyHS1" + +namespace Serial { + typedef struct uart_hardware_cfg { + unsigned int baudrate; /* 波特率 */ + unsigned char dbit; /* 数据位 */ + char parity; /* 奇偶校验 */ + unsigned char sbit; /* 停止位 */ + } uart_cfg_t; + + class uart_dev { + private: + uart_cfg_t uart_cfg; + int uart_fd; /* 文件描述符 */ + bool b_OpenSign; /* 串口打开标志 */ + struct termios ProtoOpt; /* 存放串口原始配置 */ + public: + uart_dev(/* args */); + ~uart_dev(); + }; +} + +#endif /* __UART_DEV_H_ */ \ No newline at end of file diff --git a/unit_test/test/CMakeLists.txt b/unit_test/test/CMakeLists.txt new file mode 100644 index 0000000..d04c3f2 --- /dev/null +++ b/unit_test/test/CMakeLists.txt @@ -0,0 +1,10 @@ + + +if(onvif) + add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test/test/onvif) +endif() + +if(hello) + add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test/test/hello) +endif() + diff --git a/unit_test/test/hello/CMakeLists.txt b/unit_test/test/hello/CMakeLists.txt new file mode 100644 index 0000000..e51e325 --- /dev/null +++ b/unit_test/test/hello/CMakeLists.txt @@ -0,0 +1,12 @@ +# cmake_minimum_required(VERSION 3.16) + +message(STATUS "unit_test/test/hello/CMakeLists.txt.") +# 设置项目名称 +project(main) + +add_definitions("-Wall -g") + +add_executable(main main.cc) + +install(TARGETS main + RUNTIME DESTINATION ${CMAKE_BINARY_DIR}/../bin) diff --git a/unit_test/test/hello/main.cc b/unit_test/test/hello/main.cc new file mode 100644 index 0000000..531f89f --- /dev/null +++ b/unit_test/test/hello/main.cc @@ -0,0 +1,9 @@ +# include + +int main(int argc, char const *argv[]) +{ + for(int i = 0; i < 5; ++i) + std::cout << "Hello World" << std::endl; + + return 0; +} diff --git a/unit_test/test/onvif/CMakeLists.txt b/unit_test/test/onvif/CMakeLists.txt new file mode 100644 index 0000000..11dab98 --- /dev/null +++ b/unit_test/test/onvif/CMakeLists.txt @@ -0,0 +1,2 @@ + +add_subdirectory(${PROJECT_SOURCE_DIR}/unit_test/test/onvif/onvif-discover) diff --git a/unit_test/test/onvif/onvif-discover/CMakeLists.txt b/unit_test/test/onvif/onvif-discover/CMakeLists.txt new file mode 100644 index 0000000..2b82a1f --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/CMakeLists.txt @@ -0,0 +1,11 @@ +project(onvif-discover) + +set(CMAKE_CXX_STANDARD 11) + +# add_definitions("-Wall -g") + +aux_source_directory(. SRC_LIST) +add_executable(onvif-discover ${SRC_LIST}) +install(TARGETS onvif-discover + RUNTIME DESTINATION ${CMAKE_BINARY_DIR}/../bin) + diff --git a/unit_test/test/onvif/onvif-discover/deivceserver.cpp b/unit_test/test/onvif/onvif-discover/deivceserver.cpp new file mode 100644 index 0000000..99b08e4 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/deivceserver.cpp @@ -0,0 +1,67 @@ +#include "stdsoap2.h" +#include "soapStub.h" + +/** Web service one-way operation 'SOAP_ENV__Fault' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ +SOAP_FMAC5 int SOAP_FMAC6 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) +{ + printf("SOAP_ENV__Fault %s, %d\n", __FUNCTION__, __LINE__); + + return 0; +} + +SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Hello(struct soap*, struct wsdd__HelloType *wsdd__Hello){ + printf("__wsdd__Hello %s, %d\n", __FUNCTION__, __LINE__); + return 0; +} + +SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Bye(struct soap*, struct wsdd__ByeType *wsdd__Bye){ + printf("__wsdd__Bye %s, %d\n", __FUNCTION__, __LINE__); + return 0; +} + +SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Probe(struct soap*, struct wsdd__ProbeType *wsdd__Probe){ + printf("__wsdd__Probe %s, %d\n", __FUNCTION__, __LINE__); + + return 0; +} + +SOAP_FMAC5 int SOAP_FMAC6 __wsdd__ProbeMatches(struct soap*, struct wsdd__ProbeMatchesType *wsdd__ProbeMatches){ + printf("__wsdd__ProbeMatches %s, %d\n", __FUNCTION__, __LINE__); + return 0; +} + +SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Resolve(struct soap*, struct wsdd__ResolveType *wsdd__Resolve){ + printf("__wsdd__Resolve %s, %d\n", __FUNCTION__, __LINE__); + return 0; +} + +SOAP_FMAC5 int SOAP_FMAC6 __wsdd__ResolveMatches(struct soap*, struct wsdd__ResolveMatchesType *wsdd__ResolveMatches){ + printf("__wsdd__ResolveMatches %s, %d\n", __FUNCTION__, __LINE__); + return 0; +} + +SOAP_FMAC5 int SOAP_FMAC6 __tdn__Hello(struct soap*, struct wsdd__HelloType tdn__Hello, struct wsdd__ResolveType &tdn__HelloResponse) +{ + printf("__tdn__Hello %s, %d\n", __FUNCTION__, __LINE__); + + return 0; +} +/** Web service operation '__tdn__Bye' implementation, should return SOAP_OK or error code */ +SOAP_FMAC5 int SOAP_FMAC6 __tdn__Bye(struct soap*, struct wsdd__ByeType tdn__Bye, struct wsdd__ResolveType &tdn__ByeResponse) +{ + printf("__tdn__Bye %s, %d\n", __FUNCTION__, __LINE__); + + return 0; +} +/** Web service operation '__tdn__Probe' implementation, should return SOAP_OK or error code */ +SOAP_FMAC5 int SOAP_FMAC6 __tdn__Probe(struct soap*, struct wsdd__ProbeType tdn__Probe, struct wsdd__ProbeMatchesType &tdn__ProbeResponse) +{ + printf("__tdn__Bye %s, %d\n", __FUNCTION__, __LINE__); + return 0; +} + diff --git a/unit_test/test/onvif/onvif-discover/deviceprobe.cpp b/unit_test/test/onvif/onvif-discover/deviceprobe.cpp new file mode 100644 index 0000000..49510f1 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/deviceprobe.cpp @@ -0,0 +1,185 @@ +#include +#include "soapH.h" +#include "wsdd.nsmap" +#include "soapStub.h" + +#include + +#define SOAP_ASSERT assert +#define SOAP_DBGLOG printf +#define SOAP_DBGERR printf + +#define SOAP_TO "urn:schemas-xmlsoap-org:ws:2005:04:discovery" +#define SOAP_ACTION "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe" + +#define SOAP_MCAST_ADDR "soap.udp://239.255.255.250:3702" // onvif规定的组播地址 + +#define SOAP_ITEM "" // 寻找的设备范围 +#define SOAP_TYPES "dn:NetworkVideoTransmitter" // 寻找的设备类型 + +#define SOAP_SOCK_TIMEOUT (10) // socket超时时间(单秒秒) + +void soap_perror(struct soap *soap, const char *str) +{ + if (nullptr == str) { + SOAP_DBGERR("[soap] error: %d, %s, %s\n", soap->error, *soap_faultcode(soap), *soap_faultstring(soap)); + } else { + SOAP_DBGERR("[soap] %s error: %d, %s, %s\n", str, soap->error, *soap_faultcode(soap), *soap_faultstring(soap)); + } +} + +void* ONVIF_soap_malloc(struct soap *soap, unsigned int n) +{ + void *p = nullptr; + + if (n > 0) { + p = soap_malloc(soap, n); + SOAP_ASSERT(nullptr != p); + memset(p, 0x00 ,n); + } + return p; +} + +struct soap *ONVIF_soap_new(int timeout) +{ + struct soap *soap = nullptr; // soap环境变量 + + SOAP_ASSERT(nullptr != (soap = soap_new())); + + soap_set_namespaces(soap, namespaces); // 设置soap的namespaces + soap->recv_timeout = timeout; // 设置超时(超过指定时间没有数据就退出) + soap->send_timeout = timeout; + soap->connect_timeout = timeout; + +#if defined(__linux__) || defined(__linux) // 参考https://www.genivia.com/dev.html#client-c的修改: + soap->socket_flags = MSG_NOSIGNAL; // To prevent connection reset errors +#endif + + soap_set_mode(soap, SOAP_C_UTFSTRING); // 设置为UTF-8编码,否则叠加中文OSD会乱码 + + return soap; +} + +void ONVIF_soap_delete(struct soap *soap) +{ + soap_destroy(soap); // remove deserialized class instances (C++ only) + soap_end(soap); // Clean up deserialized data (except class instances) and temporary data + soap_done(soap); // Reset, close communications, and remove callbacks + soap_free(soap); // Reset and deallocate the context created with soap_new or soap_copy +} + +/************************************************************************ +**函数:ONVIF_init_header +**功能:初始化soap描述消息头 +**参数: + [in] soap - soap环境变量 +**返回:无 +**备注: + 1). 在本函数内部通过ONVIF_soap_malloc分配的内存,将在ONVIF_soap_delete中被释放 +************************************************************************/ +void ONVIF_init_header(struct soap *soap) +{ + struct SOAP_ENV__Header *header = nullptr; + + SOAP_ASSERT(nullptr != soap); + + header = (struct SOAP_ENV__Header *)ONVIF_soap_malloc(soap, sizeof(struct SOAP_ENV__Header)); + soap_default_SOAP_ENV__Header(soap, header); + header->wsa__MessageID = "shsuishsihsishsishsuisbjshsusisuisusi"; + header->wsa__To = (char*)ONVIF_soap_malloc(soap, strlen(SOAP_TO) + 1); + header->wsa__Action = (char*)ONVIF_soap_malloc(soap, strlen(SOAP_ACTION) + 1); + strcpy(header->wsa__To, SOAP_TO); + strcpy(header->wsa__Action, SOAP_ACTION); + soap->header = header; +} + +/************************************************************************ +**函数:ONVIF_init_ProbeType +**功能:初始化探测设备的范围和类型 +**参数: + [in] soap - soap环境变量 + [out] probe - 填充要探测的设备范围和类型 +**返回: + 0表明探测到,非0表明未探测到 +**备注: + 1). 在本函数内部通过ONVIF_soap_malloc分配的内存,将在ONVIF_soap_delete中被释放 +************************************************************************/ +void ONVIF_init_ProbeType(struct soap *soap, struct wsdd__ProbeType *probe) +{ + struct wsdd__ScopesType *scope = nullptr; // 用于描述查找哪类的Web服务 + + SOAP_ASSERT(nullptr != soap); + SOAP_ASSERT(nullptr != probe); + + scope = (struct wsdd__ScopesType *)ONVIF_soap_malloc(soap, sizeof(struct wsdd__ScopesType)); + soap_default_wsdd__ScopesType(soap, scope); // 设置寻找设备的范围 + scope->__item = (char*)ONVIF_soap_malloc(soap, strlen(SOAP_ITEM) + 1); + strcpy(scope->__item, SOAP_ITEM); + + memset(probe, 0x00, sizeof(struct wsdd__ProbeType)); + soap_default_wsdd__ProbeType(soap, probe); + probe->Scopes = scope; + probe->Types = (char*)ONVIF_soap_malloc(soap, strlen(SOAP_TYPES) + 1); // 设置寻找设备的类型 + strcpy(probe->Types, SOAP_TYPES); +} + +void ONVIF_DetectDevice(void (*cb)(char *DeviceXAddr)) +{ + int i; + int result = 0; + unsigned int count = 0; // 搜索到的设备个数 + struct soap *soap = nullptr; // soap环境变量 + struct wsdd__ProbeType req; // 用于发送Probe消息 + struct __wsdd__ProbeMatches rep; // 用于接收Probe应答 + struct wsdd__ProbeMatchType *probeMatch; + + SOAP_ASSERT(nullptr != (soap = ONVIF_soap_new(SOAP_SOCK_TIMEOUT))); + + ONVIF_init_header(soap); // 设置消息头描述 + ONVIF_init_ProbeType(soap, &req); // 设置寻找的设备的范围和类型 + result = soap_send___wsdd__Probe(soap, SOAP_MCAST_ADDR, nullptr, &req); // 向组播地址广播Probe消息 + while (SOAP_OK == result) // 开始循环接收设备发送过来的消息 + { + memset(&rep, 0x00, sizeof(rep)); + result = soap_recv___wsdd__ProbeMatches(soap, &rep); + if (SOAP_OK == result) { + if (soap->error) { + soap_perror(soap, "ProbeMatches"); + } else { // 成功接收到设备的应答消息 + printf("__sizeProbeMatch:%d\n",rep.wsdd__ProbeMatches->__sizeProbeMatch); + + if (nullptr != rep.wsdd__ProbeMatches) { + count += rep.wsdd__ProbeMatches->__sizeProbeMatch; + for(i = 0; i < rep.wsdd__ProbeMatches->__sizeProbeMatch; i++) { + probeMatch = rep.wsdd__ProbeMatches->ProbeMatch + i; + if (nullptr != cb) { + cb(probeMatch->XAddrs); // 使用设备服务地址执行函数回调 + } + } + } + } + } else if (soap->error) { + break; + } + } + + SOAP_DBGLOG("\ndetect end! It has detected %d devices!\n", count); + + if (nullptr != soap) { + ONVIF_soap_delete(soap); + } + +} + + + +int main(int argc, char **argv) +{ + printf("start\n"); + std::cout << "start " << std::endl; + ONVIF_DetectDevice(nullptr); + printf("end\n"); + std::cout << "end " << std::endl; + return 0; +} + diff --git a/unit_test/test/onvif/onvif-discover/onvif.h b/unit_test/test/onvif/onvif-discover/onvif.h new file mode 100644 index 0000000..66bffc9 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/onvif.h @@ -0,0 +1,541 @@ +// Reminder: Modify typemap.dat to customize the header file generated by wsdl2h +/* onvif.h + Generated by wsdl2h 2.8.135 from http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl and ../gsoap/WS/typemap.dat + 2024-09-04 02:14:03 GMT + + DO NOT INCLUDE THIS ANNOTATED FILE DIRECTLY IN YOUR PROJECT SOURCE CODE. + USE THE FILES GENERATED BY soapcpp2 FOR YOUR PROJECT'S SOURCE CODE. + +gSOAP XML Web services tools +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc. All Rights Reserved. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +/** + +@page page_notes Notes + +@note HINTS: + - Run soapcpp2 on onvif.h to generate the SOAP/XML processing logic: + Use soapcpp2 -I to specify paths for #import + Use soapcpp2 -j to generate improved proxy and server classes. + Use soapcpp2 -r to generate a report. + - Edit '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. + - Run Doxygen (www.doxygen.org) on this file to generate documentation. + - Use wsdl2h -c to generate pure C code. + - Use wsdl2h -R to include the REST operations defined by the WSDLs. + - Use wsdl2h -O3 or -O4 to optimize by removing unused schema components. + - Use wsdl2h -d to enable DOM support for xsd:any and xsd:anyType. + - Use wsdl2h -F to simulate struct-type derivation in C (also works in C++). + - Use wsdl2h -f to generate flat C++ class hierarchy, removes type derivation. + - Use wsdl2h -g to generate top-level root elements with readers and writers. + - Use wsdl2h -U to map XML names to C++ Unicode identifiers instead of _xNNNN. + - Use wsdl2h -u to disable the generation of unions. + - Use wsdl2h -L to remove this @note and all other @note comments. + - 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 + - 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 ANNOTATED FILE DIRECTLY IN YOUR PROJECT SOURCE CODE. + USE THE FILES GENERATED BY soapcpp2 FOR YOUR PROJECT'S SOURCE CODE: + THE GENERATED soapStub.h FILE CONTAINS THIS CONTENT WITHOUT ANNOTATIONS. + +@copyright LICENSE: +@verbatim +-------------------------------------------------------------------------------- +gSOAP XML Web services tools +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc. All Rights Reserved. +The wsdl2h tool and its generated software are released under the GPL. +This software is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +GPL license. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +Author contact information: +engelen@genivia.com / engelen@acm.org + +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial-use license is available from Genivia, Inc., contact@genivia.com +-------------------------------------------------------------------------------- +@endverbatim + +*/ + + +//gsoapopt c++,w + +/******************************************************************************\ + * * + * Definitions * + * http://www.onvif.org/ver10/network/wsdl * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * $CONTAINER typemap variable: * + * std::vector * + * * +\******************************************************************************/ + +#include +template class std::vector; + +/******************************************************************************\ + * * + * $SIZE typemap variable: * + * int * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Import * + * * +\******************************************************************************/ + +#import "wsdd10.h" // wsdd10 = + +/******************************************************************************\ + * * + * Schema Namespaces * + * * +\******************************************************************************/ + + +/* NOTE: + +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' then rerun wsdl2h (use wsdl2h -t typemap.dat): + +tdn = "http://www.onvif.org/ver10/network/wsdl" + +*/ + +#define SOAP_NAMESPACE_OF_tdn "http://www.onvif.org/ver10/network/wsdl" +//gsoap tdn schema namespace: http://www.onvif.org/ver10/network/wsdl +//gsoap tdn schema elementForm: qualified +//gsoap tdn schema attributeForm: unqualified + +/******************************************************************************\ + * * + * Built-in Schema Types and Top-Level Elements and Attributes * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Forward Declarations * + * * +\******************************************************************************/ + + + +/******************************************************************************\ + * * + * Schema Types and Top-Level Elements and Attributes * + * http://www.onvif.org/ver10/network/wsdl * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Schema Complex Types and Top-Level Elements * + * http://www.onvif.org/ver10/network/wsdl * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Additional Top-Level Elements * + * http://www.onvif.org/ver10/network/wsdl * + * * +\******************************************************************************/ + +/// @brief Top-level root element "http://www.onvif.org/ver10/network/wsdl":Hello of type "http://schemas.xmlsoap.org/ws/2005/04/discovery":HelloType. +/// @note Use wsdl2h option -g to auto-generate a top-level root element declaration. + +/// @brief Top-level root element "http://www.onvif.org/ver10/network/wsdl":HelloResponse of type "http://schemas.xmlsoap.org/ws/2005/04/discovery":ResolveType. +/// @note Use wsdl2h option -g to auto-generate a top-level root element declaration. + +/// @brief Top-level root element "http://www.onvif.org/ver10/network/wsdl":Probe of type "http://schemas.xmlsoap.org/ws/2005/04/discovery":ProbeType. +/// @note Use wsdl2h option -g to auto-generate a top-level root element declaration. + +/// @brief Top-level root element "http://www.onvif.org/ver10/network/wsdl":ProbeResponse of type "http://schemas.xmlsoap.org/ws/2005/04/discovery":ProbeMatchesType. +/// @note Use wsdl2h option -g to auto-generate a top-level root element declaration. + +/// @brief Top-level root element "http://www.onvif.org/ver10/network/wsdl":Bye of type "http://schemas.xmlsoap.org/ws/2005/04/discovery":ByeType. +/// @note Use wsdl2h option -g to auto-generate a top-level root element declaration. + +/// @brief Top-level root element "http://www.onvif.org/ver10/network/wsdl":ByeResponse of type "http://schemas.xmlsoap.org/ws/2005/04/discovery":ResolveType. +/// @note Use wsdl2h option -g to auto-generate a top-level root element declaration. + + +/******************************************************************************\ + * * + * Additional Top-Level Attributes * + * http://www.onvif.org/ver10/network/wsdl * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Services * + * * +\******************************************************************************/ + +// This service supports SOAP 1.2 namespaces: +#import "soap12.h" + +//gsoap tdn service name: RemoteDiscoveryBinding +//gsoap tdn service type: RemoteDiscoveryPort +//gsoap tdn service namespace: http://www.onvif.org/ver10/network/wsdl +//gsoap tdn service transport: http://schemas.xmlsoap.org/soap/http + +/** @mainpage Service Definitions + +@section Service_bindings Service Bindings + + - @ref RemoteDiscoveryBinding + +@section Service_more More Information + + - @ref page_notes "Notes" + + - @ref page_XMLDataBinding "XML Data Binding" + + - @ref SOAP_ENV__Header "SOAP Header Content" (when applicable) + + - @ref SOAP_ENV__Detail "SOAP Fault Detail Content" (when applicable) + + +*/ + +/** @page RemoteDiscoveryBinding Binding "RemoteDiscoveryBinding" + +@section RemoteDiscoveryBinding_operations Operations of Binding "RemoteDiscoveryBinding" + + - @ref __tdn__Hello + + - @ref __tdn__Bye + + - @ref __tdn__Probe + +@section RemoteDiscoveryBinding_ports Default endpoints of Binding "RemoteDiscoveryBinding" + +@note Multiple service bindings collected as one, use wsdl2h option -Nname to produce a separate service for each binding + + +*/ + +/******************************************************************************\ + * * + * Service Binding * + * RemoteDiscoveryBinding * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Service Operation * + * __tdn__Hello * + * * +\******************************************************************************/ + + +/** Operation "__tdn__Hello" of service binding "RemoteDiscoveryBinding". + + - SOAP document/literal style messaging + + - Default SOAP action or REST location path: + - "http://www.onvif.org/ver10/network/wsdl/Hello" + + - Addressing input action: "http://www.onvif.org/ver10/network/wsdl/Hello" + + - Addressing output action: "http://www.onvif.org/ver10/network/wsdl/HelloResponse" + +C stub function (defined in soapClient.c[pp] generated by soapcpp2): +@code + int soap_call___tdn__Hello( + struct soap *soap, + NULL, // char *endpoint = NULL selects default endpoint for this operation + NULL, // char *action = NULL selects default action for this operation + // input parameters: + wsdd__HelloType tdn__Hello, + // output parameters: + wsdd__ResolveType &tdn__HelloResponse + ); +@endcode + +C server function (called from the service dispatcher defined in soapServer.c[pp]): +@code + int __tdn__Hello( + struct soap *soap, + // input parameters: + wsdd__HelloType tdn__Hello, + // output parameters: + wsdd__ResolveType &tdn__HelloResponse + ); +@endcode + +C++ proxy class (defined in soapRemoteDiscoveryBindingProxy.h generated with soapcpp2): +@code + class RemoteDiscoveryBindingProxy; +@endcode +Important: use soapcpp2 option '-j' (or '-i') to generate improved and easy-to-use proxy classes; + +C++ service class (defined in soapRemoteDiscoveryBindingService.h generated with soapcpp2): +@code + class RemoteDiscoveryBindingService; +@endcode +Important: use soapcpp2 option '-j' (or '-i') to generate improved and easy-to-use service classes; + +*/ + +//gsoap tdn service method-protocol: Hello SOAP +//gsoap tdn service method-style: Hello document +//gsoap tdn service method-encoding: Hello literal +//gsoap tdn service method-input-action: Hello http://www.onvif.org/ver10/network/wsdl/Hello +//gsoap tdn service method-output-action: Hello http://www.onvif.org/ver10/network/wsdl/HelloResponse +int __tdn__Hello( + wsdd__HelloType tdn__Hello, ///< Input parameter + wsdd__ResolveType &tdn__HelloResponse ///< Output parameter +); + +/******************************************************************************\ + * * + * Service Operation * + * __tdn__Bye * + * * +\******************************************************************************/ + + +/** Operation "__tdn__Bye" of service binding "RemoteDiscoveryBinding". + + - SOAP document/literal style messaging + + - Default SOAP action or REST location path: + - "http://www.onvif.org/ver10/network/wsdl/Bye" + + - Addressing input action: "http://www.onvif.org/ver10/network/wsdl/Bye" + + - Addressing output action: "http://www.onvif.org/ver10/network/wsdl/ByeResponse" + +C stub function (defined in soapClient.c[pp] generated by soapcpp2): +@code + int soap_call___tdn__Bye( + struct soap *soap, + NULL, // char *endpoint = NULL selects default endpoint for this operation + NULL, // char *action = NULL selects default action for this operation + // input parameters: + wsdd__ByeType tdn__Bye, + // output parameters: + wsdd__ResolveType &tdn__ByeResponse + ); +@endcode + +C server function (called from the service dispatcher defined in soapServer.c[pp]): +@code + int __tdn__Bye( + struct soap *soap, + // input parameters: + wsdd__ByeType tdn__Bye, + // output parameters: + wsdd__ResolveType &tdn__ByeResponse + ); +@endcode + +C++ proxy class (defined in soapRemoteDiscoveryBindingProxy.h generated with soapcpp2): +@code + class RemoteDiscoveryBindingProxy; +@endcode +Important: use soapcpp2 option '-j' (or '-i') to generate improved and easy-to-use proxy classes; + +C++ service class (defined in soapRemoteDiscoveryBindingService.h generated with soapcpp2): +@code + class RemoteDiscoveryBindingService; +@endcode +Important: use soapcpp2 option '-j' (or '-i') to generate improved and easy-to-use service classes; + +*/ + +//gsoap tdn service method-protocol: Bye SOAP +//gsoap tdn service method-style: Bye document +//gsoap tdn service method-encoding: Bye literal +//gsoap tdn service method-input-action: Bye http://www.onvif.org/ver10/network/wsdl/Bye +//gsoap tdn service method-output-action: Bye http://www.onvif.org/ver10/network/wsdl/ByeResponse +int __tdn__Bye( + wsdd__ByeType tdn__Bye, ///< Input parameter + wsdd__ResolveType &tdn__ByeResponse ///< Output parameter +); + +/******************************************************************************\ + * * + * Service Operation * + * __tdn__Probe * + * * +\******************************************************************************/ + + +/** Operation "__tdn__Probe" of service binding "RemoteDiscoveryBinding". + + - SOAP document/literal style messaging + + - Default SOAP action or REST location path: + - "http://www.onvif.org/ver10/network/wsdl/Probe" + + - Addressing input action: "http://www.onvif.org/ver10/network/wsdl/Probe" + + - Addressing output action: "http://www.onvif.org/ver10/network/wsdl/ProbeResponse" + +C stub function (defined in soapClient.c[pp] generated by soapcpp2): +@code + int soap_call___tdn__Probe( + struct soap *soap, + NULL, // char *endpoint = NULL selects default endpoint for this operation + NULL, // char *action = NULL selects default action for this operation + // input parameters: + wsdd__ProbeType tdn__Probe, + // output parameters: + wsdd__ProbeMatchesType &tdn__ProbeResponse + ); +@endcode + +C server function (called from the service dispatcher defined in soapServer.c[pp]): +@code + int __tdn__Probe( + struct soap *soap, + // input parameters: + wsdd__ProbeType tdn__Probe, + // output parameters: + wsdd__ProbeMatchesType &tdn__ProbeResponse + ); +@endcode + +C++ proxy class (defined in soapRemoteDiscoveryBindingProxy.h generated with soapcpp2): +@code + class RemoteDiscoveryBindingProxy; +@endcode +Important: use soapcpp2 option '-j' (or '-i') to generate improved and easy-to-use proxy classes; + +C++ service class (defined in soapRemoteDiscoveryBindingService.h generated with soapcpp2): +@code + class RemoteDiscoveryBindingService; +@endcode +Important: use soapcpp2 option '-j' (or '-i') to generate improved and easy-to-use service classes; + +*/ + +//gsoap tdn service method-protocol: Probe SOAP +//gsoap tdn service method-style: Probe document +//gsoap tdn service method-encoding: Probe literal +//gsoap tdn service method-input-action: Probe http://www.onvif.org/ver10/network/wsdl/Probe +//gsoap tdn service method-output-action: Probe http://www.onvif.org/ver10/network/wsdl/ProbeResponse +int __tdn__Probe( + wsdd__ProbeType tdn__Probe, ///< Input parameter + wsdd__ProbeMatchesType &tdn__ProbeResponse ///< Output parameter +); + +/** @page RemoteDiscoveryBinding Binding "RemoteDiscoveryBinding" + +@section RemoteDiscoveryBinding_policy_enablers Policy Enablers of Binding "RemoteDiscoveryBinding" + +None specified. + +*/ + +/******************************************************************************\ + * * + * XML Data Binding * + * * +\******************************************************************************/ + + +/** @page page_XMLDataBinding XML Data Binding + +SOAP/XML services use data bindings that are contractually bound by WSDLs and +are auto-generated by wsdl2h and soapcpp2 (see Service Bindings). Plain data +bindings are adopted from XML schemas as part of the WSDL types section or when +running wsdl2h on a set of schemas to produce non-SOAP-based XML data bindings. + +@note The following readers and writers are C/C++ data type (de)serializers +auto-generated by wsdl2h and soapcpp2. Run soapcpp2 on this file to generate the +(de)serialization code, which is stored in soapC.c[pp]. Include "soapH.h" in +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. + +@note Data can be read and deserialized from: + - an int file descriptor, using soap->recvfd = fd + - a socket, using soap->socket = (int)... + - a C++ stream (istream, stringstream), using soap->is = (istream*)... + - a C string, using soap->is = (const char*)... + - any input, using the soap->frecv() callback + +@note Data can be serialized and written to: + - an int file descriptor, using soap->sendfd = (int)... + - a socket, using soap->socket = (int)... + - a C++ stream (ostream, stringstream), using soap->os = (ostream*)... + - a C string, using soap->os = (const char**)... + - any output, using the soap->fsend() callback + +@note The following options are available for (de)serialization control: + - soap->encodingStyle = NULL; to remove SOAP 1.1/1.2 encodingStyle + - soap_set_mode(soap, SOAP_XML_TREE); XML without id-ref (no cycles!) + - soap_set_mode(soap, SOAP_XML_GRAPH); XML with id-ref (including cycles) + - soap_set_namespaces(soap, struct Namespace *nsmap); to set xmlns bindings + + +*/ + +/** + +@section tdn Top-level root elements of schema "http://www.onvif.org/ver10/network/wsdl" + + - (use wsdl2h option -g to auto-generate type _tdn__Hello) + + - (use wsdl2h option -g to auto-generate type _tdn__HelloResponse) + + - (use wsdl2h option -g to auto-generate type _tdn__Probe) + + - (use wsdl2h option -g to auto-generate type _tdn__ProbeResponse) + + - (use wsdl2h option -g to auto-generate type _tdn__Bye) + + - (use wsdl2h option -g to auto-generate type _tdn__ByeResponse) + +*/ + +/* End of onvif.h */ diff --git a/unit_test/test/onvif/onvif-discover/soapC.cpp b/unit_test/test/onvif/onvif-discover/soapC.cpp new file mode 100644 index 0000000..fa75d1e --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/soapC.cpp @@ -0,0 +1,7267 @@ +/* soapC.cpp + Generated by gSOAP 2.8.135 for ../onvif_head/onvif.h + +gSOAP XML Web services tools +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc. All Rights Reserved. +The soapcpp2 tool and its generated software are released under the GPL. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#if defined(__BORLANDC__) +#pragma option push -w-8060 +#pragma option push -w-8004 +#endif + +#include "soapH.h" + +SOAP_SOURCE_STAMP("@(#) soapC.cpp ver 2.8.135 2024-09-04 02:23:14 GMT") + + +#ifndef WITH_NOGLOBAL + +SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap) +{ + soap->part = SOAP_IN_HEADER; + soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", soap->header, NULL); + soap->part = SOAP_END_HEADER; + return soap->header == NULL; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap) +{ + if (soap->version && soap->header) + { soap->part = SOAP_IN_HEADER; + if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, "")) + return soap->error; + soap->part = SOAP_END_HEADER; + } + return SOAP_OK; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap) +{ + 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 == NULL) + { if ((soap->header = soap_new_SOAP_ENV__Header(soap))) + soap_default_SOAP_ENV__Header(soap, soap->header); + } +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap) +{ + if (soap->fault == NULL) + { soap->fault = soap_new_SOAP_ENV__Fault(soap, -1); + if (soap->fault == NULL) + return; + } + if (soap->version == 2 && soap->fault->SOAP_ENV__Code == NULL) + soap->fault->SOAP_ENV__Code = soap_new_SOAP_ENV__Code(soap, -1); + if (soap->version == 2 && soap->fault->SOAP_ENV__Reason == NULL) + soap->fault->SOAP_ENV__Reason = soap_new_SOAP_ENV__Reason(soap, -1); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap *soap) +{ + if (soap->fault) + soap_serialize_SOAP_ENV__Fault(soap, soap->fault); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap *soap) +{ + if (soap->fault) + return soap_put_SOAP_ENV__Fault(soap, soap->fault, "SOAP-ENV:Fault", ""); + return SOAP_OK; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap) +{ + return (soap->fault = soap_get_SOAP_ENV__Fault(soap, NULL, "SOAP-ENV:Fault", NULL)) == NULL; +} + +SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *soap) +{ + soap_fault(soap); + if (soap->fault == NULL) + return NULL; + if (soap->version == 2 && soap->fault->SOAP_ENV__Code) + return (const char**)(void*)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value; + return (const char**)(void*)&soap->fault->faultcode; +} + +SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultsubcode(struct soap *soap) +{ + soap_fault(soap); + if (soap->fault == NULL) + return NULL; + if (soap->version == 2 && soap->fault->SOAP_ENV__Code) + { 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); + if (soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode == NULL) + return NULL; + } + return (const char**)(void*)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value; + } + return (const char**)(void*)&soap->fault->faultcode; +} + +SOAP_FMAC3 const char * SOAP_FMAC4 soap_fault_subcode(struct soap *soap) +{ + if (!soap->fault) + return NULL; + if (soap->version == 2) + return soap->fault->SOAP_ENV__Code && soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode ? soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value : NULL; + return soap->fault->faultcode; +} + +SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap) +{ + soap_fault(soap); + if (soap->fault == NULL) + return NULL; + if (soap->version == 2 && soap->fault->SOAP_ENV__Reason) + return (const char**)(void*)&soap->fault->SOAP_ENV__Reason->SOAP_ENV__Text; + return (const char**)(void*)&soap->fault->faultstring; +} + +SOAP_FMAC3 const char * SOAP_FMAC4 soap_fault_string(struct soap *soap) +{ + const char **s = soap_faultstring(soap); + return s ? *s : NULL; +} + +SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultdetail(struct soap *soap) +{ + soap_fault(soap); + if (soap->fault == NULL) + return NULL; + if (soap->version == 2) + { if (soap->fault->SOAP_ENV__Detail == NULL) + soap->fault->SOAP_ENV__Detail = soap_new_SOAP_ENV__Detail(soap, -1); + return (const char**)(void*)&soap->fault->SOAP_ENV__Detail->__any; + } + if (soap->fault->detail == NULL) + soap->fault->detail = soap_new_SOAP_ENV__Detail(soap, -1); + return (const char**)(void*)&soap->fault->detail->__any; +} + +SOAP_FMAC3 const char * SOAP_FMAC4 soap_fault_detail(struct soap *soap) +{ + const char **s = soap_faultdetail(soap); + return s ? *s : NULL; +} + +#endif + +#ifndef WITH_NOIDREF +SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap) +{ + int t; + if (soap->version == 1) + { for (;;) + { if (!soap_getelement(soap, NULL, &t)) + if ((soap->error && soap->error != SOAP_TAG_MISMATCH) || soap_ignore_element(soap)) + break; + } + } + if (soap->error == SOAP_NO_TAG || soap->error == SOAP_EOF) + soap->error = SOAP_OK; + return soap->error; +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif +SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, const char *tag, 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_byte: + return soap_in_byte(soap, tag, NULL, "xsd:byte"); + case SOAP_TYPE_int: + return soap_in_int(soap, tag, NULL, "xsd:int"); + case SOAP_TYPE_unsignedInt: + return soap_in_unsignedInt(soap, tag, NULL, "xsd:unsignedInt"); + case SOAP_TYPE_wsdd__FaultCodeType: + return soap_in_wsdd__FaultCodeType(soap, tag, NULL, "wsdd:FaultCodeType"); + case SOAP_TYPE_wsa__FaultSubcodeValues: + return soap_in_wsa__FaultSubcodeValues(soap, tag, NULL, "wsa:FaultSubcodeValues"); + case SOAP_TYPE_wsa__RelationshipTypeValues: + return soap_in_wsa__RelationshipTypeValues(soap, tag, NULL, "wsa:RelationshipTypeValues"); + case SOAP_TYPE_wsdd__AppSequenceType: + return soap_in_wsdd__AppSequenceType(soap, tag, NULL, "wsdd:AppSequenceType"); + case SOAP_TYPE_wsdd__SigType: + return soap_in_wsdd__SigType(soap, tag, NULL, "wsdd:SigType"); + case SOAP_TYPE_wsdd__SecurityType: + return soap_in_wsdd__SecurityType(soap, tag, NULL, "wsdd:SecurityType"); + case SOAP_TYPE_wsdd__ScopesType: + return soap_in_wsdd__ScopesType(soap, tag, NULL, "wsdd:ScopesType"); + case SOAP_TYPE_wsdd__ResolveMatchType: + return soap_in_wsdd__ResolveMatchType(soap, tag, NULL, "wsdd:ResolveMatchType"); + case SOAP_TYPE_wsdd__ResolveMatchesType: + return soap_in_wsdd__ResolveMatchesType(soap, tag, NULL, "wsdd:ResolveMatchesType"); + case SOAP_TYPE_wsdd__ResolveType: + return soap_in_wsdd__ResolveType(soap, tag, NULL, "wsdd:ResolveType"); + case SOAP_TYPE_wsdd__ProbeMatchType: + return soap_in_wsdd__ProbeMatchType(soap, tag, NULL, "wsdd:ProbeMatchType"); + case SOAP_TYPE_wsdd__ProbeMatchesType: + return soap_in_wsdd__ProbeMatchesType(soap, tag, NULL, "wsdd:ProbeMatchesType"); + case SOAP_TYPE_wsdd__ProbeType: + return soap_in_wsdd__ProbeType(soap, tag, NULL, "wsdd:ProbeType"); + case SOAP_TYPE_wsdd__ByeType: + return soap_in_wsdd__ByeType(soap, tag, NULL, "wsdd:ByeType"); + case SOAP_TYPE_wsdd__HelloType: + return soap_in_wsdd__HelloType(soap, tag, NULL, "wsdd:HelloType"); + case SOAP_TYPE_wsa__Relationship: + return soap_in_wsa__Relationship(soap, tag, NULL, "wsa:Relationship"); + case SOAP_TYPE_wsa__ServiceNameType: + return soap_in_wsa__ServiceNameType(soap, tag, NULL, "wsa:ServiceNameType"); + case SOAP_TYPE_wsa__ReferenceParametersType: + return soap_in_wsa__ReferenceParametersType(soap, tag, NULL, "wsa:ReferenceParametersType"); + case SOAP_TYPE_wsa__ReferencePropertiesType: + return soap_in_wsa__ReferencePropertiesType(soap, tag, NULL, "wsa:ReferencePropertiesType"); + case SOAP_TYPE_wsa__EndpointReferenceType: + return soap_in_wsa__EndpointReferenceType(soap, tag, NULL, "wsa:EndpointReferenceType"); + case SOAP_TYPE_PointerTowsdd__ResolveMatchesType: + return soap_in_PointerTowsdd__ResolveMatchesType(soap, tag, NULL, "wsdd:ResolveMatchesType"); + case SOAP_TYPE_PointerTowsdd__ResolveType: + return soap_in_PointerTowsdd__ResolveType(soap, tag, NULL, "wsdd:ResolveType"); + case SOAP_TYPE_PointerTowsdd__ProbeMatchesType: + return soap_in_PointerTowsdd__ProbeMatchesType(soap, tag, NULL, "wsdd:ProbeMatchesType"); + case SOAP_TYPE_PointerTowsdd__ProbeType: + return soap_in_PointerTowsdd__ProbeType(soap, tag, NULL, "wsdd:ProbeType"); + case SOAP_TYPE_PointerTowsdd__ByeType: + return soap_in_PointerTowsdd__ByeType(soap, tag, NULL, "wsdd:ByeType"); + case SOAP_TYPE_PointerTowsdd__HelloType: + return soap_in_PointerTowsdd__HelloType(soap, tag, NULL, "wsdd:HelloType"); + case SOAP_TYPE_PointerTowsdd__AppSequenceType: + return soap_in_PointerTowsdd__AppSequenceType(soap, tag, NULL, "wsdd:AppSequenceType"); + case SOAP_TYPE__wsdd__Types: + { char **s; + s = soap_in__wsdd__Types(soap, tag, NULL, "xsd:QName"); + return s ? *s : NULL; + } + case SOAP_TYPE_PointerTowsdd__SigType: + return soap_in_PointerTowsdd__SigType(soap, tag, NULL, "wsdd:SigType"); + case SOAP_TYPE_PointerTowsdd__ResolveMatchType: + return soap_in_PointerTowsdd__ResolveMatchType(soap, tag, NULL, "wsdd:ResolveMatchType"); + case SOAP_TYPE_PointerTowsdd__ProbeMatchType: + return soap_in_PointerTowsdd__ProbeMatchType(soap, tag, NULL, "wsdd:ProbeMatchType"); + case SOAP_TYPE_PointerTounsignedInt: + return soap_in_PointerTounsignedInt(soap, tag, NULL, "xsd:unsignedInt"); + case SOAP_TYPE_PointerTowsdd__ScopesType: + return soap_in_PointerTowsdd__ScopesType(soap, tag, NULL, "wsdd:ScopesType"); + case SOAP_TYPE_wsdd__FaultCodeOpenType: + { char **s; + s = soap_in_wsdd__FaultCodeOpenType(soap, tag, NULL, "wsdd:FaultCodeOpenType"); + return s ? *s : NULL; + } + case SOAP_TYPE_wsdd__UriListType: + { char **s; + s = soap_in_wsdd__UriListType(soap, tag, NULL, "wsdd:UriListType"); + return s ? *s : NULL; + } + case SOAP_TYPE_wsdd__QNameListType: + { char **s; + s = soap_in_wsdd__QNameListType(soap, tag, NULL, "xsd:QName"); + return s ? *s : NULL; + } + case SOAP_TYPE_PointerTo_wsa__FaultTo: + return soap_in_PointerTo_wsa__FaultTo(soap, tag, NULL, "wsa:FaultTo"); + case SOAP_TYPE_PointerTo_wsa__ReplyTo: + return soap_in_PointerTo_wsa__ReplyTo(soap, tag, NULL, "wsa:ReplyTo"); + case SOAP_TYPE_PointerTo_wsa__From: + return soap_in_PointerTo_wsa__From(soap, tag, NULL, "wsa:From"); + case SOAP_TYPE_PointerTo_wsa__RelatesTo: + return soap_in_PointerTo_wsa__RelatesTo(soap, tag, NULL, "wsa:RelatesTo"); + case SOAP_TYPE_PointerTowsa__ServiceNameType: + return soap_in_PointerTowsa__ServiceNameType(soap, tag, NULL, "wsa:ServiceNameType"); + case SOAP_TYPE_PointerTo_QName: + return soap_in_PointerTo_QName(soap, tag, NULL, "xsd:QName"); + case SOAP_TYPE_PointerTowsa__ReferenceParametersType: + return soap_in_PointerTowsa__ReferenceParametersType(soap, tag, NULL, "wsa:ReferenceParametersType"); + case SOAP_TYPE_PointerTowsa__ReferencePropertiesType: + return soap_in_PointerTowsa__ReferencePropertiesType(soap, tag, NULL, "wsa:ReferencePropertiesType"); + case SOAP_TYPE__QName: + { char **s; + s = soap_in__QName(soap, tag, NULL, "xsd:QName"); + return s ? *s : NULL; + } + case SOAP_TYPE_string: + { char **s; + s = soap_in_string(soap, tag, NULL, "xsd:string"); + 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, "xsd:byte")) + { *type = SOAP_TYPE_byte; + return soap_in_byte(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:int")) + { *type = SOAP_TYPE_int; + return soap_in_int(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:unsignedInt")) + { *type = SOAP_TYPE_unsignedInt; + return soap_in_unsignedInt(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:FaultCodeType")) + { *type = SOAP_TYPE_wsdd__FaultCodeType; + return soap_in_wsdd__FaultCodeType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:FaultSubcodeValues")) + { *type = SOAP_TYPE_wsa__FaultSubcodeValues; + return soap_in_wsa__FaultSubcodeValues(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:RelationshipTypeValues")) + { *type = SOAP_TYPE_wsa__RelationshipTypeValues; + return soap_in_wsa__RelationshipTypeValues(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:AppSequenceType")) + { *type = SOAP_TYPE_wsdd__AppSequenceType; + return soap_in_wsdd__AppSequenceType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:SigType")) + { *type = SOAP_TYPE_wsdd__SigType; + return soap_in_wsdd__SigType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:SecurityType")) + { *type = SOAP_TYPE_wsdd__SecurityType; + return soap_in_wsdd__SecurityType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ScopesType")) + { *type = SOAP_TYPE_wsdd__ScopesType; + return soap_in_wsdd__ScopesType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ResolveMatchType")) + { *type = SOAP_TYPE_wsdd__ResolveMatchType; + return soap_in_wsdd__ResolveMatchType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ResolveMatchesType")) + { *type = SOAP_TYPE_wsdd__ResolveMatchesType; + return soap_in_wsdd__ResolveMatchesType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ResolveType")) + { *type = SOAP_TYPE_wsdd__ResolveType; + return soap_in_wsdd__ResolveType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ProbeMatchType")) + { *type = SOAP_TYPE_wsdd__ProbeMatchType; + return soap_in_wsdd__ProbeMatchType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ProbeMatchesType")) + { *type = SOAP_TYPE_wsdd__ProbeMatchesType; + return soap_in_wsdd__ProbeMatchesType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ProbeType")) + { *type = SOAP_TYPE_wsdd__ProbeType; + return soap_in_wsdd__ProbeType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ByeType")) + { *type = SOAP_TYPE_wsdd__ByeType; + return soap_in_wsdd__ByeType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:HelloType")) + { *type = SOAP_TYPE_wsdd__HelloType; + return soap_in_wsdd__HelloType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:Relationship")) + { *type = SOAP_TYPE_wsa__Relationship; + return soap_in_wsa__Relationship(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:ServiceNameType")) + { *type = SOAP_TYPE_wsa__ServiceNameType; + return soap_in_wsa__ServiceNameType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:ReferenceParametersType")) + { *type = SOAP_TYPE_wsa__ReferenceParametersType; + return soap_in_wsa__ReferenceParametersType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:ReferencePropertiesType")) + { *type = SOAP_TYPE_wsa__ReferencePropertiesType; + return soap_in_wsa__ReferencePropertiesType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:EndpointReferenceType")) + { *type = SOAP_TYPE_wsa__EndpointReferenceType; + return soap_in_wsa__EndpointReferenceType(soap, tag, NULL, NULL); + } + if (!soap_match_tag(soap, t, "xsd:QName")) + { char **s; + *type = SOAP_TYPE__wsdd__Types; + s = soap_in__wsdd__Types(soap, tag, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "wsdd:FaultCodeOpenType")) + { char **s; + *type = SOAP_TYPE_wsdd__FaultCodeOpenType; + s = soap_in_wsdd__FaultCodeOpenType(soap, tag, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "wsdd:UriListType")) + { char **s; + *type = SOAP_TYPE_wsdd__UriListType; + s = soap_in_wsdd__UriListType(soap, tag, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "xsd:QName")) + { char **s; + *type = SOAP_TYPE_wsdd__QNameListType; + s = soap_in_wsdd__QNameListType(soap, tag, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "xsd:QName")) + { char **s; + *type = SOAP_TYPE__QName; + s = soap_in__QName(soap, tag, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "xsd:string")) + { char **s; + *type = SOAP_TYPE_string; + s = soap_in_string(soap, tag, NULL, NULL); + return s ? *s : NULL; + } + t = soap->tag; + if (!soap_match_tag(soap, t, "wsdd:MetadataVersion")) + { *type = SOAP_TYPE__wsdd__MetadataVersion; + return soap_in__wsdd__MetadataVersion(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:ReplyAfter")) + { *type = SOAP_TYPE__wsa__ReplyAfter; + return soap_in__wsa__ReplyAfter(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:AppSequence")) + { *type = SOAP_TYPE__wsdd__AppSequence; + return soap_in__wsdd__AppSequence(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Sig")) + { *type = SOAP_TYPE__wsdd__Sig; + return soap_in__wsdd__Sig(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Security")) + { *type = SOAP_TYPE__wsdd__Security; + return soap_in__wsdd__Security(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Scopes")) + { *type = SOAP_TYPE__wsdd__Scopes; + return soap_in__wsdd__Scopes(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ResolveMatches")) + { *type = SOAP_TYPE__wsdd__ResolveMatches; + return soap_in__wsdd__ResolveMatches(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Resolve")) + { *type = SOAP_TYPE__wsdd__Resolve; + return soap_in__wsdd__Resolve(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:ProbeMatches")) + { *type = SOAP_TYPE__wsdd__ProbeMatches; + return soap_in__wsdd__ProbeMatches(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Probe")) + { *type = SOAP_TYPE__wsdd__Probe; + return soap_in__wsdd__Probe(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Bye")) + { *type = SOAP_TYPE__wsdd__Bye; + return soap_in__wsdd__Bye(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Hello")) + { *type = SOAP_TYPE__wsdd__Hello; + return soap_in__wsdd__Hello(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:FaultTo")) + { *type = SOAP_TYPE__wsa__FaultTo; + return soap_in__wsa__FaultTo(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:ReplyTo")) + { *type = SOAP_TYPE__wsa__ReplyTo; + return soap_in__wsa__ReplyTo(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:From")) + { *type = SOAP_TYPE__wsa__From; + return soap_in__wsa__From(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:RelatesTo")) + { *type = SOAP_TYPE__wsa__RelatesTo; + return soap_in__wsa__RelatesTo(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsa:EndpointReference")) + { *type = SOAP_TYPE__wsa__EndpointReference; + return soap_in__wsa__EndpointReference(soap, NULL, NULL, NULL); + } + if (!soap_match_tag(soap, t, "wsdd:Id")) + { char **s; + *type = SOAP_TYPE__wsdd__Id; + s = soap_in__wsdd__Id(soap, NULL, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "wsdd:SupportedMatchingRules")) + { char **s; + *type = SOAP_TYPE__wsdd__SupportedMatchingRules; + s = soap_in__wsdd__SupportedMatchingRules(soap, NULL, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "wsdd:XAddrs")) + { char **s; + *type = SOAP_TYPE__wsdd__XAddrs; + s = soap_in__wsdd__XAddrs(soap, NULL, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "wsa:Action")) + { char **s; + *type = SOAP_TYPE__wsa__Action; + s = soap_in__wsa__Action(soap, NULL, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "wsa:To")) + { char **s; + *type = SOAP_TYPE__wsa__To; + s = soap_in__wsa__To(soap, NULL, NULL, NULL); + return s ? *s : NULL; + } + if (!soap_match_tag(soap, t, "wsa:MessageID")) + { char **s; + *type = SOAP_TYPE__wsa__MessageID; + s = soap_in__wsa__MessageID(soap, NULL, NULL, NULL); + return s ? *s : NULL; + } +#ifndef WITH_NOIDREF + } +#endif + } + soap->error = SOAP_TAG_MISMATCH; + return NULL; +} + +#ifdef __cplusplus +} +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap) +{ + if (!soap_peek_element(soap)) + { int t; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unexpected element '%s' in input at level = %u body = %d)\n", soap->tag, soap->level, soap->body)); + if (soap->mustUnderstand && !soap->other && !soap->fignore) + return soap->error = SOAP_MUSTUNDERSTAND; + if (((soap->mode & SOAP_XML_STRICT) && !soap->fignore && soap->part != SOAP_IN_HEADER) || !soap_match_tag(soap, soap->tag, "SOAP-ENV:")) + { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "REJECTING element '%s'\n", soap->tag)); + return soap->error = SOAP_TAG_MISMATCH; + } + if (!*soap->id || !soap_getelement(soap, NULL, &t)) + { soap->peeked = 0; + if (soap->fignore) + soap->error = soap->fignore(soap, soap->tag); + else + soap->error = SOAP_OK; + DBGLOG(TEST, if (!soap->error) SOAP_MESSAGE(fdebug, "IGNORING element '%s'\n", soap->tag)); + if (!soap->error && soap->body && soap_ignore(soap)) + return soap->error; + } + } + return soap->error; +} + +#ifndef WITH_NOIDREF +SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap *soap) +{ + int i; + struct soap_plist *pp; + if (soap->version == 1 && soap->encodingStyle && !(soap->mode & (SOAP_XML_TREE | SOAP_XML_GRAPH))) + for (i = 0; i < SOAP_PTRHASH; i++) + for (pp = soap->pht[i]; pp; pp = pp->next) + if (pp->mark1 == 2 || pp->mark2 == 2) + if (soap_putelement(soap, pp->ptr, SOAP_MULTIREFTAG, pp->id, pp->type)) + return soap->error; + return SOAP_OK; +} +#endif + +#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_byte: + return soap_out_byte(soap, tag, id, (const char *)ptr, "xsd:byte"); + case SOAP_TYPE_int: + return soap_out_int(soap, tag, id, (const int *)ptr, "xsd:int"); + case SOAP_TYPE__wsdd__MetadataVersion: + return soap_out__wsdd__MetadataVersion(soap, "wsdd:MetadataVersion", id, (const unsigned int *)ptr, ""); + case SOAP_TYPE__wsa__ReplyAfter: + return soap_out__wsa__ReplyAfter(soap, "wsa:ReplyAfter", id, (const unsigned int *)ptr, ""); + case SOAP_TYPE_unsignedInt: + return soap_out_unsignedInt(soap, tag, id, (const unsigned int *)ptr, "xsd:unsignedInt"); + case SOAP_TYPE_wsdd__FaultCodeType: + return soap_out_wsdd__FaultCodeType(soap, tag, id, (const enum wsdd__FaultCodeType *)ptr, "wsdd:FaultCodeType"); + case SOAP_TYPE_wsa__FaultSubcodeValues: + return soap_out_wsa__FaultSubcodeValues(soap, tag, id, (const enum wsa__FaultSubcodeValues *)ptr, "wsa:FaultSubcodeValues"); + case SOAP_TYPE_wsa__RelationshipTypeValues: + return soap_out_wsa__RelationshipTypeValues(soap, tag, id, (const enum wsa__RelationshipTypeValues *)ptr, "wsa:RelationshipTypeValues"); + case SOAP_TYPE__wsdd__AppSequence: + return soap_out__wsdd__AppSequence(soap, "wsdd:AppSequence", id, (const struct wsdd__AppSequenceType *)ptr, ""); + case SOAP_TYPE__wsdd__Sig: + return soap_out__wsdd__Sig(soap, "wsdd:Sig", id, (const struct wsdd__SigType *)ptr, ""); + case SOAP_TYPE__wsdd__Security: + return soap_out__wsdd__Security(soap, "wsdd:Security", id, (const struct wsdd__SecurityType *)ptr, ""); + case SOAP_TYPE__wsdd__Scopes: + return soap_out__wsdd__Scopes(soap, "wsdd:Scopes", id, (const struct wsdd__ScopesType *)ptr, ""); + case SOAP_TYPE__wsdd__ResolveMatches: + return soap_out__wsdd__ResolveMatches(soap, "wsdd:ResolveMatches", id, (const struct wsdd__ResolveMatchesType *)ptr, ""); + case SOAP_TYPE__wsdd__Resolve: + return soap_out__wsdd__Resolve(soap, "wsdd:Resolve", id, (const struct wsdd__ResolveType *)ptr, ""); + case SOAP_TYPE__wsdd__ProbeMatches: + return soap_out__wsdd__ProbeMatches(soap, "wsdd:ProbeMatches", id, (const struct wsdd__ProbeMatchesType *)ptr, ""); + case SOAP_TYPE__wsdd__Probe: + return soap_out__wsdd__Probe(soap, "wsdd:Probe", id, (const struct wsdd__ProbeType *)ptr, ""); + case SOAP_TYPE__wsdd__Bye: + return soap_out__wsdd__Bye(soap, "wsdd:Bye", id, (const struct wsdd__ByeType *)ptr, ""); + case SOAP_TYPE__wsdd__Hello: + return soap_out__wsdd__Hello(soap, "wsdd:Hello", id, (const struct wsdd__HelloType *)ptr, ""); + case SOAP_TYPE_wsdd__AppSequenceType: + return soap_out_wsdd__AppSequenceType(soap, tag, id, (const struct wsdd__AppSequenceType *)ptr, "wsdd:AppSequenceType"); + case SOAP_TYPE_wsdd__SigType: + return soap_out_wsdd__SigType(soap, tag, id, (const struct wsdd__SigType *)ptr, "wsdd:SigType"); + case SOAP_TYPE_wsdd__SecurityType: + return soap_out_wsdd__SecurityType(soap, tag, id, (const struct wsdd__SecurityType *)ptr, "wsdd:SecurityType"); + case SOAP_TYPE_wsdd__ScopesType: + return soap_out_wsdd__ScopesType(soap, tag, id, (const struct wsdd__ScopesType *)ptr, "wsdd:ScopesType"); + case SOAP_TYPE_wsdd__ResolveMatchType: + return soap_out_wsdd__ResolveMatchType(soap, tag, id, (const struct wsdd__ResolveMatchType *)ptr, "wsdd:ResolveMatchType"); + case SOAP_TYPE_wsdd__ResolveMatchesType: + return soap_out_wsdd__ResolveMatchesType(soap, tag, id, (const struct wsdd__ResolveMatchesType *)ptr, "wsdd:ResolveMatchesType"); + case SOAP_TYPE_wsdd__ResolveType: + return soap_out_wsdd__ResolveType(soap, tag, id, (const struct wsdd__ResolveType *)ptr, "wsdd:ResolveType"); + case SOAP_TYPE_wsdd__ProbeMatchType: + return soap_out_wsdd__ProbeMatchType(soap, tag, id, (const struct wsdd__ProbeMatchType *)ptr, "wsdd:ProbeMatchType"); + case SOAP_TYPE_wsdd__ProbeMatchesType: + return soap_out_wsdd__ProbeMatchesType(soap, tag, id, (const struct wsdd__ProbeMatchesType *)ptr, "wsdd:ProbeMatchesType"); + case SOAP_TYPE_wsdd__ProbeType: + return soap_out_wsdd__ProbeType(soap, tag, id, (const struct wsdd__ProbeType *)ptr, "wsdd:ProbeType"); + case SOAP_TYPE_wsdd__ByeType: + return soap_out_wsdd__ByeType(soap, tag, id, (const struct wsdd__ByeType *)ptr, "wsdd:ByeType"); + case SOAP_TYPE_wsdd__HelloType: + return soap_out_wsdd__HelloType(soap, tag, id, (const struct wsdd__HelloType *)ptr, "wsdd:HelloType"); + case SOAP_TYPE__wsa__FaultTo: + return soap_out__wsa__FaultTo(soap, "wsa:FaultTo", id, (const struct wsa__EndpointReferenceType *)ptr, ""); + case SOAP_TYPE__wsa__ReplyTo: + return soap_out__wsa__ReplyTo(soap, "wsa:ReplyTo", id, (const struct wsa__EndpointReferenceType *)ptr, ""); + case SOAP_TYPE__wsa__From: + return soap_out__wsa__From(soap, "wsa:From", id, (const struct wsa__EndpointReferenceType *)ptr, ""); + case SOAP_TYPE__wsa__RelatesTo: + return soap_out__wsa__RelatesTo(soap, "wsa:RelatesTo", id, (const struct wsa__Relationship *)ptr, ""); + case SOAP_TYPE__wsa__EndpointReference: + return soap_out__wsa__EndpointReference(soap, "wsa:EndpointReference", id, (const struct wsa__EndpointReferenceType *)ptr, ""); + case SOAP_TYPE_wsa__Relationship: + return soap_out_wsa__Relationship(soap, tag, id, (const struct wsa__Relationship *)ptr, "wsa:Relationship"); + case SOAP_TYPE_wsa__ServiceNameType: + return soap_out_wsa__ServiceNameType(soap, tag, id, (const struct wsa__ServiceNameType *)ptr, "wsa:ServiceNameType"); + case SOAP_TYPE_wsa__ReferenceParametersType: + return soap_out_wsa__ReferenceParametersType(soap, tag, id, (const struct wsa__ReferenceParametersType *)ptr, "wsa:ReferenceParametersType"); + case SOAP_TYPE_wsa__ReferencePropertiesType: + return soap_out_wsa__ReferencePropertiesType(soap, tag, id, (const struct wsa__ReferencePropertiesType *)ptr, "wsa:ReferencePropertiesType"); + case SOAP_TYPE_wsa__EndpointReferenceType: + return soap_out_wsa__EndpointReferenceType(soap, tag, id, (const struct wsa__EndpointReferenceType *)ptr, "wsa:EndpointReferenceType"); + case SOAP_TYPE_PointerTowsdd__ResolveMatchesType: + return soap_out_PointerTowsdd__ResolveMatchesType(soap, tag, id, (struct wsdd__ResolveMatchesType *const*)ptr, "wsdd:ResolveMatchesType"); + case SOAP_TYPE_PointerTowsdd__ResolveType: + return soap_out_PointerTowsdd__ResolveType(soap, tag, id, (struct wsdd__ResolveType *const*)ptr, "wsdd:ResolveType"); + case SOAP_TYPE_PointerTowsdd__ProbeMatchesType: + return soap_out_PointerTowsdd__ProbeMatchesType(soap, tag, id, (struct wsdd__ProbeMatchesType *const*)ptr, "wsdd:ProbeMatchesType"); + case SOAP_TYPE_PointerTowsdd__ProbeType: + return soap_out_PointerTowsdd__ProbeType(soap, tag, id, (struct wsdd__ProbeType *const*)ptr, "wsdd:ProbeType"); + case SOAP_TYPE_PointerTowsdd__ByeType: + return soap_out_PointerTowsdd__ByeType(soap, tag, id, (struct wsdd__ByeType *const*)ptr, "wsdd:ByeType"); + case SOAP_TYPE_PointerTowsdd__HelloType: + return soap_out_PointerTowsdd__HelloType(soap, tag, id, (struct wsdd__HelloType *const*)ptr, "wsdd:HelloType"); + case SOAP_TYPE_PointerTowsdd__AppSequenceType: + return soap_out_PointerTowsdd__AppSequenceType(soap, tag, id, (struct wsdd__AppSequenceType *const*)ptr, "wsdd:AppSequenceType"); + case SOAP_TYPE__wsdd__Id: + return soap_out_string(soap, "wsdd:Id", id, (char*const*)(void*)&ptr, ""); + case SOAP_TYPE__wsdd__SupportedMatchingRules: + return soap_out_string(soap, "wsdd:SupportedMatchingRules", id, (char*const*)(void*)&ptr, ""); + case SOAP_TYPE__wsdd__XAddrs: + return soap_out_string(soap, "wsdd:XAddrs", id, (char*const*)(void*)&ptr, ""); + case SOAP_TYPE__wsdd__Types: + return soap_out_string(soap, tag, id, (char*const*)(void*)&ptr, "xsd:QName"); + case SOAP_TYPE_PointerTowsdd__SigType: + return soap_out_PointerTowsdd__SigType(soap, tag, id, (struct wsdd__SigType *const*)ptr, "wsdd:SigType"); + case SOAP_TYPE_PointerTowsdd__ResolveMatchType: + return soap_out_PointerTowsdd__ResolveMatchType(soap, tag, id, (struct wsdd__ResolveMatchType *const*)ptr, "wsdd:ResolveMatchType"); + case SOAP_TYPE_PointerTowsdd__ProbeMatchType: + return soap_out_PointerTowsdd__ProbeMatchType(soap, tag, id, (struct wsdd__ProbeMatchType *const*)ptr, "wsdd:ProbeMatchType"); + case SOAP_TYPE_PointerTounsignedInt: + return soap_out_PointerTounsignedInt(soap, tag, id, (unsigned int *const*)ptr, "xsd:unsignedInt"); + case SOAP_TYPE_PointerTowsdd__ScopesType: + return soap_out_PointerTowsdd__ScopesType(soap, tag, id, (struct wsdd__ScopesType *const*)ptr, "wsdd:ScopesType"); + case SOAP_TYPE_wsdd__FaultCodeOpenType: + return soap_out_string(soap, tag, id, (char*const*)(void*)&ptr, "wsdd:FaultCodeOpenType"); + case SOAP_TYPE_wsdd__UriListType: + return soap_out_string(soap, tag, id, (char*const*)(void*)&ptr, "wsdd:UriListType"); + case SOAP_TYPE_wsdd__QNameListType: + return soap_out_string(soap, tag, id, (char*const*)(void*)&ptr, "xsd:QName"); + case SOAP_TYPE_PointerTo_wsa__FaultTo: + return soap_out_PointerTo_wsa__FaultTo(soap, tag, id, (struct wsa__EndpointReferenceType *const*)ptr, "wsa:FaultTo"); + case SOAP_TYPE_PointerTo_wsa__ReplyTo: + return soap_out_PointerTo_wsa__ReplyTo(soap, tag, id, (struct wsa__EndpointReferenceType *const*)ptr, "wsa:ReplyTo"); + case SOAP_TYPE_PointerTo_wsa__From: + return soap_out_PointerTo_wsa__From(soap, tag, id, (struct wsa__EndpointReferenceType *const*)ptr, "wsa:From"); + case SOAP_TYPE_PointerTo_wsa__RelatesTo: + return soap_out_PointerTo_wsa__RelatesTo(soap, tag, id, (struct wsa__Relationship *const*)ptr, "wsa:RelatesTo"); + case SOAP_TYPE__wsa__Action: + return soap_out_string(soap, "wsa:Action", id, (char*const*)(void*)&ptr, ""); + case SOAP_TYPE__wsa__To: + return soap_out_string(soap, "wsa:To", id, (char*const*)(void*)&ptr, ""); + case SOAP_TYPE__wsa__MessageID: + return soap_out_string(soap, "wsa:MessageID", id, (char*const*)(void*)&ptr, ""); + case SOAP_TYPE_PointerTowsa__ServiceNameType: + return soap_out_PointerTowsa__ServiceNameType(soap, tag, id, (struct wsa__ServiceNameType *const*)ptr, "wsa:ServiceNameType"); + case SOAP_TYPE_PointerTo_QName: + return soap_out_PointerTo_QName(soap, tag, id, (char **const*)ptr, "xsd:QName"); + case SOAP_TYPE_PointerTowsa__ReferenceParametersType: + return soap_out_PointerTowsa__ReferenceParametersType(soap, tag, id, (struct wsa__ReferenceParametersType *const*)ptr, "wsa:ReferenceParametersType"); + case SOAP_TYPE_PointerTowsa__ReferencePropertiesType: + return soap_out_PointerTowsa__ReferencePropertiesType(soap, tag, id, (struct wsa__ReferencePropertiesType *const*)ptr, "wsa:ReferencePropertiesType"); + case SOAP_TYPE__QName: + return soap_out_string(soap, tag, id, (char*const*)(void*)&ptr, "xsd:QName"); + case SOAP_TYPE_string: + return soap_out_string(soap, tag, id, (char*const*)(void*)&ptr, "xsd:string"); + case 0: + return SOAP_OK; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_putelement '%s' failed for type %d in soapC.cpp\n", tag ? tag : "", type)); + return soap_element_empty(soap, tag, 0, NULL); /* unknown type to serialize */ +} +#ifdef __cplusplus +} +#endif + +#ifndef WITH_NOIDREF + +#ifdef __cplusplus +extern "C" { +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, int type) +{ + (void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */ + switch (type) + { + case SOAP_TYPE___tdn__Probe: + soap_serialize___tdn__Probe(soap, (const struct __tdn__Probe *)ptr); + break; + case SOAP_TYPE___tdn__Bye: + soap_serialize___tdn__Bye(soap, (const struct __tdn__Bye *)ptr); + break; + case SOAP_TYPE___tdn__Hello: + soap_serialize___tdn__Hello(soap, (const struct __tdn__Hello *)ptr); + break; + case SOAP_TYPE___wsdd__ResolveMatches: + soap_serialize___wsdd__ResolveMatches(soap, (const struct __wsdd__ResolveMatches *)ptr); + break; + case SOAP_TYPE___wsdd__Resolve: + soap_serialize___wsdd__Resolve(soap, (const struct __wsdd__Resolve *)ptr); + break; + case SOAP_TYPE___wsdd__ProbeMatches: + soap_serialize___wsdd__ProbeMatches(soap, (const struct __wsdd__ProbeMatches *)ptr); + break; + case SOAP_TYPE___wsdd__Probe: + soap_serialize___wsdd__Probe(soap, (const struct __wsdd__Probe *)ptr); + break; + case SOAP_TYPE___wsdd__Bye: + soap_serialize___wsdd__Bye(soap, (const struct __wsdd__Bye *)ptr); + break; + case SOAP_TYPE___wsdd__Hello: + soap_serialize___wsdd__Hello(soap, (const struct __wsdd__Hello *)ptr); + break; + case SOAP_TYPE__wsdd__AppSequence: + soap_serialize__wsdd__AppSequence(soap, (const struct wsdd__AppSequenceType *)ptr); + break; + case SOAP_TYPE__wsdd__Sig: + soap_serialize__wsdd__Sig(soap, (const struct wsdd__SigType *)ptr); + break; + case SOAP_TYPE__wsdd__Security: + soap_serialize__wsdd__Security(soap, (const struct wsdd__SecurityType *)ptr); + break; + case SOAP_TYPE__wsdd__Scopes: + soap_serialize__wsdd__Scopes(soap, (const struct wsdd__ScopesType *)ptr); + break; + case SOAP_TYPE__wsdd__ResolveMatches: + soap_serialize__wsdd__ResolveMatches(soap, (const struct wsdd__ResolveMatchesType *)ptr); + break; + case SOAP_TYPE__wsdd__Resolve: + soap_serialize__wsdd__Resolve(soap, (const struct wsdd__ResolveType *)ptr); + break; + case SOAP_TYPE__wsdd__ProbeMatches: + soap_serialize__wsdd__ProbeMatches(soap, (const struct wsdd__ProbeMatchesType *)ptr); + break; + case SOAP_TYPE__wsdd__Probe: + soap_serialize__wsdd__Probe(soap, (const struct wsdd__ProbeType *)ptr); + break; + case SOAP_TYPE__wsdd__Bye: + soap_serialize__wsdd__Bye(soap, (const struct wsdd__ByeType *)ptr); + break; + case SOAP_TYPE__wsdd__Hello: + soap_serialize__wsdd__Hello(soap, (const struct wsdd__HelloType *)ptr); + break; + case SOAP_TYPE_wsdd__AppSequenceType: + soap_serialize_wsdd__AppSequenceType(soap, (const struct wsdd__AppSequenceType *)ptr); + break; + case SOAP_TYPE_wsdd__SigType: + soap_serialize_wsdd__SigType(soap, (const struct wsdd__SigType *)ptr); + break; + case SOAP_TYPE_wsdd__SecurityType: + soap_serialize_wsdd__SecurityType(soap, (const struct wsdd__SecurityType *)ptr); + break; + case SOAP_TYPE_wsdd__ScopesType: + soap_serialize_wsdd__ScopesType(soap, (const struct wsdd__ScopesType *)ptr); + break; + case SOAP_TYPE_wsdd__ResolveMatchType: + soap_serialize_wsdd__ResolveMatchType(soap, (const struct wsdd__ResolveMatchType *)ptr); + break; + case SOAP_TYPE_wsdd__ResolveMatchesType: + soap_serialize_wsdd__ResolveMatchesType(soap, (const struct wsdd__ResolveMatchesType *)ptr); + break; + case SOAP_TYPE_wsdd__ResolveType: + soap_serialize_wsdd__ResolveType(soap, (const struct wsdd__ResolveType *)ptr); + break; + case SOAP_TYPE_wsdd__ProbeMatchType: + soap_serialize_wsdd__ProbeMatchType(soap, (const struct wsdd__ProbeMatchType *)ptr); + break; + case SOAP_TYPE_wsdd__ProbeMatchesType: + soap_serialize_wsdd__ProbeMatchesType(soap, (const struct wsdd__ProbeMatchesType *)ptr); + break; + case SOAP_TYPE_wsdd__ProbeType: + soap_serialize_wsdd__ProbeType(soap, (const struct wsdd__ProbeType *)ptr); + break; + case SOAP_TYPE_wsdd__ByeType: + soap_serialize_wsdd__ByeType(soap, (const struct wsdd__ByeType *)ptr); + break; + case SOAP_TYPE_wsdd__HelloType: + soap_serialize_wsdd__HelloType(soap, (const struct wsdd__HelloType *)ptr); + break; + case SOAP_TYPE__wsa__FaultTo: + soap_serialize__wsa__FaultTo(soap, (const struct wsa__EndpointReferenceType *)ptr); + break; + case SOAP_TYPE__wsa__ReplyTo: + soap_serialize__wsa__ReplyTo(soap, (const struct wsa__EndpointReferenceType *)ptr); + break; + case SOAP_TYPE__wsa__From: + soap_serialize__wsa__From(soap, (const struct wsa__EndpointReferenceType *)ptr); + break; + case SOAP_TYPE__wsa__RelatesTo: + soap_serialize__wsa__RelatesTo(soap, (const struct wsa__Relationship *)ptr); + break; + case SOAP_TYPE__wsa__EndpointReference: + soap_serialize__wsa__EndpointReference(soap, (const struct wsa__EndpointReferenceType *)ptr); + break; + case SOAP_TYPE_wsa__Relationship: + soap_serialize_wsa__Relationship(soap, (const struct wsa__Relationship *)ptr); + break; + case SOAP_TYPE_wsa__ServiceNameType: + soap_serialize_wsa__ServiceNameType(soap, (const struct wsa__ServiceNameType *)ptr); + break; + case SOAP_TYPE_wsa__ReferenceParametersType: + soap_serialize_wsa__ReferenceParametersType(soap, (const struct wsa__ReferenceParametersType *)ptr); + break; + case SOAP_TYPE_wsa__ReferencePropertiesType: + soap_serialize_wsa__ReferencePropertiesType(soap, (const struct wsa__ReferencePropertiesType *)ptr); + break; + case SOAP_TYPE_wsa__EndpointReferenceType: + soap_serialize_wsa__EndpointReferenceType(soap, (const struct wsa__EndpointReferenceType *)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ResolveMatchesType: + soap_serialize_PointerTowsdd__ResolveMatchesType(soap, (struct wsdd__ResolveMatchesType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ResolveType: + soap_serialize_PointerTowsdd__ResolveType(soap, (struct wsdd__ResolveType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ProbeMatchesType: + soap_serialize_PointerTowsdd__ProbeMatchesType(soap, (struct wsdd__ProbeMatchesType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ProbeType: + soap_serialize_PointerTowsdd__ProbeType(soap, (struct wsdd__ProbeType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ByeType: + soap_serialize_PointerTowsdd__ByeType(soap, (struct wsdd__ByeType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__HelloType: + soap_serialize_PointerTowsdd__HelloType(soap, (struct wsdd__HelloType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__AppSequenceType: + soap_serialize_PointerTowsdd__AppSequenceType(soap, (struct wsdd__AppSequenceType *const*)ptr); + break; + case SOAP_TYPE__wsdd__Id: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE__wsdd__SupportedMatchingRules: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE__wsdd__XAddrs: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE__wsdd__Types: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE_PointerTowsdd__SigType: + soap_serialize_PointerTowsdd__SigType(soap, (struct wsdd__SigType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ResolveMatchType: + soap_serialize_PointerTowsdd__ResolveMatchType(soap, (struct wsdd__ResolveMatchType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ProbeMatchType: + soap_serialize_PointerTowsdd__ProbeMatchType(soap, (struct wsdd__ProbeMatchType *const*)ptr); + break; + case SOAP_TYPE_PointerTounsignedInt: + soap_serialize_PointerTounsignedInt(soap, (unsigned int *const*)ptr); + break; + case SOAP_TYPE_PointerTowsdd__ScopesType: + soap_serialize_PointerTowsdd__ScopesType(soap, (struct wsdd__ScopesType *const*)ptr); + break; + case SOAP_TYPE_wsdd__FaultCodeOpenType: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE_wsdd__UriListType: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE_wsdd__QNameListType: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE_PointerTo_wsa__FaultTo: + soap_serialize_PointerTo_wsa__FaultTo(soap, (struct wsa__EndpointReferenceType *const*)ptr); + break; + case SOAP_TYPE_PointerTo_wsa__ReplyTo: + soap_serialize_PointerTo_wsa__ReplyTo(soap, (struct wsa__EndpointReferenceType *const*)ptr); + break; + case SOAP_TYPE_PointerTo_wsa__From: + soap_serialize_PointerTo_wsa__From(soap, (struct wsa__EndpointReferenceType *const*)ptr); + break; + case SOAP_TYPE_PointerTo_wsa__RelatesTo: + soap_serialize_PointerTo_wsa__RelatesTo(soap, (struct wsa__Relationship *const*)ptr); + break; + case SOAP_TYPE__wsa__Action: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE__wsa__To: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE__wsa__MessageID: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE_PointerTowsa__ServiceNameType: + soap_serialize_PointerTowsa__ServiceNameType(soap, (struct wsa__ServiceNameType *const*)ptr); + break; + case SOAP_TYPE_PointerTo_QName: + soap_serialize_PointerTo_QName(soap, (char **const*)ptr); + break; + case SOAP_TYPE_PointerTowsa__ReferenceParametersType: + soap_serialize_PointerTowsa__ReferenceParametersType(soap, (struct wsa__ReferenceParametersType *const*)ptr); + break; + case SOAP_TYPE_PointerTowsa__ReferencePropertiesType: + soap_serialize_PointerTowsa__ReferencePropertiesType(soap, (struct wsa__ReferencePropertiesType *const*)ptr); + break; + case SOAP_TYPE__QName: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + case SOAP_TYPE_string: + soap_serialize_string(soap, (char*const*)(void*)&ptr); + break; + } +} +#ifdef __cplusplus +} +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +SOAP_FMAC3 void * SOAP_FMAC4 soap_dupelement(struct soap *soap, const void *ptr, int type) +{(void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */ + return NULL; +} +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +SOAP_FMAC3 void SOAP_FMAC4 soap_delelement(const void *ptr, int type) +{(void)ptr; (void)type; /* appease -Wall -Werror */ +} +#ifdef __cplusplus +} +#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_wsa__EndpointReferenceType: + return (void*)soap_instantiate_wsa__EndpointReferenceType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsa__ReferencePropertiesType: + return (void*)soap_instantiate_wsa__ReferencePropertiesType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsa__ReferenceParametersType: + return (void*)soap_instantiate_wsa__ReferenceParametersType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsa__ServiceNameType: + return (void*)soap_instantiate_wsa__ServiceNameType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsa__Relationship: + return (void*)soap_instantiate_wsa__Relationship(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); +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Detail: + return (void*)soap_instantiate_SOAP_ENV__Detail(soap, -1, type, arrayType, n); +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Code: + return (void*)soap_instantiate_SOAP_ENV__Code(soap, -1, type, arrayType, n); +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Reason: + return (void*)soap_instantiate_SOAP_ENV__Reason(soap, -1, type, arrayType, n); +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Fault: + return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n); +#endif + case SOAP_TYPE_wsdd__HelloType: + return (void*)soap_instantiate_wsdd__HelloType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ByeType: + return (void*)soap_instantiate_wsdd__ByeType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ProbeType: + return (void*)soap_instantiate_wsdd__ProbeType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ProbeMatchesType: + return (void*)soap_instantiate_wsdd__ProbeMatchesType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ProbeMatchType: + return (void*)soap_instantiate_wsdd__ProbeMatchType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ResolveType: + return (void*)soap_instantiate_wsdd__ResolveType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ResolveMatchesType: + return (void*)soap_instantiate_wsdd__ResolveMatchesType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ResolveMatchType: + return (void*)soap_instantiate_wsdd__ResolveMatchType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__SecurityType: + return (void*)soap_instantiate_wsdd__SecurityType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__SigType: + return (void*)soap_instantiate_wsdd__SigType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__ScopesType: + return (void*)soap_instantiate_wsdd__ScopesType(soap, -1, type, arrayType, n); + case SOAP_TYPE_wsdd__AppSequenceType: + return (void*)soap_instantiate_wsdd__AppSequenceType(soap, -1, type, arrayType, n); + case SOAP_TYPE___wsdd__Hello: + return (void*)soap_instantiate___wsdd__Hello(soap, -1, type, arrayType, n); + case SOAP_TYPE___wsdd__Bye: + return (void*)soap_instantiate___wsdd__Bye(soap, -1, type, arrayType, n); + case SOAP_TYPE___wsdd__Probe: + return (void*)soap_instantiate___wsdd__Probe(soap, -1, type, arrayType, n); + case SOAP_TYPE___wsdd__ProbeMatches: + return (void*)soap_instantiate___wsdd__ProbeMatches(soap, -1, type, arrayType, n); + case SOAP_TYPE___wsdd__Resolve: + return (void*)soap_instantiate___wsdd__Resolve(soap, -1, type, arrayType, n); + case SOAP_TYPE___wsdd__ResolveMatches: + return (void*)soap_instantiate___wsdd__ResolveMatches(soap, -1, type, arrayType, n); + case SOAP_TYPE___tdn__Hello: + return (void*)soap_instantiate___tdn__Hello(soap, -1, type, arrayType, n); + case SOAP_TYPE___tdn__Bye: + return (void*)soap_instantiate___tdn__Bye(soap, -1, type, arrayType, n); + case SOAP_TYPE___tdn__Probe: + return (void*)soap_instantiate___tdn__Probe(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsa__EndpointReference: + return (void*)soap_instantiate__wsa__EndpointReference(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsa__RelatesTo: + return (void*)soap_instantiate__wsa__RelatesTo(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsa__From: + return (void*)soap_instantiate__wsa__From(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsa__ReplyTo: + return (void*)soap_instantiate__wsa__ReplyTo(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsa__FaultTo: + return (void*)soap_instantiate__wsa__FaultTo(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__Hello: + return (void*)soap_instantiate__wsdd__Hello(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__Bye: + return (void*)soap_instantiate__wsdd__Bye(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__Probe: + return (void*)soap_instantiate__wsdd__Probe(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__ProbeMatches: + return (void*)soap_instantiate__wsdd__ProbeMatches(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__Resolve: + return (void*)soap_instantiate__wsdd__Resolve(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__ResolveMatches: + return (void*)soap_instantiate__wsdd__ResolveMatches(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__Scopes: + return (void*)soap_instantiate__wsdd__Scopes(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__Security: + return (void*)soap_instantiate__wsdd__Security(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__Sig: + return (void*)soap_instantiate__wsdd__Sig(soap, -1, type, arrayType, n); + case SOAP_TYPE__wsdd__AppSequence: + return (void*)soap_instantiate__wsdd__AppSequence(soap, -1, type, arrayType, n); + } + return NULL; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap *soap, struct soap_clist *p) +{ + (void)soap; /* appease -Wall -Werror */ + if (!p->ptr) + return SOAP_OK; + switch (p->type) + { + case SOAP_TYPE_wsa__EndpointReferenceType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + break; + case SOAP_TYPE_wsa__ReferencePropertiesType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__ReferencePropertiesType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__ReferencePropertiesType); + break; + case SOAP_TYPE_wsa__ReferenceParametersType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__ReferenceParametersType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__ReferenceParametersType); + break; + case SOAP_TYPE_wsa__ServiceNameType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__ServiceNameType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__ServiceNameType); + break; + case SOAP_TYPE_wsa__Relationship: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__Relationship); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__Relationship); + break; +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Header: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct SOAP_ENV__Header); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct SOAP_ENV__Header); + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Detail: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct SOAP_ENV__Detail); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct SOAP_ENV__Detail); + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Code: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct SOAP_ENV__Code); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct SOAP_ENV__Code); + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Reason: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct SOAP_ENV__Reason); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct SOAP_ENV__Reason); + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Fault: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct SOAP_ENV__Fault); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct SOAP_ENV__Fault); + break; +#endif + case SOAP_TYPE_wsdd__HelloType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__HelloType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__HelloType); + break; + case SOAP_TYPE_wsdd__ByeType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ByeType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ByeType); + break; + case SOAP_TYPE_wsdd__ProbeType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ProbeType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ProbeType); + break; + case SOAP_TYPE_wsdd__ProbeMatchesType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ProbeMatchesType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ProbeMatchesType); + break; + case SOAP_TYPE_wsdd__ProbeMatchType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ProbeMatchType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ProbeMatchType); + break; + case SOAP_TYPE_wsdd__ResolveType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ResolveType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ResolveType); + break; + case SOAP_TYPE_wsdd__ResolveMatchesType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ResolveMatchesType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ResolveMatchesType); + break; + case SOAP_TYPE_wsdd__ResolveMatchType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ResolveMatchType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ResolveMatchType); + break; + case SOAP_TYPE_wsdd__SecurityType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__SecurityType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__SecurityType); + break; + case SOAP_TYPE_wsdd__SigType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__SigType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__SigType); + break; + case SOAP_TYPE_wsdd__ScopesType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ScopesType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ScopesType); + break; + case SOAP_TYPE_wsdd__AppSequenceType: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__AppSequenceType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__AppSequenceType); + break; + case SOAP_TYPE___wsdd__Hello: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __wsdd__Hello); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __wsdd__Hello); + break; + case SOAP_TYPE___wsdd__Bye: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __wsdd__Bye); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __wsdd__Bye); + break; + case SOAP_TYPE___wsdd__Probe: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __wsdd__Probe); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __wsdd__Probe); + break; + case SOAP_TYPE___wsdd__ProbeMatches: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __wsdd__ProbeMatches); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __wsdd__ProbeMatches); + break; + case SOAP_TYPE___wsdd__Resolve: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __wsdd__Resolve); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __wsdd__Resolve); + break; + case SOAP_TYPE___wsdd__ResolveMatches: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __wsdd__ResolveMatches); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __wsdd__ResolveMatches); + break; + case SOAP_TYPE___tdn__Hello: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __tdn__Hello); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __tdn__Hello); + break; + case SOAP_TYPE___tdn__Bye: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __tdn__Bye); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __tdn__Bye); + break; + case SOAP_TYPE___tdn__Probe: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct __tdn__Probe); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct __tdn__Probe); + break; + case SOAP_TYPE__wsa__EndpointReference: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + break; + case SOAP_TYPE__wsa__RelatesTo: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__Relationship); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__Relationship); + break; + case SOAP_TYPE__wsa__From: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + break; + case SOAP_TYPE__wsa__ReplyTo: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + break; + case SOAP_TYPE__wsa__FaultTo: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsa__EndpointReferenceType); + break; + case SOAP_TYPE__wsdd__Hello: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__HelloType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__HelloType); + break; + case SOAP_TYPE__wsdd__Bye: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ByeType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ByeType); + break; + case SOAP_TYPE__wsdd__Probe: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ProbeType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ProbeType); + break; + case SOAP_TYPE__wsdd__ProbeMatches: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ProbeMatchesType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ProbeMatchesType); + break; + case SOAP_TYPE__wsdd__Resolve: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ResolveType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ResolveType); + break; + case SOAP_TYPE__wsdd__ResolveMatches: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ResolveMatchesType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ResolveMatchesType); + break; + case SOAP_TYPE__wsdd__Scopes: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__ScopesType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__ScopesType); + break; + case SOAP_TYPE__wsdd__Security: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__SecurityType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__SecurityType); + break; + case SOAP_TYPE__wsdd__Sig: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__SigType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__SigType); + break; + case SOAP_TYPE__wsdd__AppSequence: + if (p->size < 0) + SOAP_DELETE(soap, static_cast(p->ptr), struct wsdd__AppSequenceType); + else + SOAP_DELETE_ARRAY(soap, static_cast(p->ptr), struct wsdd__AppSequenceType); + break; + default: + return SOAP_ERR; + } + return SOAP_OK; +} + +#ifdef WIN32 +#pragma warning(push) +// do not warn on switch w/o cases +#pragma warning(disable:4065) +#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_fbase(int t, int b) +{ + (void)t; (void)b; /* appease -Wall -Werror */ + return 0; +} +#ifdef WIN32 +#pragma warning(pop) +#endif + +#ifndef WITH_NOIDREF +#ifdef WIN32 +#pragma warning(push) +// do not warn on switch w/o cases +#pragma warning(disable:4065) +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_finsert(struct soap *soap, int t, int tt, void *p, size_t index, const void *q, void **x) +{ + (void)soap; (void)t; (void)p; (void)index; (void)q; (void)x; /* appease -Wall -Werror */ + switch (tt) + { + case SOAP_TYPE_wsa__EndpointReferenceType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__EndpointReferenceType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__EndpointReferenceType*)p = *(struct wsa__EndpointReferenceType*)q; + break; + case SOAP_TYPE_wsa__ReferencePropertiesType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__ReferencePropertiesType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__ReferencePropertiesType*)p = *(struct wsa__ReferencePropertiesType*)q; + break; + case SOAP_TYPE_wsa__ReferenceParametersType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__ReferenceParametersType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__ReferenceParametersType*)p = *(struct wsa__ReferenceParametersType*)q; + break; + case SOAP_TYPE_wsa__ServiceNameType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__ServiceNameType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__ServiceNameType*)p = *(struct wsa__ServiceNameType*)q; + break; + case SOAP_TYPE_wsa__Relationship: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__Relationship type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__Relationship*)p = *(struct wsa__Relationship*)q; + break; +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Header: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct SOAP_ENV__Header type=%d location=%p object=%p\n", t, p, q)); + *(struct SOAP_ENV__Header*)p = *(struct SOAP_ENV__Header*)q; + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Detail: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct SOAP_ENV__Detail type=%d location=%p object=%p\n", t, p, q)); + *(struct SOAP_ENV__Detail*)p = *(struct SOAP_ENV__Detail*)q; + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Code: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct SOAP_ENV__Code type=%d location=%p object=%p\n", t, p, q)); + *(struct SOAP_ENV__Code*)p = *(struct SOAP_ENV__Code*)q; + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Reason: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct SOAP_ENV__Reason type=%d location=%p object=%p\n", t, p, q)); + *(struct SOAP_ENV__Reason*)p = *(struct SOAP_ENV__Reason*)q; + break; +#endif +#ifndef WITH_NOGLOBAL + case SOAP_TYPE_SOAP_ENV__Fault: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct SOAP_ENV__Fault type=%d location=%p object=%p\n", t, p, q)); + *(struct SOAP_ENV__Fault*)p = *(struct SOAP_ENV__Fault*)q; + break; +#endif + case SOAP_TYPE_wsdd__HelloType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__HelloType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__HelloType*)p = *(struct wsdd__HelloType*)q; + break; + case SOAP_TYPE_wsdd__ByeType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ByeType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ByeType*)p = *(struct wsdd__ByeType*)q; + break; + case SOAP_TYPE_wsdd__ProbeType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ProbeType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ProbeType*)p = *(struct wsdd__ProbeType*)q; + break; + case SOAP_TYPE_wsdd__ProbeMatchesType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ProbeMatchesType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ProbeMatchesType*)p = *(struct wsdd__ProbeMatchesType*)q; + break; + case SOAP_TYPE_wsdd__ProbeMatchType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ProbeMatchType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ProbeMatchType*)p = *(struct wsdd__ProbeMatchType*)q; + break; + case SOAP_TYPE_wsdd__ResolveType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ResolveType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ResolveType*)p = *(struct wsdd__ResolveType*)q; + break; + case SOAP_TYPE_wsdd__ResolveMatchesType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ResolveMatchesType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ResolveMatchesType*)p = *(struct wsdd__ResolveMatchesType*)q; + break; + case SOAP_TYPE_wsdd__ResolveMatchType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ResolveMatchType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ResolveMatchType*)p = *(struct wsdd__ResolveMatchType*)q; + break; + case SOAP_TYPE_wsdd__SecurityType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__SecurityType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__SecurityType*)p = *(struct wsdd__SecurityType*)q; + break; + case SOAP_TYPE_wsdd__SigType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__SigType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__SigType*)p = *(struct wsdd__SigType*)q; + break; + case SOAP_TYPE_wsdd__ScopesType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ScopesType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ScopesType*)p = *(struct wsdd__ScopesType*)q; + break; + case SOAP_TYPE_wsdd__AppSequenceType: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__AppSequenceType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__AppSequenceType*)p = *(struct wsdd__AppSequenceType*)q; + break; + case SOAP_TYPE___wsdd__Hello: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __wsdd__Hello type=%d location=%p object=%p\n", t, p, q)); + *(struct __wsdd__Hello*)p = *(struct __wsdd__Hello*)q; + break; + case SOAP_TYPE___wsdd__Bye: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __wsdd__Bye type=%d location=%p object=%p\n", t, p, q)); + *(struct __wsdd__Bye*)p = *(struct __wsdd__Bye*)q; + break; + case SOAP_TYPE___wsdd__Probe: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __wsdd__Probe type=%d location=%p object=%p\n", t, p, q)); + *(struct __wsdd__Probe*)p = *(struct __wsdd__Probe*)q; + break; + case SOAP_TYPE___wsdd__ProbeMatches: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __wsdd__ProbeMatches type=%d location=%p object=%p\n", t, p, q)); + *(struct __wsdd__ProbeMatches*)p = *(struct __wsdd__ProbeMatches*)q; + break; + case SOAP_TYPE___wsdd__Resolve: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __wsdd__Resolve type=%d location=%p object=%p\n", t, p, q)); + *(struct __wsdd__Resolve*)p = *(struct __wsdd__Resolve*)q; + break; + case SOAP_TYPE___wsdd__ResolveMatches: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __wsdd__ResolveMatches type=%d location=%p object=%p\n", t, p, q)); + *(struct __wsdd__ResolveMatches*)p = *(struct __wsdd__ResolveMatches*)q; + break; + case SOAP_TYPE___tdn__Hello: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __tdn__Hello type=%d location=%p object=%p\n", t, p, q)); + *(struct __tdn__Hello*)p = *(struct __tdn__Hello*)q; + break; + case SOAP_TYPE___tdn__Bye: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __tdn__Bye type=%d location=%p object=%p\n", t, p, q)); + *(struct __tdn__Bye*)p = *(struct __tdn__Bye*)q; + break; + case SOAP_TYPE___tdn__Probe: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct __tdn__Probe type=%d location=%p object=%p\n", t, p, q)); + *(struct __tdn__Probe*)p = *(struct __tdn__Probe*)q; + break; + case SOAP_TYPE__wsa__EndpointReference: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__EndpointReferenceType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__EndpointReferenceType*)p = *(struct wsa__EndpointReferenceType*)q; + break; + case SOAP_TYPE__wsa__RelatesTo: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__Relationship type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__Relationship*)p = *(struct wsa__Relationship*)q; + break; + case SOAP_TYPE__wsa__From: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__EndpointReferenceType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__EndpointReferenceType*)p = *(struct wsa__EndpointReferenceType*)q; + break; + case SOAP_TYPE__wsa__ReplyTo: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__EndpointReferenceType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__EndpointReferenceType*)p = *(struct wsa__EndpointReferenceType*)q; + break; + case SOAP_TYPE__wsa__FaultTo: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsa__EndpointReferenceType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsa__EndpointReferenceType*)p = *(struct wsa__EndpointReferenceType*)q; + break; + case SOAP_TYPE__wsdd__Hello: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__HelloType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__HelloType*)p = *(struct wsdd__HelloType*)q; + break; + case SOAP_TYPE__wsdd__Bye: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ByeType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ByeType*)p = *(struct wsdd__ByeType*)q; + break; + case SOAP_TYPE__wsdd__Probe: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ProbeType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ProbeType*)p = *(struct wsdd__ProbeType*)q; + break; + case SOAP_TYPE__wsdd__ProbeMatches: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ProbeMatchesType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ProbeMatchesType*)p = *(struct wsdd__ProbeMatchesType*)q; + break; + case SOAP_TYPE__wsdd__Resolve: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ResolveType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ResolveType*)p = *(struct wsdd__ResolveType*)q; + break; + case SOAP_TYPE__wsdd__ResolveMatches: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ResolveMatchesType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ResolveMatchesType*)p = *(struct wsdd__ResolveMatchesType*)q; + break; + case SOAP_TYPE__wsdd__Scopes: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__ScopesType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__ScopesType*)p = *(struct wsdd__ScopesType*)q; + break; + case SOAP_TYPE__wsdd__Security: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__SecurityType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__SecurityType*)p = *(struct wsdd__SecurityType*)q; + break; + case SOAP_TYPE__wsdd__Sig: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__SigType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__SigType*)p = *(struct wsdd__SigType*)q; + break; + case SOAP_TYPE__wsdd__AppSequence: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy struct wsdd__AppSequenceType type=%d location=%p object=%p\n", t, p, q)); + *(struct wsdd__AppSequenceType*)p = *(struct wsdd__AppSequenceType*)q; + break; + default: + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not insert type=%d in %d\n", t, tt)); + } +} +#ifdef WIN32 +#pragma warning(pop) +#endif +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap *soap, const char *tag, int id, const char *a, const char *type) +{ + return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_byte); +} + +SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap *soap, const char *tag, char *a, const char *type) +{ + a = soap_inbyte(soap, tag, a, type, SOAP_TYPE_byte); + return a; +} + +SOAP_FMAC3 char * SOAP_FMAC4 soap_new_byte(struct soap *soap, int n) +{ + char *a = static_cast(soap_malloc(soap, (n = (n < 0 ? 1 : n)) * sizeof(char))); + for (char *p = a; p && n--; ++p) + soap_default_byte(soap, p); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap *soap, const char *a, const char *tag, const char *type) +{ + if (soap_out_byte(soap, tag ? tag : "byte", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap *soap, char *p, const char *tag, const char *type) +{ + if ((p = soap_in_byte(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap *soap, const char *tag, int id, const int *a, const char *type) +{ + return soap_outint(soap, tag, id, a, type, SOAP_TYPE_int); +} + +SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap *soap, const char *tag, int *a, const char *type) +{ + a = soap_inint(soap, tag, a, type, SOAP_TYPE_int); + return a; +} + +SOAP_FMAC3 int * SOAP_FMAC4 soap_new_int(struct soap *soap, int n) +{ + int *a = static_cast(soap_malloc(soap, (n = (n < 0 ? 1 : n)) * sizeof(int))); + for (int *p = a; p && n--; ++p) + soap_default_int(soap, p); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap *soap, const int *a, const char *tag, const char *type) +{ + if (soap_out_int(soap, tag ? tag : "int", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap *soap, int *p, const char *tag, const char *type) +{ + if ((p = soap_in_int(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__MetadataVersion(struct soap *soap, const unsigned int *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__MetadataVersion(soap, tag ? tag : "wsdd:MetadataVersion", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__ReplyAfter(struct soap *soap, const unsigned int *a, const char *tag, const char *type) +{ + if (soap_out__wsa__ReplyAfter(soap, tag ? tag : "wsa:ReplyAfter", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *a, const char *type) +{ + return soap_outunsignedInt(soap, tag, id, a, type, SOAP_TYPE_unsignedInt); +} + +SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap *soap, const char *tag, unsigned int *a, const char *type) +{ + a = soap_inunsignedInt(soap, tag, a, type, SOAP_TYPE_unsignedInt); + return a; +} + +SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_new_unsignedInt(struct soap *soap, int n) +{ + unsigned int *a = static_cast(soap_malloc(soap, (n = (n < 0 ? 1 : n)) * sizeof(unsigned int))); + for (unsigned int *p = a; p && n--; ++p) + soap_default_unsignedInt(soap, p); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap *soap, const unsigned int *a, const char *tag, const char *type) +{ + if (soap_out_unsignedInt(soap, tag ? tag : "unsignedInt", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap *soap, unsigned int *p, const char *tag, const char *type) +{ + if ((p = soap_in_unsignedInt(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +static const struct soap_code_map soap_codes_wsdd__FaultCodeType[] = +{ { (LONG64)wsdd__MatchingRuleNotSupported, "wsdd:MatchingRuleNotSupported" }, + { 0, NULL } +}; + +SOAP_FMAC3S const char* SOAP_FMAC4S soap_wsdd__FaultCodeType2s(struct soap *soap, enum wsdd__FaultCodeType n) +{ + const char *s = soap_code_str(soap_codes_wsdd__FaultCodeType, (long)n); + if (s) + return s; + return soap_long2s(soap, (long)n); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__FaultCodeType(struct soap *soap, const char *tag, int id, const enum wsdd__FaultCodeType *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__FaultCodeType), type) || soap_send(soap, soap_wsdd__FaultCodeType2s(soap, *a))) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3S int SOAP_FMAC4S soap_s2wsdd__FaultCodeType(struct soap *soap, const char *s, enum wsdd__FaultCodeType *a) +{ + const struct soap_code_map *map; + char *t; + if (!s) + return soap->error; + soap_s2QName(soap, s, &t, 0, -1, NULL); + map = soap_code(soap_codes_wsdd__FaultCodeType, t); + if (map) + *a = (enum wsdd__FaultCodeType)map->code; + else if (!*s) + return soap->error = SOAP_EMPTY; + else + { int n; + if (soap_s2int(soap, s, &n) || n < 0 || n > 0) + return soap->error = SOAP_TYPE; + *a = (enum wsdd__FaultCodeType)n; + } + return SOAP_OK; +} + +SOAP_FMAC3 enum wsdd__FaultCodeType * SOAP_FMAC4 soap_in_wsdd__FaultCodeType(struct soap *soap, const char *tag, enum wsdd__FaultCodeType *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 0, type)) + return NULL; + a = (enum wsdd__FaultCodeType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__FaultCodeType, sizeof(enum wsdd__FaultCodeType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + if (*soap->href != '#') + { int err = soap_s2wsdd__FaultCodeType(soap, soap_value(soap), a); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { a = (enum wsdd__FaultCodeType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__FaultCodeType, SOAP_TYPE_wsdd__FaultCodeType, sizeof(enum wsdd__FaultCodeType), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 enum wsdd__FaultCodeType * SOAP_FMAC4 soap_new_wsdd__FaultCodeType(struct soap *soap, int n) +{ + enum wsdd__FaultCodeType *a = static_cast(soap_malloc(soap, (n = (n < 0 ? 1 : n)) * sizeof(enum wsdd__FaultCodeType))); + for (enum wsdd__FaultCodeType *p = a; p && n--; ++p) + soap_default_wsdd__FaultCodeType(soap, p); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__FaultCodeType(struct soap *soap, const enum wsdd__FaultCodeType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__FaultCodeType(soap, tag ? tag : "wsdd:FaultCodeType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 enum wsdd__FaultCodeType * SOAP_FMAC4 soap_get_wsdd__FaultCodeType(struct soap *soap, enum wsdd__FaultCodeType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__FaultCodeType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +static const struct soap_code_map soap_codes_wsa__FaultSubcodeValues[] = +{ { (LONG64)wsa__InvalidMessageInformationHeader, "wsa:InvalidMessageInformationHeader" }, + { (LONG64)wsa__MessageInformationHeaderRequired, "wsa:MessageInformationHeaderRequired" }, + { (LONG64)wsa__DestinationUnreachable, "wsa:DestinationUnreachable" }, + { (LONG64)wsa__ActionNotSupported, "wsa:ActionNotSupported" }, + { (LONG64)wsa__EndpointUnavailable, "wsa:EndpointUnavailable" }, + { 0, NULL } +}; + +SOAP_FMAC3S const char* SOAP_FMAC4S soap_wsa__FaultSubcodeValues2s(struct soap *soap, enum wsa__FaultSubcodeValues n) +{ + const char *s = soap_code_str(soap_codes_wsa__FaultSubcodeValues, (long)n); + if (s) + return s; + return soap_long2s(soap, (long)n); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__FaultSubcodeValues(struct soap *soap, const char *tag, int id, const enum wsa__FaultSubcodeValues *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsa__FaultSubcodeValues), type) || soap_send(soap, soap_wsa__FaultSubcodeValues2s(soap, *a))) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3S int SOAP_FMAC4S soap_s2wsa__FaultSubcodeValues(struct soap *soap, const char *s, enum wsa__FaultSubcodeValues *a) +{ + const struct soap_code_map *map; + char *t; + if (!s) + return soap->error; + soap_s2QName(soap, s, &t, 0, -1, NULL); + map = soap_code(soap_codes_wsa__FaultSubcodeValues, t); + if (map) + *a = (enum wsa__FaultSubcodeValues)map->code; + else if (!*s) + return soap->error = SOAP_EMPTY; + else + { int n; + if (soap_s2int(soap, s, &n) || n < 0 || n > 4) + return soap->error = SOAP_TYPE; + *a = (enum wsa__FaultSubcodeValues)n; + } + return SOAP_OK; +} + +SOAP_FMAC3 enum wsa__FaultSubcodeValues * SOAP_FMAC4 soap_in_wsa__FaultSubcodeValues(struct soap *soap, const char *tag, enum wsa__FaultSubcodeValues *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 0, type)) + return NULL; + a = (enum wsa__FaultSubcodeValues*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsa__FaultSubcodeValues, sizeof(enum wsa__FaultSubcodeValues), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + if (*soap->href != '#') + { int err = soap_s2wsa__FaultSubcodeValues(soap, soap_value(soap), a); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { a = (enum wsa__FaultSubcodeValues *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsa__FaultSubcodeValues, SOAP_TYPE_wsa__FaultSubcodeValues, sizeof(enum wsa__FaultSubcodeValues), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 enum wsa__FaultSubcodeValues * SOAP_FMAC4 soap_new_wsa__FaultSubcodeValues(struct soap *soap, int n) +{ + enum wsa__FaultSubcodeValues *a = static_cast(soap_malloc(soap, (n = (n < 0 ? 1 : n)) * sizeof(enum wsa__FaultSubcodeValues))); + for (enum wsa__FaultSubcodeValues *p = a; p && n--; ++p) + soap_default_wsa__FaultSubcodeValues(soap, p); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__FaultSubcodeValues(struct soap *soap, const enum wsa__FaultSubcodeValues *a, const char *tag, const char *type) +{ + if (soap_out_wsa__FaultSubcodeValues(soap, tag ? tag : "wsa:FaultSubcodeValues", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 enum wsa__FaultSubcodeValues * SOAP_FMAC4 soap_get_wsa__FaultSubcodeValues(struct soap *soap, enum wsa__FaultSubcodeValues *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsa__FaultSubcodeValues(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +static const struct soap_code_map soap_codes_wsa__RelationshipTypeValues[] = +{ { (LONG64)wsa__Reply, "wsa:Reply" }, + { 0, NULL } +}; + +SOAP_FMAC3S const char* SOAP_FMAC4S soap_wsa__RelationshipTypeValues2s(struct soap *soap, enum wsa__RelationshipTypeValues n) +{ + const char *s = soap_code_str(soap_codes_wsa__RelationshipTypeValues, (long)n); + if (s) + return s; + return soap_long2s(soap, (long)n); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__RelationshipTypeValues(struct soap *soap, const char *tag, int id, const enum wsa__RelationshipTypeValues *a, const char *type) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsa__RelationshipTypeValues), type) || soap_send(soap, soap_wsa__RelationshipTypeValues2s(soap, *a))) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3S int SOAP_FMAC4S soap_s2wsa__RelationshipTypeValues(struct soap *soap, const char *s, enum wsa__RelationshipTypeValues *a) +{ + const struct soap_code_map *map; + char *t; + if (!s) + return soap->error; + soap_s2QName(soap, s, &t, 0, -1, NULL); + map = soap_code(soap_codes_wsa__RelationshipTypeValues, t); + if (map) + *a = (enum wsa__RelationshipTypeValues)map->code; + else if (!*s) + return soap->error = SOAP_EMPTY; + else + { int n; + if (soap_s2int(soap, s, &n) || n < 0 || n > 0) + return soap->error = SOAP_TYPE; + *a = (enum wsa__RelationshipTypeValues)n; + } + return SOAP_OK; +} + +SOAP_FMAC3 enum wsa__RelationshipTypeValues * SOAP_FMAC4 soap_in_wsa__RelationshipTypeValues(struct soap *soap, const char *tag, enum wsa__RelationshipTypeValues *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 0, type)) + return NULL; + a = (enum wsa__RelationshipTypeValues*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsa__RelationshipTypeValues, sizeof(enum wsa__RelationshipTypeValues), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + if (*soap->href != '#') + { int err = soap_s2wsa__RelationshipTypeValues(soap, soap_value(soap), a); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { a = (enum wsa__RelationshipTypeValues *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsa__RelationshipTypeValues, SOAP_TYPE_wsa__RelationshipTypeValues, sizeof(enum wsa__RelationshipTypeValues), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 enum wsa__RelationshipTypeValues * SOAP_FMAC4 soap_new_wsa__RelationshipTypeValues(struct soap *soap, int n) +{ + enum wsa__RelationshipTypeValues *a = static_cast(soap_malloc(soap, (n = (n < 0 ? 1 : n)) * sizeof(enum wsa__RelationshipTypeValues))); + for (enum wsa__RelationshipTypeValues *p = a; p && n--; ++p) + soap_default_wsa__RelationshipTypeValues(soap, p); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__RelationshipTypeValues(struct soap *soap, const enum wsa__RelationshipTypeValues *a, const char *tag, const char *type) +{ + if (soap_out_wsa__RelationshipTypeValues(soap, tag ? tag : "wsa:RelationshipTypeValues", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 enum wsa__RelationshipTypeValues * SOAP_FMAC4 soap_get_wsa__RelationshipTypeValues(struct soap *soap, enum wsa__RelationshipTypeValues *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsa__RelationshipTypeValues(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___tdn__Probe(struct soap *soap, struct __tdn__Probe *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_wsdd__ProbeType(soap, &a->tdn__Probe); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___tdn__Probe(struct soap *soap, const struct __tdn__Probe *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_embedded(soap, &a->tdn__Probe, SOAP_TYPE_wsdd__ProbeType); + soap_serialize_wsdd__ProbeType(soap, &a->tdn__Probe); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___tdn__Probe(struct soap *soap, const char *tag, int id, const struct __tdn__Probe *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_wsdd__ProbeType(soap, "tdn:Probe", -1, &a->tdn__Probe, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __tdn__Probe * SOAP_FMAC4 soap_in___tdn__Probe(struct soap *soap, const char *tag, struct __tdn__Probe *a, const char *type) +{ + size_t soap_flag_tdn__Probe = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __tdn__Probe*)soap_id_enter(soap, "", a, SOAP_TYPE___tdn__Probe, sizeof(struct __tdn__Probe), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___tdn__Probe(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_tdn__Probe && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_wsdd__ProbeType(soap, "tdn:Probe", &a->tdn__Probe, "wsdd:ProbeType")) + { soap_flag_tdn__Probe--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_tdn__Probe > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __tdn__Probe * SOAP_FMAC2 soap_instantiate___tdn__Probe(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___tdn__Probe(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __tdn__Probe *p; + size_t k = sizeof(struct __tdn__Probe); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___tdn__Probe, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __tdn__Probe); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __tdn__Probe, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __tdn__Probe location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___tdn__Probe(struct soap *soap, const struct __tdn__Probe *a, const char *tag, const char *type) +{ + if (soap_out___tdn__Probe(soap, tag ? tag : "-tdn:Probe", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __tdn__Probe * SOAP_FMAC4 soap_get___tdn__Probe(struct soap *soap, struct __tdn__Probe *p, const char *tag, const char *type) +{ + if ((p = soap_in___tdn__Probe(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___tdn__Bye(struct soap *soap, struct __tdn__Bye *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_wsdd__ByeType(soap, &a->tdn__Bye); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___tdn__Bye(struct soap *soap, const struct __tdn__Bye *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_embedded(soap, &a->tdn__Bye, SOAP_TYPE_wsdd__ByeType); + soap_serialize_wsdd__ByeType(soap, &a->tdn__Bye); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___tdn__Bye(struct soap *soap, const char *tag, int id, const struct __tdn__Bye *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_wsdd__ByeType(soap, "tdn:Bye", -1, &a->tdn__Bye, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __tdn__Bye * SOAP_FMAC4 soap_in___tdn__Bye(struct soap *soap, const char *tag, struct __tdn__Bye *a, const char *type) +{ + size_t soap_flag_tdn__Bye = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __tdn__Bye*)soap_id_enter(soap, "", a, SOAP_TYPE___tdn__Bye, sizeof(struct __tdn__Bye), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___tdn__Bye(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_tdn__Bye && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_wsdd__ByeType(soap, "tdn:Bye", &a->tdn__Bye, "wsdd:ByeType")) + { soap_flag_tdn__Bye--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_tdn__Bye > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __tdn__Bye * SOAP_FMAC2 soap_instantiate___tdn__Bye(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___tdn__Bye(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __tdn__Bye *p; + size_t k = sizeof(struct __tdn__Bye); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___tdn__Bye, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __tdn__Bye); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __tdn__Bye, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __tdn__Bye location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___tdn__Bye(struct soap *soap, const struct __tdn__Bye *a, const char *tag, const char *type) +{ + if (soap_out___tdn__Bye(soap, tag ? tag : "-tdn:Bye", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __tdn__Bye * SOAP_FMAC4 soap_get___tdn__Bye(struct soap *soap, struct __tdn__Bye *p, const char *tag, const char *type) +{ + if ((p = soap_in___tdn__Bye(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___tdn__Hello(struct soap *soap, struct __tdn__Hello *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_wsdd__HelloType(soap, &a->tdn__Hello); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___tdn__Hello(struct soap *soap, const struct __tdn__Hello *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_embedded(soap, &a->tdn__Hello, SOAP_TYPE_wsdd__HelloType); + soap_serialize_wsdd__HelloType(soap, &a->tdn__Hello); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___tdn__Hello(struct soap *soap, const char *tag, int id, const struct __tdn__Hello *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_wsdd__HelloType(soap, "tdn:Hello", -1, &a->tdn__Hello, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __tdn__Hello * SOAP_FMAC4 soap_in___tdn__Hello(struct soap *soap, const char *tag, struct __tdn__Hello *a, const char *type) +{ + size_t soap_flag_tdn__Hello = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __tdn__Hello*)soap_id_enter(soap, "", a, SOAP_TYPE___tdn__Hello, sizeof(struct __tdn__Hello), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___tdn__Hello(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_tdn__Hello && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_wsdd__HelloType(soap, "tdn:Hello", &a->tdn__Hello, "wsdd:HelloType")) + { soap_flag_tdn__Hello--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_tdn__Hello > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __tdn__Hello * SOAP_FMAC2 soap_instantiate___tdn__Hello(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___tdn__Hello(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __tdn__Hello *p; + size_t k = sizeof(struct __tdn__Hello); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___tdn__Hello, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __tdn__Hello); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __tdn__Hello, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __tdn__Hello location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___tdn__Hello(struct soap *soap, const struct __tdn__Hello *a, const char *tag, const char *type) +{ + if (soap_out___tdn__Hello(soap, tag ? tag : "-tdn:Hello", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __tdn__Hello * SOAP_FMAC4 soap_get___tdn__Hello(struct soap *soap, struct __tdn__Hello *p, const char *tag, const char *type) +{ + if ((p = soap_in___tdn__Hello(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__ResolveMatches(struct soap *soap, struct __wsdd__ResolveMatches *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->wsdd__ResolveMatches = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__ResolveMatches(struct soap *soap, const struct __wsdd__ResolveMatches *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__ResolveMatchesType(soap, &a->wsdd__ResolveMatches); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__ResolveMatches(struct soap *soap, const char *tag, int id, const struct __wsdd__ResolveMatches *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_PointerTowsdd__ResolveMatchesType(soap, "wsdd:ResolveMatches", -1, &a->wsdd__ResolveMatches, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__ResolveMatches * SOAP_FMAC4 soap_in___wsdd__ResolveMatches(struct soap *soap, const char *tag, struct __wsdd__ResolveMatches *a, const char *type) +{ + size_t soap_flag_wsdd__ResolveMatches = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __wsdd__ResolveMatches*)soap_id_enter(soap, "", a, SOAP_TYPE___wsdd__ResolveMatches, sizeof(struct __wsdd__ResolveMatches), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___wsdd__ResolveMatches(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsdd__ResolveMatches && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ResolveMatchesType(soap, "wsdd:ResolveMatches", &a->wsdd__ResolveMatches, "wsdd:ResolveMatchesType")) + { soap_flag_wsdd__ResolveMatches--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __wsdd__ResolveMatches * SOAP_FMAC2 soap_instantiate___wsdd__ResolveMatches(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___wsdd__ResolveMatches(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __wsdd__ResolveMatches *p; + size_t k = sizeof(struct __wsdd__ResolveMatches); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___wsdd__ResolveMatches, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __wsdd__ResolveMatches); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __wsdd__ResolveMatches, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __wsdd__ResolveMatches location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__ResolveMatches(struct soap *soap, const struct __wsdd__ResolveMatches *a, const char *tag, const char *type) +{ + if (soap_out___wsdd__ResolveMatches(soap, tag ? tag : "-wsdd:ResolveMatches", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__ResolveMatches * SOAP_FMAC4 soap_get___wsdd__ResolveMatches(struct soap *soap, struct __wsdd__ResolveMatches *p, const char *tag, const char *type) +{ + if ((p = soap_in___wsdd__ResolveMatches(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Resolve(struct soap *soap, struct __wsdd__Resolve *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->wsdd__Resolve = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Resolve(struct soap *soap, const struct __wsdd__Resolve *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__ResolveType(soap, &a->wsdd__Resolve); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Resolve(struct soap *soap, const char *tag, int id, const struct __wsdd__Resolve *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_PointerTowsdd__ResolveType(soap, "wsdd:Resolve", -1, &a->wsdd__Resolve, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Resolve * SOAP_FMAC4 soap_in___wsdd__Resolve(struct soap *soap, const char *tag, struct __wsdd__Resolve *a, const char *type) +{ + size_t soap_flag_wsdd__Resolve = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __wsdd__Resolve*)soap_id_enter(soap, "", a, SOAP_TYPE___wsdd__Resolve, sizeof(struct __wsdd__Resolve), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___wsdd__Resolve(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsdd__Resolve && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ResolveType(soap, "wsdd:Resolve", &a->wsdd__Resolve, "wsdd:ResolveType")) + { soap_flag_wsdd__Resolve--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __wsdd__Resolve * SOAP_FMAC2 soap_instantiate___wsdd__Resolve(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___wsdd__Resolve(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __wsdd__Resolve *p; + size_t k = sizeof(struct __wsdd__Resolve); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___wsdd__Resolve, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __wsdd__Resolve); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __wsdd__Resolve, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __wsdd__Resolve location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Resolve(struct soap *soap, const struct __wsdd__Resolve *a, const char *tag, const char *type) +{ + if (soap_out___wsdd__Resolve(soap, tag ? tag : "-wsdd:Resolve", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Resolve * SOAP_FMAC4 soap_get___wsdd__Resolve(struct soap *soap, struct __wsdd__Resolve *p, const char *tag, const char *type) +{ + if ((p = soap_in___wsdd__Resolve(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__ProbeMatches(struct soap *soap, struct __wsdd__ProbeMatches *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->wsdd__ProbeMatches = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__ProbeMatches(struct soap *soap, const struct __wsdd__ProbeMatches *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__ProbeMatchesType(soap, &a->wsdd__ProbeMatches); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__ProbeMatches(struct soap *soap, const char *tag, int id, const struct __wsdd__ProbeMatches *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_PointerTowsdd__ProbeMatchesType(soap, "wsdd:ProbeMatches", -1, &a->wsdd__ProbeMatches, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__ProbeMatches * SOAP_FMAC4 soap_in___wsdd__ProbeMatches(struct soap *soap, const char *tag, struct __wsdd__ProbeMatches *a, const char *type) +{ + size_t soap_flag_wsdd__ProbeMatches = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __wsdd__ProbeMatches*)soap_id_enter(soap, "", a, SOAP_TYPE___wsdd__ProbeMatches, sizeof(struct __wsdd__ProbeMatches), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___wsdd__ProbeMatches(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsdd__ProbeMatches && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ProbeMatchesType(soap, "wsdd:ProbeMatches", &a->wsdd__ProbeMatches, "wsdd:ProbeMatchesType")) + { soap_flag_wsdd__ProbeMatches--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __wsdd__ProbeMatches * SOAP_FMAC2 soap_instantiate___wsdd__ProbeMatches(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___wsdd__ProbeMatches(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __wsdd__ProbeMatches *p; + size_t k = sizeof(struct __wsdd__ProbeMatches); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___wsdd__ProbeMatches, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __wsdd__ProbeMatches); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __wsdd__ProbeMatches, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __wsdd__ProbeMatches location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__ProbeMatches(struct soap *soap, const struct __wsdd__ProbeMatches *a, const char *tag, const char *type) +{ + if (soap_out___wsdd__ProbeMatches(soap, tag ? tag : "-wsdd:ProbeMatches", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__ProbeMatches * SOAP_FMAC4 soap_get___wsdd__ProbeMatches(struct soap *soap, struct __wsdd__ProbeMatches *p, const char *tag, const char *type) +{ + if ((p = soap_in___wsdd__ProbeMatches(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Probe(struct soap *soap, struct __wsdd__Probe *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->wsdd__Probe = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Probe(struct soap *soap, const struct __wsdd__Probe *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__ProbeType(soap, &a->wsdd__Probe); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Probe(struct soap *soap, const char *tag, int id, const struct __wsdd__Probe *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_PointerTowsdd__ProbeType(soap, "wsdd:Probe", -1, &a->wsdd__Probe, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Probe * SOAP_FMAC4 soap_in___wsdd__Probe(struct soap *soap, const char *tag, struct __wsdd__Probe *a, const char *type) +{ + size_t soap_flag_wsdd__Probe = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __wsdd__Probe*)soap_id_enter(soap, "", a, SOAP_TYPE___wsdd__Probe, sizeof(struct __wsdd__Probe), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___wsdd__Probe(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsdd__Probe && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ProbeType(soap, "wsdd:Probe", &a->wsdd__Probe, "wsdd:ProbeType")) + { soap_flag_wsdd__Probe--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __wsdd__Probe * SOAP_FMAC2 soap_instantiate___wsdd__Probe(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___wsdd__Probe(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __wsdd__Probe *p; + size_t k = sizeof(struct __wsdd__Probe); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___wsdd__Probe, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __wsdd__Probe); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __wsdd__Probe, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __wsdd__Probe location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Probe(struct soap *soap, const struct __wsdd__Probe *a, const char *tag, const char *type) +{ + if (soap_out___wsdd__Probe(soap, tag ? tag : "-wsdd:Probe", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Probe * SOAP_FMAC4 soap_get___wsdd__Probe(struct soap *soap, struct __wsdd__Probe *p, const char *tag, const char *type) +{ + if ((p = soap_in___wsdd__Probe(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Bye(struct soap *soap, struct __wsdd__Bye *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->wsdd__Bye = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Bye(struct soap *soap, const struct __wsdd__Bye *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__ByeType(soap, &a->wsdd__Bye); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Bye(struct soap *soap, const char *tag, int id, const struct __wsdd__Bye *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_PointerTowsdd__ByeType(soap, "wsdd:Bye", -1, &a->wsdd__Bye, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Bye * SOAP_FMAC4 soap_in___wsdd__Bye(struct soap *soap, const char *tag, struct __wsdd__Bye *a, const char *type) +{ + size_t soap_flag_wsdd__Bye = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __wsdd__Bye*)soap_id_enter(soap, "", a, SOAP_TYPE___wsdd__Bye, sizeof(struct __wsdd__Bye), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___wsdd__Bye(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsdd__Bye && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ByeType(soap, "wsdd:Bye", &a->wsdd__Bye, "wsdd:ByeType")) + { soap_flag_wsdd__Bye--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __wsdd__Bye * SOAP_FMAC2 soap_instantiate___wsdd__Bye(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___wsdd__Bye(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __wsdd__Bye *p; + size_t k = sizeof(struct __wsdd__Bye); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___wsdd__Bye, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __wsdd__Bye); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __wsdd__Bye, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __wsdd__Bye location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Bye(struct soap *soap, const struct __wsdd__Bye *a, const char *tag, const char *type) +{ + if (soap_out___wsdd__Bye(soap, tag ? tag : "-wsdd:Bye", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Bye * SOAP_FMAC4 soap_get___wsdd__Bye(struct soap *soap, struct __wsdd__Bye *p, const char *tag, const char *type) +{ + if ((p = soap_in___wsdd__Bye(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Hello(struct soap *soap, struct __wsdd__Hello *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->wsdd__Hello = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Hello(struct soap *soap, const struct __wsdd__Hello *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__HelloType(soap, &a->wsdd__Hello); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Hello(struct soap *soap, const char *tag, int id, const struct __wsdd__Hello *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_out_PointerTowsdd__HelloType(soap, "wsdd:Hello", -1, &a->wsdd__Hello, "")) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Hello * SOAP_FMAC4 soap_in___wsdd__Hello(struct soap *soap, const char *tag, struct __wsdd__Hello *a, const char *type) +{ + size_t soap_flag_wsdd__Hello = 1; + short soap_flag; + (void)tag; (void)type; /* appease -Wall -Werror */ + a = (struct __wsdd__Hello*)soap_id_enter(soap, "", a, SOAP_TYPE___wsdd__Hello, sizeof(struct __wsdd__Hello), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default___wsdd__Hello(soap, a); + for (soap_flag = 0;; soap_flag = 1) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsdd__Hello && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__HelloType(soap, "wsdd:Hello", &a->wsdd__Hello, "wsdd:HelloType")) + { soap_flag_wsdd__Hello--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && soap_flag) + { soap->error = SOAP_OK; + break; + } + if (soap_flag && soap->error == SOAP_NO_TAG) + break; + if (soap->error) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct __wsdd__Hello * SOAP_FMAC2 soap_instantiate___wsdd__Hello(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate___wsdd__Hello(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct __wsdd__Hello *p; + size_t k = sizeof(struct __wsdd__Hello); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE___wsdd__Hello, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct __wsdd__Hello); + } + else + { p = SOAP_NEW_ARRAY(soap, struct __wsdd__Hello, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct __wsdd__Hello location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Hello(struct soap *soap, const struct __wsdd__Hello *a, const char *tag, const char *type) +{ + if (soap_out___wsdd__Hello(soap, tag ? tag : "-wsdd:Hello", -2, a, type)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC3 struct __wsdd__Hello * SOAP_FMAC4 soap_get___wsdd__Hello(struct soap *soap, struct __wsdd__Hello *p, const char *tag, const char *type) +{ + if ((p = soap_in___wsdd__Hello(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__AppSequence(struct soap *soap, const struct wsdd__AppSequenceType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__AppSequence(soap, tag ? tag : "wsdd:AppSequence", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Sig(struct soap *soap, const struct wsdd__SigType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Sig(soap, tag ? tag : "wsdd:Sig", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Security(struct soap *soap, const struct wsdd__SecurityType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Security(soap, tag ? tag : "wsdd:Security", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Scopes(struct soap *soap, const struct wsdd__ScopesType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Scopes(soap, tag ? tag : "wsdd:Scopes", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__ResolveMatches(struct soap *soap, const struct wsdd__ResolveMatchesType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__ResolveMatches(soap, tag ? tag : "wsdd:ResolveMatches", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Resolve(struct soap *soap, const struct wsdd__ResolveType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Resolve(soap, tag ? tag : "wsdd:Resolve", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__ProbeMatches(struct soap *soap, const struct wsdd__ProbeMatchesType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__ProbeMatches(soap, tag ? tag : "wsdd:ProbeMatches", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Probe(struct soap *soap, const struct wsdd__ProbeType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Probe(soap, tag ? tag : "wsdd:Probe", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Bye(struct soap *soap, const struct wsdd__ByeType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Bye(soap, tag ? tag : "wsdd:Bye", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Hello(struct soap *soap, const struct wsdd__HelloType *a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Hello(soap, tag ? tag : "wsdd:Hello", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_unsignedInt(soap, &a->InstanceId); + soap_default_string(soap, &a->SequenceId); + soap_default_unsignedInt(soap, &a->MessageNumber); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__AppSequenceType(struct soap *soap, const struct wsdd__AppSequenceType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__AppSequenceType(struct soap *soap, const char *tag, int id, const struct wsdd__AppSequenceType *a, const char *type) +{ + soap_set_attr(soap, "InstanceId", soap_unsignedInt2s(soap, a->InstanceId), 1); + if (a->SequenceId) + soap_set_attr(soap, "SequenceId", soap_string2s(soap, a->SequenceId), 1); + soap_set_attr(soap, "MessageNumber", soap_unsignedInt2s(soap, a->MessageNumber), 1); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__AppSequenceType), type)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__AppSequenceType * SOAP_FMAC4 soap_in_wsdd__AppSequenceType(struct soap *soap, const char *tag, struct wsdd__AppSequenceType *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__AppSequenceType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__AppSequenceType, sizeof(struct wsdd__AppSequenceType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__AppSequenceType(soap, a); + if (soap_s2unsignedInt(soap, soap_attr_value(soap, "InstanceId", 5, 1), &a->InstanceId)) + return NULL; + if (soap_s2string(soap, soap_attr_value(soap, "SequenceId", 1, 0), &a->SequenceId)) + return NULL; + if (soap_s2unsignedInt(soap, soap_attr_value(soap, "MessageNumber", 5, 1), &a->MessageNumber)) + return NULL; + 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 wsdd__AppSequenceType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__AppSequenceType, SOAP_TYPE_wsdd__AppSequenceType, sizeof(struct wsdd__AppSequenceType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__AppSequenceType * SOAP_FMAC2 soap_instantiate_wsdd__AppSequenceType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__AppSequenceType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__AppSequenceType *p; + size_t k = sizeof(struct wsdd__AppSequenceType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__AppSequenceType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__AppSequenceType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__AppSequenceType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__AppSequenceType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__AppSequenceType(struct soap *soap, const struct wsdd__AppSequenceType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__AppSequenceType(soap, tag ? tag : "wsdd:AppSequenceType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__AppSequenceType * SOAP_FMAC4 soap_get_wsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__AppSequenceType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__SigType(struct soap *soap, struct wsdd__SigType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_string(soap, &a->Scheme); + soap_default_string(soap, &a->KeyId); + soap_default_string(soap, &a->Refs); + soap_default_string(soap, &a->Sig); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__SigType(struct soap *soap, const struct wsdd__SigType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__SigType(struct soap *soap, const char *tag, int id, const struct wsdd__SigType *a, const char *type) +{ + soap_set_attr(soap, "Scheme", a->Scheme ? soap_string2s(soap, a->Scheme) : "", 1); + if (a->KeyId) + soap_set_attr(soap, "KeyId", soap_string2s(soap, a->KeyId), 1); + soap_set_attr(soap, "Refs", a->Refs ? soap_string2s(soap, a->Refs) : "", 1); + soap_set_attr(soap, "Sig", a->Sig ? soap_string2s(soap, a->Sig) : "", 1); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__SigType), type)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__SigType * SOAP_FMAC4 soap_in_wsdd__SigType(struct soap *soap, const char *tag, struct wsdd__SigType *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__SigType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__SigType, sizeof(struct wsdd__SigType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__SigType(soap, a); + if (soap_s2string(soap, soap_attr_value(soap, "Scheme", 1, 1), &a->Scheme)) + return NULL; + if (soap_s2string(soap, soap_attr_value(soap, "KeyId", 1, 0), &a->KeyId)) + return NULL; + if (soap_s2string(soap, soap_attr_value(soap, "Refs", 1, 1), &a->Refs)) + return NULL; + if (soap_s2string(soap, soap_attr_value(soap, "Sig", 1, 1), &a->Sig)) + return NULL; + 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 wsdd__SigType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__SigType, SOAP_TYPE_wsdd__SigType, sizeof(struct wsdd__SigType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__SigType * SOAP_FMAC2 soap_instantiate_wsdd__SigType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__SigType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__SigType *p; + size_t k = sizeof(struct wsdd__SigType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__SigType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__SigType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__SigType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__SigType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__SigType(struct soap *soap, const struct wsdd__SigType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__SigType(soap, tag ? tag : "wsdd:SigType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__SigType * SOAP_FMAC4 soap_get_wsdd__SigType(struct soap *soap, struct wsdd__SigType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__SigType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__SecurityType(struct soap *soap, struct wsdd__SecurityType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->Sig = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__SecurityType(struct soap *soap, const struct wsdd__SecurityType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__SigType(soap, &a->Sig); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__SecurityType(struct soap *soap, const char *tag, int id, const struct wsdd__SecurityType *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__SecurityType), type)) + return soap->error; + if (soap_out_PointerTowsdd__SigType(soap, "wsdd:Sig", -1, &a->Sig, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__SecurityType * SOAP_FMAC4 soap_in_wsdd__SecurityType(struct soap *soap, const char *tag, struct wsdd__SecurityType *a, const char *type) +{ + size_t soap_flag_Sig = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__SecurityType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__SecurityType, sizeof(struct wsdd__SecurityType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__SecurityType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_Sig && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__SigType(soap, "wsdd:Sig", &a->Sig, "wsdd:SigType")) + { soap_flag_Sig--; + 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 wsdd__SecurityType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__SecurityType, SOAP_TYPE_wsdd__SecurityType, sizeof(struct wsdd__SecurityType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__SecurityType * SOAP_FMAC2 soap_instantiate_wsdd__SecurityType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__SecurityType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__SecurityType *p; + size_t k = sizeof(struct wsdd__SecurityType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__SecurityType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__SecurityType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__SecurityType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__SecurityType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__SecurityType(struct soap *soap, const struct wsdd__SecurityType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__SecurityType(soap, tag ? tag : "wsdd:SecurityType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__SecurityType * SOAP_FMAC4 soap_get_wsdd__SecurityType(struct soap *soap, struct wsdd__SecurityType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__SecurityType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_wsdd__UriListType(soap, &a->__item); + soap_default_string(soap, &a->MatchBy); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ScopesType(struct soap *soap, const struct wsdd__ScopesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_wsdd__UriListType(soap, (char*const*)&a->__item); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ScopesType(struct soap *soap, const char *tag, int id, const struct wsdd__ScopesType *a, const char *type) +{ + if (a->MatchBy) + soap_set_attr(soap, "MatchBy", soap_string2s(soap, a->MatchBy), 1); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + return soap_out_wsdd__UriListType(soap, tag, id, (char*const*)&a->__item, ""); +} + +SOAP_FMAC3 struct wsdd__ScopesType * SOAP_FMAC4 soap_in_wsdd__ScopesType(struct soap *soap, const char *tag, struct wsdd__ScopesType *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + if (!(a = (struct wsdd__ScopesType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ScopesType, sizeof(struct wsdd__ScopesType), soap->type, soap->arrayType, soap_instantiate, soap_fbase))) + return NULL; + soap_revert(soap); + *soap->id = '\0'; + soap_default_wsdd__ScopesType(soap, a); + if (soap_s2string(soap, soap_attr_value(soap, "MatchBy", 1, 0), &a->MatchBy)) + return NULL; + if (!soap_in_wsdd__UriListType(soap, tag, (char**)&a->__item, "wsdd:ScopesType")) + return NULL; + return a; +} + +SOAP_FMAC1 struct wsdd__ScopesType * SOAP_FMAC2 soap_instantiate_wsdd__ScopesType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ScopesType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ScopesType *p; + size_t k = sizeof(struct wsdd__ScopesType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ScopesType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ScopesType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ScopesType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ScopesType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ScopesType(struct soap *soap, const struct wsdd__ScopesType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ScopesType(soap, tag ? tag : "wsdd:ScopesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ScopesType * SOAP_FMAC4 soap_get_wsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ScopesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_default_wsdd__QNameListType(soap, &a->Types); + a->Scopes = NULL; + soap_default_wsdd__UriListType(soap, &a->XAddrs); + soap_default_unsignedInt(soap, &a->MetadataVersion); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveMatchType(struct soap *soap, const struct wsdd__ResolveMatchType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_serialize_wsdd__QNameListType(soap, (char*const*)&a->Types); + soap_serialize_PointerTowsdd__ScopesType(soap, &a->Scopes); + soap_serialize_wsdd__UriListType(soap, (char*const*)&a->XAddrs); + soap_embedded(soap, &a->MetadataVersion, SOAP_TYPE_unsignedInt); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ResolveMatchType(struct soap *soap, const char *tag, int id, const struct wsdd__ResolveMatchType *a, const char *type) +{ + const char *soap_tmp_Types; + soap_tmp_Types = soap_QName2s(soap, a->Types); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__ResolveMatchType), type)) + return soap->error; + if (soap_out__wsa__EndpointReference(soap, "wsa:EndpointReference", -1, &a->wsa__EndpointReference, "")) + return soap->error; + if (soap_out_wsdd__QNameListType(soap, "wsdd:Types", -1, (char*const*)(void*)&soap_tmp_Types, "")) + return soap->error; + if (soap_out_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", -1, &a->Scopes, "")) + return soap->error; + if (soap_out_wsdd__UriListType(soap, "wsdd:XAddrs", -1, (char*const*)&a->XAddrs, "")) + return soap->error; + if (soap_out_unsignedInt(soap, "wsdd:MetadataVersion", -1, &a->MetadataVersion, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchType * SOAP_FMAC4 soap_in_wsdd__ResolveMatchType(struct soap *soap, const char *tag, struct wsdd__ResolveMatchType *a, const char *type) +{ + size_t soap_flag_wsa__EndpointReference = 1; + size_t soap_flag_Types = 1; + size_t soap_flag_Scopes = 1; + size_t soap_flag_XAddrs = 1; + size_t soap_flag_MetadataVersion = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__ResolveMatchType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ResolveMatchType, sizeof(struct wsdd__ResolveMatchType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__ResolveMatchType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsa__EndpointReference && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in__wsa__EndpointReference(soap, "wsa:EndpointReference", &a->wsa__EndpointReference, "")) + { soap_flag_wsa__EndpointReference--; + continue; + } + } + if (soap_flag_Types && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__QNameListType(soap, "wsdd:Types", (char**)&a->Types, "xsd:QName")) + { soap_flag_Types--; + continue; + } + } + if (soap_flag_Scopes && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", &a->Scopes, "wsdd:ScopesType")) + { soap_flag_Scopes--; + continue; + } + } + if (soap_flag_XAddrs && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__UriListType(soap, "wsdd:XAddrs", (char**)&a->XAddrs, "wsdd:UriListType")) + { soap_flag_XAddrs--; + continue; + } + } + if (soap_flag_MetadataVersion && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_unsignedInt(soap, "wsdd:MetadataVersion", &a->MetadataVersion, "xsd:unsignedInt")) + { soap_flag_MetadataVersion--; + 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; + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_wsa__EndpointReference > 0 || soap_flag_MetadataVersion > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + } + else if ((soap->mode & SOAP_XML_STRICT) && *soap->href != '#') + { soap->error = SOAP_OCCURS; + return NULL; + } + else + { a = (struct wsdd__ResolveMatchType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__ResolveMatchType, SOAP_TYPE_wsdd__ResolveMatchType, sizeof(struct wsdd__ResolveMatchType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__ResolveMatchType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveMatchType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ResolveMatchType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ResolveMatchType *p; + size_t k = sizeof(struct wsdd__ResolveMatchType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ResolveMatchType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ResolveMatchType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ResolveMatchType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ResolveMatchType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ResolveMatchType(struct soap *soap, const struct wsdd__ResolveMatchType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ResolveMatchType(soap, tag ? tag : "wsdd:ResolveMatchType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchType * SOAP_FMAC4 soap_get_wsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ResolveMatchType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->ResolveMatch = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveMatchesType(struct soap *soap, const struct wsdd__ResolveMatchesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_PointerTowsdd__ResolveMatchType(soap, &a->ResolveMatch); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ResolveMatchesType(struct soap *soap, const char *tag, int id, const struct wsdd__ResolveMatchesType *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__ResolveMatchesType), type)) + return soap->error; + if (soap_out_PointerTowsdd__ResolveMatchType(soap, "wsdd:ResolveMatch", -1, &a->ResolveMatch, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchesType * SOAP_FMAC4 soap_in_wsdd__ResolveMatchesType(struct soap *soap, const char *tag, struct wsdd__ResolveMatchesType *a, const char *type) +{ + size_t soap_flag_ResolveMatch = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__ResolveMatchesType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ResolveMatchesType, sizeof(struct wsdd__ResolveMatchesType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__ResolveMatchesType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_ResolveMatch && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ResolveMatchType(soap, "wsdd:ResolveMatch", &a->ResolveMatch, "wsdd:ResolveMatchType")) + { soap_flag_ResolveMatch--; + 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 wsdd__ResolveMatchesType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__ResolveMatchesType, SOAP_TYPE_wsdd__ResolveMatchesType, sizeof(struct wsdd__ResolveMatchesType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__ResolveMatchesType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveMatchesType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ResolveMatchesType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ResolveMatchesType *p; + size_t k = sizeof(struct wsdd__ResolveMatchesType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ResolveMatchesType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ResolveMatchesType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ResolveMatchesType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ResolveMatchesType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ResolveMatchesType(struct soap *soap, const struct wsdd__ResolveMatchesType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ResolveMatchesType(soap, tag ? tag : "wsdd:ResolveMatchesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchesType * SOAP_FMAC4 soap_get_wsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ResolveMatchesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__wsa__EndpointReference(soap, &a->wsa__EndpointReference); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveType(struct soap *soap, const struct wsdd__ResolveType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__wsa__EndpointReference(soap, &a->wsa__EndpointReference); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ResolveType(struct soap *soap, const char *tag, int id, const struct wsdd__ResolveType *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__ResolveType), type)) + return soap->error; + soap_element_result(soap, "wsa:EndpointReference"); + if (soap_out__wsa__EndpointReference(soap, "wsa:EndpointReference", -1, &a->wsa__EndpointReference, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__ResolveType * SOAP_FMAC4 soap_in_wsdd__ResolveType(struct soap *soap, const char *tag, struct wsdd__ResolveType *a, const char *type) +{ + size_t soap_flag_wsa__EndpointReference = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__ResolveType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ResolveType, sizeof(struct wsdd__ResolveType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__ResolveType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsa__EndpointReference && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in__wsa__EndpointReference(soap, "wsa:EndpointReference", &a->wsa__EndpointReference, "")) + { soap_flag_wsa__EndpointReference--; + continue; + } + } + soap_check_result(soap, "wsa:EndpointReference"); + 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; + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_wsa__EndpointReference > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + } + else if ((soap->mode & SOAP_XML_STRICT) && *soap->href != '#') + { soap->error = SOAP_OCCURS; + return NULL; + } + else + { a = (struct wsdd__ResolveType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__ResolveType, SOAP_TYPE_wsdd__ResolveType, sizeof(struct wsdd__ResolveType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__ResolveType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ResolveType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ResolveType *p; + size_t k = sizeof(struct wsdd__ResolveType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ResolveType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ResolveType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ResolveType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ResolveType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ResolveType(struct soap *soap, const struct wsdd__ResolveType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ResolveType(soap, tag ? tag : "wsdd:ResolveType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ResolveType * SOAP_FMAC4 soap_get_wsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ResolveType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_default_wsdd__QNameListType(soap, &a->Types); + a->Scopes = NULL; + soap_default_wsdd__UriListType(soap, &a->XAddrs); + soap_default_unsignedInt(soap, &a->MetadataVersion); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeMatchType(struct soap *soap, const struct wsdd__ProbeMatchType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_serialize_wsdd__QNameListType(soap, (char*const*)&a->Types); + soap_serialize_PointerTowsdd__ScopesType(soap, &a->Scopes); + soap_serialize_wsdd__UriListType(soap, (char*const*)&a->XAddrs); + soap_embedded(soap, &a->MetadataVersion, SOAP_TYPE_unsignedInt); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ProbeMatchType(struct soap *soap, const char *tag, int id, const struct wsdd__ProbeMatchType *a, const char *type) +{ + const char *soap_tmp_Types; + soap_tmp_Types = soap_QName2s(soap, a->Types); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__ProbeMatchType), type)) + return soap->error; + if (soap_out__wsa__EndpointReference(soap, "wsa:EndpointReference", -1, &a->wsa__EndpointReference, "")) + return soap->error; + if (soap_out_wsdd__QNameListType(soap, "wsdd:Types", -1, (char*const*)(void*)&soap_tmp_Types, "")) + return soap->error; + if (soap_out_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", -1, &a->Scopes, "")) + return soap->error; + if (soap_out_wsdd__UriListType(soap, "wsdd:XAddrs", -1, (char*const*)&a->XAddrs, "")) + return soap->error; + if (soap_out_unsignedInt(soap, "wsdd:MetadataVersion", -1, &a->MetadataVersion, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchType * SOAP_FMAC4 soap_in_wsdd__ProbeMatchType(struct soap *soap, const char *tag, struct wsdd__ProbeMatchType *a, const char *type) +{ + size_t soap_flag_wsa__EndpointReference = 1; + size_t soap_flag_Types = 1; + size_t soap_flag_Scopes = 1; + size_t soap_flag_XAddrs = 1; + size_t soap_flag_MetadataVersion = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__ProbeMatchType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ProbeMatchType, sizeof(struct wsdd__ProbeMatchType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__ProbeMatchType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsa__EndpointReference && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in__wsa__EndpointReference(soap, "wsa:EndpointReference", &a->wsa__EndpointReference, "")) + { soap_flag_wsa__EndpointReference--; + continue; + } + } + if (soap_flag_Types && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__QNameListType(soap, "wsdd:Types", (char**)&a->Types, "xsd:QName")) + { soap_flag_Types--; + continue; + } + } + if (soap_flag_Scopes && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", &a->Scopes, "wsdd:ScopesType")) + { soap_flag_Scopes--; + continue; + } + } + if (soap_flag_XAddrs && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__UriListType(soap, "wsdd:XAddrs", (char**)&a->XAddrs, "wsdd:UriListType")) + { soap_flag_XAddrs--; + continue; + } + } + if (soap_flag_MetadataVersion && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_unsignedInt(soap, "wsdd:MetadataVersion", &a->MetadataVersion, "xsd:unsignedInt")) + { soap_flag_MetadataVersion--; + 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; + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_wsa__EndpointReference > 0 || soap_flag_MetadataVersion > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + } + else if ((soap->mode & SOAP_XML_STRICT) && *soap->href != '#') + { soap->error = SOAP_OCCURS; + return NULL; + } + else + { a = (struct wsdd__ProbeMatchType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__ProbeMatchType, SOAP_TYPE_wsdd__ProbeMatchType, sizeof(struct wsdd__ProbeMatchType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__ProbeMatchType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeMatchType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ProbeMatchType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ProbeMatchType *p; + size_t k = sizeof(struct wsdd__ProbeMatchType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ProbeMatchType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ProbeMatchType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ProbeMatchType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ProbeMatchType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ProbeMatchType(struct soap *soap, const struct wsdd__ProbeMatchType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ProbeMatchType(soap, tag ? tag : "wsdd:ProbeMatchType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchType * SOAP_FMAC4 soap_get_wsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ProbeMatchType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->__sizeProbeMatch = 0; + a->ProbeMatch = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeMatchesType(struct soap *soap, const struct wsdd__ProbeMatchesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (a->ProbeMatch) + { int i; + for (i = 0; i < (int)a->__sizeProbeMatch; i++) + { + soap_embedded(soap, a->ProbeMatch + i, SOAP_TYPE_wsdd__ProbeMatchType); + soap_serialize_wsdd__ProbeMatchType(soap, a->ProbeMatch + i); + } + } +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ProbeMatchesType(struct soap *soap, const char *tag, int id, const struct wsdd__ProbeMatchesType *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__ProbeMatchesType), type)) + return soap->error; + soap_element_result(soap, "-sizeProbeMatch"); + if (a->ProbeMatch) + { int i; + for (i = 0; i < (int)a->__sizeProbeMatch; i++) + if (soap_out_wsdd__ProbeMatchType(soap, "wsdd:ProbeMatch", -1, a->ProbeMatch + i, "")) + return soap->error; + } + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchesType * SOAP_FMAC4 soap_in_wsdd__ProbeMatchesType(struct soap *soap, const char *tag, struct wsdd__ProbeMatchesType *a, const char *type) +{ + struct soap_blist *soap_blist_ProbeMatch = NULL; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__ProbeMatchesType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ProbeMatchesType, sizeof(struct wsdd__ProbeMatchesType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__ProbeMatchesType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap->error == SOAP_TAG_MISMATCH && !soap_element_begin_in(soap, "wsdd:ProbeMatch", 1, NULL)) + { if (a->ProbeMatch == NULL) + { if (soap_blist_ProbeMatch == NULL) + soap_blist_ProbeMatch = soap_alloc_block(soap); + a->ProbeMatch = soap_block::push(soap, soap_blist_ProbeMatch); + if (a->ProbeMatch == NULL) + return NULL; + soap_default_wsdd__ProbeMatchType(soap, a->ProbeMatch); + } + soap_revert(soap); + if (soap_in_wsdd__ProbeMatchType(soap, "wsdd:ProbeMatch", a->ProbeMatch, "wsdd:ProbeMatchType")) + { a->__sizeProbeMatch++; + a->ProbeMatch = NULL; + continue; + } + } + soap_check_result(soap, "-sizeProbeMatch"); + 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 (a->ProbeMatch) + soap_block::pop(soap, soap_blist_ProbeMatch); + if (a->__sizeProbeMatch) + { a->ProbeMatch = soap_new_wsdd__ProbeMatchType(soap, a->__sizeProbeMatch); + if (!a->ProbeMatch) + return NULL; + soap_block::save(soap, soap_blist_ProbeMatch, a->ProbeMatch); + } + else + { a->ProbeMatch = NULL; + if (soap_blist_ProbeMatch) + soap_block::end(soap, soap_blist_ProbeMatch); + } + if (soap_element_end_in(soap, tag)) + return NULL; + } + else + { a = (struct wsdd__ProbeMatchesType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__ProbeMatchesType, SOAP_TYPE_wsdd__ProbeMatchesType, sizeof(struct wsdd__ProbeMatchesType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__ProbeMatchesType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeMatchesType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ProbeMatchesType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ProbeMatchesType *p; + size_t k = sizeof(struct wsdd__ProbeMatchesType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ProbeMatchesType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ProbeMatchesType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ProbeMatchesType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ProbeMatchesType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ProbeMatchesType(struct soap *soap, const struct wsdd__ProbeMatchesType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ProbeMatchesType(soap, tag ? tag : "wsdd:ProbeMatchesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchesType * SOAP_FMAC4 soap_get_wsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ProbeMatchesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_wsdd__QNameListType(soap, &a->Types); + a->Scopes = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeType(struct soap *soap, const struct wsdd__ProbeType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_wsdd__QNameListType(soap, (char*const*)&a->Types); + soap_serialize_PointerTowsdd__ScopesType(soap, &a->Scopes); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ProbeType(struct soap *soap, const char *tag, int id, const struct wsdd__ProbeType *a, const char *type) +{ + const char *soap_tmp_Types; + soap_tmp_Types = soap_QName2s(soap, a->Types); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__ProbeType), type)) + return soap->error; + if (soap_out_wsdd__QNameListType(soap, "wsdd:Types", -1, (char*const*)(void*)&soap_tmp_Types, "")) + return soap->error; + if (soap_out_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", -1, &a->Scopes, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__ProbeType * SOAP_FMAC4 soap_in_wsdd__ProbeType(struct soap *soap, const char *tag, struct wsdd__ProbeType *a, const char *type) +{ + size_t soap_flag_Types = 1; + size_t soap_flag_Scopes = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__ProbeType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ProbeType, sizeof(struct wsdd__ProbeType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__ProbeType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_Types && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__QNameListType(soap, "wsdd:Types", (char**)&a->Types, "xsd:QName")) + { soap_flag_Types--; + continue; + } + } + if (soap_flag_Scopes && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", &a->Scopes, "wsdd:ScopesType")) + { soap_flag_Scopes--; + 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 wsdd__ProbeType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__ProbeType, SOAP_TYPE_wsdd__ProbeType, sizeof(struct wsdd__ProbeType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__ProbeType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ProbeType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ProbeType *p; + size_t k = sizeof(struct wsdd__ProbeType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ProbeType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ProbeType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ProbeType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ProbeType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ProbeType(struct soap *soap, const struct wsdd__ProbeType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ProbeType(soap, tag ? tag : "wsdd:ProbeType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ProbeType * SOAP_FMAC4 soap_get_wsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ProbeType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ByeType(struct soap *soap, struct wsdd__ByeType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_default_wsdd__QNameListType(soap, &a->Types); + a->Scopes = NULL; + soap_default_wsdd__UriListType(soap, &a->XAddrs); + a->MetadataVersion = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ByeType(struct soap *soap, const struct wsdd__ByeType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_serialize_wsdd__QNameListType(soap, (char*const*)&a->Types); + soap_serialize_PointerTowsdd__ScopesType(soap, &a->Scopes); + soap_serialize_wsdd__UriListType(soap, (char*const*)&a->XAddrs); + soap_serialize_PointerTounsignedInt(soap, &a->MetadataVersion); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ByeType(struct soap *soap, const char *tag, int id, const struct wsdd__ByeType *a, const char *type) +{ + const char *soap_tmp_Types; + soap_tmp_Types = soap_QName2s(soap, a->Types); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__ByeType), type)) + return soap->error; + if (soap_out__wsa__EndpointReference(soap, "wsa:EndpointReference", -1, &a->wsa__EndpointReference, "")) + return soap->error; + if (soap_out_wsdd__QNameListType(soap, "wsdd:Types", -1, (char*const*)(void*)&soap_tmp_Types, "")) + return soap->error; + if (soap_out_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", -1, &a->Scopes, "")) + return soap->error; + if (soap_out_wsdd__UriListType(soap, "wsdd:XAddrs", -1, (char*const*)&a->XAddrs, "")) + return soap->error; + if (soap_out_PointerTounsignedInt(soap, "wsdd:MetadataVersion", -1, &a->MetadataVersion, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__ByeType * SOAP_FMAC4 soap_in_wsdd__ByeType(struct soap *soap, const char *tag, struct wsdd__ByeType *a, const char *type) +{ + size_t soap_flag_wsa__EndpointReference = 1; + size_t soap_flag_Types = 1; + size_t soap_flag_Scopes = 1; + size_t soap_flag_XAddrs = 1; + size_t soap_flag_MetadataVersion = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__ByeType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__ByeType, sizeof(struct wsdd__ByeType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__ByeType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsa__EndpointReference && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in__wsa__EndpointReference(soap, "wsa:EndpointReference", &a->wsa__EndpointReference, "")) + { soap_flag_wsa__EndpointReference--; + continue; + } + } + if (soap_flag_Types && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__QNameListType(soap, "wsdd:Types", (char**)&a->Types, "xsd:QName")) + { soap_flag_Types--; + continue; + } + } + if (soap_flag_Scopes && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", &a->Scopes, "wsdd:ScopesType")) + { soap_flag_Scopes--; + continue; + } + } + if (soap_flag_XAddrs && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__UriListType(soap, "wsdd:XAddrs", (char**)&a->XAddrs, "wsdd:UriListType")) + { soap_flag_XAddrs--; + continue; + } + } + if (soap_flag_MetadataVersion && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTounsignedInt(soap, "wsdd:MetadataVersion", &a->MetadataVersion, "xsd:unsignedInt")) + { soap_flag_MetadataVersion--; + 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; + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_wsa__EndpointReference > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + } + else if ((soap->mode & SOAP_XML_STRICT) && *soap->href != '#') + { soap->error = SOAP_OCCURS; + return NULL; + } + else + { a = (struct wsdd__ByeType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__ByeType, SOAP_TYPE_wsdd__ByeType, sizeof(struct wsdd__ByeType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__ByeType * SOAP_FMAC2 soap_instantiate_wsdd__ByeType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__ByeType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__ByeType *p; + size_t k = sizeof(struct wsdd__ByeType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__ByeType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__ByeType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__ByeType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__ByeType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ByeType(struct soap *soap, const struct wsdd__ByeType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__ByeType(soap, tag ? tag : "wsdd:ByeType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ByeType * SOAP_FMAC4 soap_get_wsdd__ByeType(struct soap *soap, struct wsdd__ByeType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__ByeType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__HelloType(struct soap *soap, struct wsdd__HelloType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_default_wsdd__QNameListType(soap, &a->Types); + a->Scopes = NULL; + soap_default_wsdd__UriListType(soap, &a->XAddrs); + soap_default_unsignedInt(soap, &a->MetadataVersion); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__HelloType(struct soap *soap, const struct wsdd__HelloType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__wsa__EndpointReference(soap, &a->wsa__EndpointReference); + soap_serialize_wsdd__QNameListType(soap, (char*const*)&a->Types); + soap_serialize_PointerTowsdd__ScopesType(soap, &a->Scopes); + soap_serialize_wsdd__UriListType(soap, (char*const*)&a->XAddrs); + soap_embedded(soap, &a->MetadataVersion, SOAP_TYPE_unsignedInt); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__HelloType(struct soap *soap, const char *tag, int id, const struct wsdd__HelloType *a, const char *type) +{ + const char *soap_tmp_Types; + soap_tmp_Types = soap_QName2s(soap, a->Types); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsdd__HelloType), type)) + return soap->error; + if (soap_out__wsa__EndpointReference(soap, "wsa:EndpointReference", -1, &a->wsa__EndpointReference, "")) + return soap->error; + if (soap_out_wsdd__QNameListType(soap, "wsdd:Types", -1, (char*const*)(void*)&soap_tmp_Types, "")) + return soap->error; + if (soap_out_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", -1, &a->Scopes, "")) + return soap->error; + if (soap_out_wsdd__UriListType(soap, "wsdd:XAddrs", -1, (char*const*)&a->XAddrs, "")) + return soap->error; + if (soap_out_unsignedInt(soap, "wsdd:MetadataVersion", -1, &a->MetadataVersion, "")) + return soap->error; + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsdd__HelloType * SOAP_FMAC4 soap_in_wsdd__HelloType(struct soap *soap, const char *tag, struct wsdd__HelloType *a, const char *type) +{ + size_t soap_flag_wsa__EndpointReference = 1; + size_t soap_flag_Types = 1; + size_t soap_flag_Scopes = 1; + size_t soap_flag_XAddrs = 1; + size_t soap_flag_MetadataVersion = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsdd__HelloType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsdd__HelloType, sizeof(struct wsdd__HelloType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsdd__HelloType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_wsa__EndpointReference && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in__wsa__EndpointReference(soap, "wsa:EndpointReference", &a->wsa__EndpointReference, "")) + { soap_flag_wsa__EndpointReference--; + continue; + } + } + if (soap_flag_Types && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__QNameListType(soap, "wsdd:Types", (char**)&a->Types, "xsd:QName")) + { soap_flag_Types--; + continue; + } + } + if (soap_flag_Scopes && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__ScopesType(soap, "wsdd:Scopes", &a->Scopes, "wsdd:ScopesType")) + { soap_flag_Scopes--; + continue; + } + } + if (soap_flag_XAddrs && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_wsdd__UriListType(soap, "wsdd:XAddrs", (char**)&a->XAddrs, "wsdd:UriListType")) + { soap_flag_XAddrs--; + continue; + } + } + if (soap_flag_MetadataVersion && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_unsignedInt(soap, "wsdd:MetadataVersion", &a->MetadataVersion, "xsd:unsignedInt")) + { soap_flag_MetadataVersion--; + 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; + if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_wsa__EndpointReference > 0 || soap_flag_MetadataVersion > 0)) + { soap->error = SOAP_OCCURS; + return NULL; + } + } + else if ((soap->mode & SOAP_XML_STRICT) && *soap->href != '#') + { soap->error = SOAP_OCCURS; + return NULL; + } + else + { a = (struct wsdd__HelloType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsdd__HelloType, SOAP_TYPE_wsdd__HelloType, sizeof(struct wsdd__HelloType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsdd__HelloType * SOAP_FMAC2 soap_instantiate_wsdd__HelloType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsdd__HelloType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsdd__HelloType *p; + size_t k = sizeof(struct wsdd__HelloType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsdd__HelloType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsdd__HelloType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsdd__HelloType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsdd__HelloType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__HelloType(struct soap *soap, const struct wsdd__HelloType *a, const char *tag, const char *type) +{ + if (soap_out_wsdd__HelloType(soap, tag ? tag : "wsdd:HelloType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__HelloType * SOAP_FMAC4 soap_get_wsdd__HelloType(struct soap *soap, struct wsdd__HelloType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__HelloType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +#ifndef WITH_NOGLOBAL + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__QName(soap, &a->faultcode); + soap_default_string(soap, &a->faultstring); + soap_default_string(soap, &a->faultactor); + a->detail = NULL; + a->SOAP_ENV__Code = NULL; + a->SOAP_ENV__Reason = NULL; + soap_default_string(soap, &a->SOAP_ENV__Node); + soap_default_string(soap, &a->SOAP_ENV__Role); + a->SOAP_ENV__Detail = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__QName(soap, (char*const*)&a->faultcode); + soap_serialize_string(soap, (char*const*)&a->faultstring); + soap_serialize_string(soap, (char*const*)&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, (char*const*)&a->SOAP_ENV__Node); + soap_serialize_string(soap, (char*const*)&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_tmp_faultcode = soap_QName2s(soap, a->faultcode); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + 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*)(void*)&soap_tmp_faultcode, "")) + return soap->error; + if (soap_out_string(soap, "faultstring", -1, (char*const*)&a->faultstring, "")) + return soap->error; + if (soap_out_string(soap, "faultactor", -1, (char*const*)&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, (char*const*)&a->SOAP_ENV__Node, "")) + return soap->error; + if (soap_out_string(soap, "SOAP-ENV:Role", -1, (char*const*)&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, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct SOAP_ENV__Fault*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), NULL, 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", (char**)&a->faultcode, "xsd:QName")) + { soap_flag_faultcode--; + continue; + } + } + if (soap_flag_faultstring && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_string(soap, "faultstring", (char**)&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", (char**)&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", (char**)&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", (char**)&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, SOAP_TYPE_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +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) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Fault(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct SOAP_ENV__Fault *p; + size_t k = sizeof(struct SOAP_ENV__Fault); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_SOAP_ENV__Fault, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct SOAP_ENV__Fault); + } + else + { p = SOAP_NEW_ARRAY(soap, struct SOAP_ENV__Fault, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct SOAP_ENV__Fault location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +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) +{ + if (soap_out_SOAP_ENV__Fault(soap, tag ? tag : "SOAP-ENV:Fault", -2, 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; +} + +#endif + +#ifndef WITH_NOGLOBAL + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_string(soap, &a->SOAP_ENV__Text); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_string(soap, (char*const*)&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)a; (void)type; /* appease -Wall -Werror */ + 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, (char*const*)&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, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct SOAP_ENV__Reason*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), NULL, 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", (char**)&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, SOAP_TYPE_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +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) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Reason(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct SOAP_ENV__Reason *p; + size_t k = sizeof(struct SOAP_ENV__Reason); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_SOAP_ENV__Reason, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct SOAP_ENV__Reason); + } + else + { p = SOAP_NEW_ARRAY(soap, struct SOAP_ENV__Reason, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct SOAP_ENV__Reason location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +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) +{ + if (soap_out_SOAP_ENV__Reason(soap, tag ? tag : "SOAP-ENV:Reason", -2, 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; +} + +#endif + +#ifndef WITH_NOGLOBAL + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__QName(soap, &a->SOAP_ENV__Value); + a->SOAP_ENV__Subcode = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__QName(soap, (char*const*)&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_tmp_SOAP_ENV__Value = soap_QName2s(soap, a->SOAP_ENV__Value); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + 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*)(void*)&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, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct SOAP_ENV__Code*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), NULL, 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", (char**)&a->SOAP_ENV__Value, "xsd:QName")) + { 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, SOAP_TYPE_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +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) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Code(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct SOAP_ENV__Code *p; + size_t k = sizeof(struct SOAP_ENV__Code); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_SOAP_ENV__Code, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct SOAP_ENV__Code); + } + else + { p = SOAP_NEW_ARRAY(soap, struct SOAP_ENV__Code, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct SOAP_ENV__Code location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +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) +{ + if (soap_out_SOAP_ENV__Code(soap, tag ? tag : "SOAP-ENV:Code", -2, 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; +} + +#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) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + 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)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Detail), type)) + return soap->error; + if (soap_outliteral(soap, "-any", (char*const*)&a->__any, NULL)) + return soap->error; + 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, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct SOAP_ENV__Detail*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), NULL, 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, "fault", &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", (char**)&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, SOAP_TYPE_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +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) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Detail(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct SOAP_ENV__Detail *p; + size_t k = sizeof(struct SOAP_ENV__Detail); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_SOAP_ENV__Detail, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct SOAP_ENV__Detail); + } + else + { p = SOAP_NEW_ARRAY(soap, struct SOAP_ENV__Detail, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct SOAP_ENV__Detail location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +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) +{ + if (soap_out_SOAP_ENV__Detail(soap, tag ? tag : "SOAP-ENV:Detail", -2, 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; +} + +#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_default__wsa__MessageID(soap, &a->wsa__MessageID); + a->wsa__RelatesTo = NULL; + a->wsa__From = NULL; + a->wsa__ReplyTo = NULL; + a->wsa__FaultTo = NULL; + soap_default__wsa__To(soap, &a->wsa__To); + soap_default__wsa__Action(soap, &a->wsa__Action); + a->wsdd__AppSequence = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__wsa__MessageID(soap, (char*const*)&a->wsa__MessageID); + soap_serialize_PointerTo_wsa__RelatesTo(soap, &a->wsa__RelatesTo); + soap_serialize_PointerTo_wsa__From(soap, &a->wsa__From); + soap_serialize_PointerTo_wsa__ReplyTo(soap, &a->wsa__ReplyTo); + soap_serialize_PointerTo_wsa__FaultTo(soap, &a->wsa__FaultTo); + soap_serialize__wsa__To(soap, (char*const*)&a->wsa__To); + soap_serialize__wsa__Action(soap, (char*const*)&a->wsa__Action); + soap_serialize_PointerTowsdd__AppSequenceType(soap, &a->wsdd__AppSequence); +#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)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Header), type)) + return soap->error; + if (soap_out__wsa__MessageID(soap, "wsa:MessageID", -1, (char*const*)&a->wsa__MessageID, "")) + return soap->error; + if (soap_out_PointerTo_wsa__RelatesTo(soap, "wsa:RelatesTo", -1, &a->wsa__RelatesTo, "")) + return soap->error; + if (soap_out_PointerTo_wsa__From(soap, "wsa:From", -1, &a->wsa__From, "")) + return soap->error; + soap->mustUnderstand = 1; + if (soap_out_PointerTo_wsa__ReplyTo(soap, "wsa:ReplyTo", -1, &a->wsa__ReplyTo, "")) + return soap->error; + soap->mustUnderstand = 1; + if (soap_out_PointerTo_wsa__FaultTo(soap, "wsa:FaultTo", -1, &a->wsa__FaultTo, "")) + return soap->error; + soap->mustUnderstand = 1; + if (soap_out__wsa__To(soap, "wsa:To", -1, (char*const*)&a->wsa__To, "")) + return soap->error; + soap->mustUnderstand = 1; + if (soap_out__wsa__Action(soap, "wsa:Action", -1, (char*const*)&a->wsa__Action, "")) + return soap->error; + if (soap_out_PointerTowsdd__AppSequenceType(soap, "wsdd:AppSequence", -1, &a->wsdd__AppSequence, "")) + 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) +{ + size_t soap_flag_wsa__MessageID = 1; + size_t soap_flag_wsa__RelatesTo = 1; + size_t soap_flag_wsa__From = 1; + size_t soap_flag_wsa__ReplyTo = 1; + size_t soap_flag_wsa__FaultTo = 1; + size_t soap_flag_wsa__To = 1; + size_t soap_flag_wsa__Action = 1; + size_t soap_flag_wsdd__AppSequence = 1; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct SOAP_ENV__Header*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), NULL, 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_flag_wsa__MessageID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in__wsa__MessageID(soap, "wsa:MessageID", (char**)&a->wsa__MessageID, "")) + { soap_flag_wsa__MessageID--; + continue; + } + } + if (soap_flag_wsa__RelatesTo && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTo_wsa__RelatesTo(soap, "wsa:RelatesTo", &a->wsa__RelatesTo, "")) + { soap_flag_wsa__RelatesTo--; + continue; + } + } + if (soap_flag_wsa__From && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTo_wsa__From(soap, "wsa:From", &a->wsa__From, "")) + { soap_flag_wsa__From--; + continue; + } + } + if (soap_flag_wsa__ReplyTo && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTo_wsa__ReplyTo(soap, "wsa:ReplyTo", &a->wsa__ReplyTo, "")) + { soap_flag_wsa__ReplyTo--; + continue; + } + } + if (soap_flag_wsa__FaultTo && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTo_wsa__FaultTo(soap, "wsa:FaultTo", &a->wsa__FaultTo, "")) + { soap_flag_wsa__FaultTo--; + continue; + } + } + if (soap_flag_wsa__To && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in__wsa__To(soap, "wsa:To", (char**)&a->wsa__To, "")) + { soap_flag_wsa__To--; + continue; + } + } + if (soap_flag_wsa__Action && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in__wsa__Action(soap, "wsa:Action", (char**)&a->wsa__Action, "")) + { soap_flag_wsa__Action--; + continue; + } + } + if (soap_flag_wsdd__AppSequence && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsdd__AppSequenceType(soap, "wsdd:AppSequence", &a->wsdd__AppSequence, "wsdd:AppSequenceType")) + { soap_flag_wsdd__AppSequence--; + 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__Header *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_SOAP_ENV__Header, SOAP_TYPE_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +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) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Header(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct SOAP_ENV__Header *p; + size_t k = sizeof(struct SOAP_ENV__Header); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_SOAP_ENV__Header, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct SOAP_ENV__Header); + } + else + { p = SOAP_NEW_ARRAY(soap, struct SOAP_ENV__Header, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct SOAP_ENV__Header location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +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) +{ + if (soap_out_SOAP_ENV__Header(soap, tag ? tag : "SOAP-ENV:Header", -2, 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; +} + +#endif + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__FaultTo(struct soap *soap, const struct wsa__EndpointReferenceType *a, const char *tag, const char *type) +{ + if (soap_out__wsa__FaultTo(soap, tag ? tag : "wsa:FaultTo", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__ReplyTo(struct soap *soap, const struct wsa__EndpointReferenceType *a, const char *tag, const char *type) +{ + if (soap_out__wsa__ReplyTo(soap, tag ? tag : "wsa:ReplyTo", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__From(struct soap *soap, const struct wsa__EndpointReferenceType *a, const char *tag, const char *type) +{ + if (soap_out__wsa__From(soap, tag ? tag : "wsa:From", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__RelatesTo(struct soap *soap, const struct wsa__Relationship *a, const char *tag, const char *type) +{ + if (soap_out__wsa__RelatesTo(soap, tag ? tag : "wsa:RelatesTo", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__EndpointReference(struct soap *soap, const struct wsa__EndpointReferenceType *a, const char *tag, const char *type) +{ + if (soap_out__wsa__EndpointReference(soap, tag ? tag : "wsa:EndpointReference", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__Relationship(struct soap *soap, struct wsa__Relationship *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_string(soap, &a->__item); + soap_default__QName(soap, &a->RelationshipType); + a->__anyAttribute = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__Relationship(struct soap *soap, const struct wsa__Relationship *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_string(soap, (char*const*)&a->__item); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__Relationship(struct soap *soap, const char *tag, int id, const struct wsa__Relationship *a, const char *type) +{ + if (a->RelationshipType) + soap_set_attr(soap, "RelationshipType", soap__QName2s(soap, a->RelationshipType), 1); + if (a->__anyAttribute) + soap_set_attr(soap, "-anyAttribute", a->__anyAttribute, 1); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + return soap_out_string(soap, tag, id, (char*const*)&a->__item, ""); +} + +SOAP_FMAC3 struct wsa__Relationship * SOAP_FMAC4 soap_in_wsa__Relationship(struct soap *soap, const char *tag, struct wsa__Relationship *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + if (!(a = (struct wsa__Relationship *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsa__Relationship, sizeof(struct wsa__Relationship), soap->type, soap->arrayType, soap_instantiate, soap_fbase))) + return NULL; + soap_revert(soap); + *soap->id = '\0'; + soap_default_wsa__Relationship(soap, a); + if (soap_s2_QName(soap, soap_attr_value(soap, "RelationshipType", 2, 0), &a->RelationshipType)) + return NULL; + if (soap_s2char(soap, soap_attr_value(soap, "-anyAttribute", 0, 0), &a->__anyAttribute, 0, 0, -1, NULL)) + return NULL; + if (!soap_in_string(soap, tag, (char**)&a->__item, "wsa:Relationship")) + return NULL; + return a; +} + +SOAP_FMAC1 struct wsa__Relationship * SOAP_FMAC2 soap_instantiate_wsa__Relationship(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsa__Relationship(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsa__Relationship *p; + size_t k = sizeof(struct wsa__Relationship); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsa__Relationship, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsa__Relationship); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsa__Relationship, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsa__Relationship location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__Relationship(struct soap *soap, const struct wsa__Relationship *a, const char *tag, const char *type) +{ + if (soap_out_wsa__Relationship(soap, tag ? tag : "wsa:Relationship", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__Relationship * SOAP_FMAC4 soap_get_wsa__Relationship(struct soap *soap, struct wsa__Relationship *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsa__Relationship(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default__QName(soap, &a->__item); + soap_default_string(soap, &a->PortName); + a->__anyAttribute = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__ServiceNameType(struct soap *soap, const struct wsa__ServiceNameType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize__QName(soap, (char*const*)&a->__item); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__ServiceNameType(struct soap *soap, const char *tag, int id, const struct wsa__ServiceNameType *a, const char *type) +{ + const char *soap_tmp___item; + soap_tmp___item = soap_QName2s(soap, a->__item); + if (a->PortName) + soap_set_attr(soap, "PortName", soap_string2s(soap, a->PortName), 1); + if (a->__anyAttribute) + soap_set_attr(soap, "-anyAttribute", a->__anyAttribute, 1); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + return soap_out__QName(soap, tag, id, (char*const*)(void*)&soap_tmp___item, ""); +} + +SOAP_FMAC3 struct wsa__ServiceNameType * SOAP_FMAC4 soap_in_wsa__ServiceNameType(struct soap *soap, const char *tag, struct wsa__ServiceNameType *a, const char *type) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + if (!(a = (struct wsa__ServiceNameType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsa__ServiceNameType, sizeof(struct wsa__ServiceNameType), soap->type, soap->arrayType, soap_instantiate, soap_fbase))) + return NULL; + soap_revert(soap); + *soap->id = '\0'; + soap_default_wsa__ServiceNameType(soap, a); + if (soap_s2string(soap, soap_attr_value(soap, "PortName", 1, 0), &a->PortName)) + return NULL; + if (soap_s2char(soap, soap_attr_value(soap, "-anyAttribute", 0, 0), &a->__anyAttribute, 0, 0, -1, NULL)) + return NULL; + if (!soap_in__QName(soap, tag, (char**)&a->__item, "wsa:ServiceNameType")) + return NULL; + return a; +} + +SOAP_FMAC1 struct wsa__ServiceNameType * SOAP_FMAC2 soap_instantiate_wsa__ServiceNameType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsa__ServiceNameType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsa__ServiceNameType *p; + size_t k = sizeof(struct wsa__ServiceNameType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsa__ServiceNameType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsa__ServiceNameType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsa__ServiceNameType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsa__ServiceNameType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__ServiceNameType(struct soap *soap, const struct wsa__ServiceNameType *a, const char *tag, const char *type) +{ + if (soap_out_wsa__ServiceNameType(soap, tag ? tag : "wsa:ServiceNameType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__ServiceNameType * SOAP_FMAC4 soap_get_wsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsa__ServiceNameType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->__size = 0; + a->__any = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__ReferenceParametersType(struct soap *soap, const struct wsa__ReferenceParametersType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__ReferenceParametersType(struct soap *soap, const char *tag, int id, const struct wsa__ReferenceParametersType *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsa__ReferenceParametersType), type)) + return soap->error; + if (a->__any) + { int i; + for (i = 0; i < (int)a->__size; i++) + if (soap_outliteral(soap, "-any", (char*const*)(a->__any + i), NULL)) + return soap->error; + } + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsa__ReferenceParametersType * SOAP_FMAC4 soap_in_wsa__ReferenceParametersType(struct soap *soap, const char *tag, struct wsa__ReferenceParametersType *a, const char *type) +{ + struct soap_blist *soap_blist___any = NULL; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsa__ReferenceParametersType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsa__ReferenceParametersType, sizeof(struct wsa__ReferenceParametersType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsa__ReferenceParametersType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap->error == SOAP_TAG_MISMATCH && !soap_peek_element(soap)) + { if (a->__any == NULL) + { if (soap_blist___any == NULL) + soap_blist___any = soap_alloc_block(soap); + a->__any = (char **)soap_push_block_max(soap, soap_blist___any, sizeof(char *)); + if (a->__any == NULL) + return NULL; + *a->__any = NULL; + } + if (soap_inliteral(soap, "-any", (char**)a->__any)) + { a->__size++; + a->__any = NULL; + 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 (a->__any) + soap_pop_block(soap, soap_blist___any); + if (a->__size) + { a->__any = (char **)soap_save_block(soap, soap_blist___any, NULL, 1); + } + else + { a->__any = NULL; + if (soap_blist___any) + soap_end_block(soap, soap_blist___any); + } + if (soap_element_end_in(soap, tag)) + return NULL; + } + else + { a = (struct wsa__ReferenceParametersType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsa__ReferenceParametersType, SOAP_TYPE_wsa__ReferenceParametersType, sizeof(struct wsa__ReferenceParametersType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsa__ReferenceParametersType * SOAP_FMAC2 soap_instantiate_wsa__ReferenceParametersType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsa__ReferenceParametersType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsa__ReferenceParametersType *p; + size_t k = sizeof(struct wsa__ReferenceParametersType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsa__ReferenceParametersType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsa__ReferenceParametersType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsa__ReferenceParametersType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsa__ReferenceParametersType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__ReferenceParametersType(struct soap *soap, const struct wsa__ReferenceParametersType *a, const char *tag, const char *type) +{ + if (soap_out_wsa__ReferenceParametersType(soap, tag ? tag : "wsa:ReferenceParametersType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__ReferenceParametersType * SOAP_FMAC4 soap_get_wsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsa__ReferenceParametersType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + a->__size = 0; + a->__any = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__ReferencePropertiesType(struct soap *soap, const struct wsa__ReferencePropertiesType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__ReferencePropertiesType(struct soap *soap, const char *tag, int id, const struct wsa__ReferencePropertiesType *a, const char *type) +{ + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsa__ReferencePropertiesType), type)) + return soap->error; + if (a->__any) + { int i; + for (i = 0; i < (int)a->__size; i++) + if (soap_outliteral(soap, "-any", (char*const*)(a->__any + i), NULL)) + return soap->error; + } + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsa__ReferencePropertiesType * SOAP_FMAC4 soap_in_wsa__ReferencePropertiesType(struct soap *soap, const char *tag, struct wsa__ReferencePropertiesType *a, const char *type) +{ + struct soap_blist *soap_blist___any = NULL; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsa__ReferencePropertiesType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsa__ReferencePropertiesType, sizeof(struct wsa__ReferencePropertiesType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsa__ReferencePropertiesType(soap, a); + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap->error == SOAP_TAG_MISMATCH && !soap_peek_element(soap)) + { if (a->__any == NULL) + { if (soap_blist___any == NULL) + soap_blist___any = soap_alloc_block(soap); + a->__any = (char **)soap_push_block_max(soap, soap_blist___any, sizeof(char *)); + if (a->__any == NULL) + return NULL; + *a->__any = NULL; + } + if (soap_inliteral(soap, "-any", (char**)a->__any)) + { a->__size++; + a->__any = NULL; + 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 (a->__any) + soap_pop_block(soap, soap_blist___any); + if (a->__size) + { a->__any = (char **)soap_save_block(soap, soap_blist___any, NULL, 1); + } + else + { a->__any = NULL; + if (soap_blist___any) + soap_end_block(soap, soap_blist___any); + } + if (soap_element_end_in(soap, tag)) + return NULL; + } + else + { a = (struct wsa__ReferencePropertiesType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsa__ReferencePropertiesType, SOAP_TYPE_wsa__ReferencePropertiesType, sizeof(struct wsa__ReferencePropertiesType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsa__ReferencePropertiesType * SOAP_FMAC2 soap_instantiate_wsa__ReferencePropertiesType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsa__ReferencePropertiesType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsa__ReferencePropertiesType *p; + size_t k = sizeof(struct wsa__ReferencePropertiesType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsa__ReferencePropertiesType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsa__ReferencePropertiesType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsa__ReferencePropertiesType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsa__ReferencePropertiesType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__ReferencePropertiesType(struct soap *soap, const struct wsa__ReferencePropertiesType *a, const char *tag, const char *type) +{ + if (soap_out_wsa__ReferencePropertiesType(soap, tag ? tag : "wsa:ReferencePropertiesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__ReferencePropertiesType * SOAP_FMAC4 soap_get_wsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsa__ReferencePropertiesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__EndpointReferenceType(struct soap *soap, struct wsa__EndpointReferenceType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ + soap_default_string(soap, &a->Address); + a->ReferenceProperties = NULL; + a->ReferenceParameters = NULL; + a->PortType = NULL; + a->ServiceName = NULL; + a->__size = 0; + a->__any = NULL; + a->__anyAttribute = NULL; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__EndpointReferenceType(struct soap *soap, const struct wsa__EndpointReferenceType *a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + soap_serialize_string(soap, (char*const*)&a->Address); + soap_serialize_PointerTowsa__ReferencePropertiesType(soap, &a->ReferenceProperties); + soap_serialize_PointerTowsa__ReferenceParametersType(soap, &a->ReferenceParameters); + soap_serialize_PointerTo_QName(soap, &a->PortType); + soap_serialize_PointerTowsa__ServiceNameType(soap, &a->ServiceName); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__EndpointReferenceType(struct soap *soap, const char *tag, int id, const struct wsa__EndpointReferenceType *a, const char *type) +{ + const char *soap_tmp_PortType; + soap_tmp_PortType = a->PortType ? soap_QName2s(soap, *a->PortType) : NULL; + if (a->__anyAttribute) + soap_set_attr(soap, "-anyAttribute", a->__anyAttribute, 1); + (void)soap; (void)tag; (void)id; (void)a; (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_wsa__EndpointReferenceType), type)) + return soap->error; + if (!a->Address) + { if (soap_element_empty(soap, "wsa:Address", 0, NULL)) + return soap->error; + } + else if (soap_out_string(soap, "wsa:Address", -1, (char*const*)&a->Address, "")) + return soap->error; + if (soap_out_PointerTowsa__ReferencePropertiesType(soap, "wsa:ReferenceProperties", -1, &a->ReferenceProperties, "")) + return soap->error; + if (soap_out_PointerTowsa__ReferenceParametersType(soap, "wsa:ReferenceParameters", -1, &a->ReferenceParameters, "")) + return soap->error; + if (soap_out__QName(soap, "wsa:PortType", -1, (char*const*)(void*)&soap_tmp_PortType, "")) + return soap->error; + if (soap_out_PointerTowsa__ServiceNameType(soap, "wsa:ServiceName", -1, &a->ServiceName, "")) + return soap->error; + if (a->__any) + { int i; + for (i = 0; i < (int)a->__size; i++) + if (soap_outliteral(soap, "-any", (char*const*)(a->__any + i), NULL)) + return soap->error; + } + return soap_element_end_out(soap, tag); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType * SOAP_FMAC4 soap_in_wsa__EndpointReferenceType(struct soap *soap, const char *tag, struct wsa__EndpointReferenceType *a, const char *type) +{ + size_t soap_flag_Address = 1; + size_t soap_flag_ReferenceProperties = 1; + size_t soap_flag_ReferenceParameters = 1; + size_t soap_flag_PortType = 1; + size_t soap_flag_ServiceName = 1; + struct soap_blist *soap_blist___any = NULL; + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + (void)type; /* appease -Wall -Werror */ + a = (struct wsa__EndpointReferenceType*)soap_id_enter(soap, soap->id, a, SOAP_TYPE_wsa__EndpointReferenceType, sizeof(struct wsa__EndpointReferenceType), NULL, NULL, NULL, NULL); + if (!a) + return NULL; + soap_default_wsa__EndpointReferenceType(soap, a); + if (soap_s2char(soap, soap_attr_value(soap, "-anyAttribute", 0, 0), &a->__anyAttribute, 0, 0, -1, NULL)) + return NULL; + if (soap->body && *soap->href != '#') + { + for (;;) + { soap->error = SOAP_TAG_MISMATCH; + if (soap_flag_Address && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG)) + { if (soap_in_string(soap, "wsa:Address", (char**)&a->Address, "xsd:string")) + { soap_flag_Address--; + continue; + } + } + if (soap_flag_ReferenceProperties && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsa__ReferencePropertiesType(soap, "wsa:ReferenceProperties", &a->ReferenceProperties, "wsa:ReferencePropertiesType")) + { soap_flag_ReferenceProperties--; + continue; + } + } + if (soap_flag_ReferenceParameters && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsa__ReferenceParametersType(soap, "wsa:ReferenceParameters", &a->ReferenceParameters, "wsa:ReferenceParametersType")) + { soap_flag_ReferenceParameters--; + continue; + } + } + if (soap_flag_PortType && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTo_QName(soap, "wsa:PortType", &a->PortType, "")) + { soap_flag_PortType--; + continue; + } + } + if (soap_flag_ServiceName && soap->error == SOAP_TAG_MISMATCH) + { if (soap_in_PointerTowsa__ServiceNameType(soap, "wsa:ServiceName", &a->ServiceName, "wsa:ServiceNameType")) + { soap_flag_ServiceName--; + continue; + } + } + if (soap->error == SOAP_TAG_MISMATCH && !soap_peek_element(soap)) + { if (a->__any == NULL) + { if (soap_blist___any == NULL) + soap_blist___any = soap_alloc_block(soap); + a->__any = (char **)soap_push_block_max(soap, soap_blist___any, sizeof(char *)); + if (a->__any == NULL) + return NULL; + *a->__any = NULL; + } + if (soap_inliteral(soap, "-any", (char**)a->__any)) + { a->__size++; + a->__any = NULL; + 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 (a->__any) + soap_pop_block(soap, soap_blist___any); + if (a->__size) + { a->__any = (char **)soap_save_block(soap, soap_blist___any, NULL, 1); + } + else + { a->__any = NULL; + if (soap_blist___any) + soap_end_block(soap, soap_blist___any); + } + if (soap_element_end_in(soap, tag)) + return NULL; + if ((soap->mode & SOAP_XML_STRICT) && (!a->Address)) + { soap->error = SOAP_OCCURS; + return NULL; + } + } + else if ((soap->mode & SOAP_XML_STRICT) && *soap->href != '#') + { soap->error = SOAP_OCCURS; + return NULL; + } + else + { a = (struct wsa__EndpointReferenceType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_wsa__EndpointReferenceType, SOAP_TYPE_wsa__EndpointReferenceType, sizeof(struct wsa__EndpointReferenceType), 0, soap_finsert, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC1 struct wsa__EndpointReferenceType * SOAP_FMAC2 soap_instantiate_wsa__EndpointReferenceType(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_wsa__EndpointReferenceType(%p, %d, %s, %s)\n", (void*)soap, n, type?type:"", arrayType?arrayType:"")); + (void)type; (void)arrayType; /* appease -Wall -Werror */ + struct wsa__EndpointReferenceType *p; + size_t k = sizeof(struct wsa__EndpointReferenceType); + struct soap_clist *cp = soap_link(soap, SOAP_TYPE_wsa__EndpointReferenceType, n, soap_fdelete); + if (!cp && soap && n != SOAP_NO_LINK_TO_DELETE) + return NULL; + if (n < 0) + { p = SOAP_NEW(soap, struct wsa__EndpointReferenceType); + } + else + { p = SOAP_NEW_ARRAY(soap, struct wsa__EndpointReferenceType, n); + k *= n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated struct wsa__EndpointReferenceType location=%p n=%d\n", (void*)p, n)); + if (size) + *size = k; + if (!p) + soap->error = SOAP_EOM; + else if (cp) + cp->ptr = (void*)p; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__EndpointReferenceType(struct soap *soap, const struct wsa__EndpointReferenceType *a, const char *tag, const char *type) +{ + if (soap_out_wsa__EndpointReferenceType(soap, tag ? tag : "wsa:EndpointReferenceType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType * SOAP_FMAC4 soap_get_wsa__EndpointReferenceType(struct soap *soap, struct wsa__EndpointReferenceType *p, const char *tag, const char *type) +{ + if ((p = soap_in_wsa__EndpointReferenceType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ResolveMatchesType)) + soap_serialize_wsdd__ResolveMatchesType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ResolveMatchesType(struct soap *soap, const char *tag, int id, struct wsdd__ResolveMatchesType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ResolveMatchesType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ResolveMatchesType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchesType ** SOAP_FMAC4 soap_in_PointerTowsdd__ResolveMatchesType(struct soap *soap, const char *tag, struct wsdd__ResolveMatchesType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ResolveMatchesType **)soap_malloc(soap, sizeof(struct wsdd__ResolveMatchesType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ResolveMatchesType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ResolveMatchesType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ResolveMatchesType, sizeof(struct wsdd__ResolveMatchesType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ResolveMatchesType(soap, tag ? tag : "wsdd:ResolveMatchesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchesType ** SOAP_FMAC4 soap_get_PointerTowsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ResolveMatchesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ResolveType)) + soap_serialize_wsdd__ResolveType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ResolveType(struct soap *soap, const char *tag, int id, struct wsdd__ResolveType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ResolveType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ResolveType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ResolveType ** SOAP_FMAC4 soap_in_PointerTowsdd__ResolveType(struct soap *soap, const char *tag, struct wsdd__ResolveType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ResolveType **)soap_malloc(soap, sizeof(struct wsdd__ResolveType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ResolveType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ResolveType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ResolveType, sizeof(struct wsdd__ResolveType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ResolveType(soap, tag ? tag : "wsdd:ResolveType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ResolveType ** SOAP_FMAC4 soap_get_PointerTowsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ResolveType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ProbeMatchesType)) + soap_serialize_wsdd__ProbeMatchesType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ProbeMatchesType(struct soap *soap, const char *tag, int id, struct wsdd__ProbeMatchesType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ProbeMatchesType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ProbeMatchesType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchesType ** SOAP_FMAC4 soap_in_PointerTowsdd__ProbeMatchesType(struct soap *soap, const char *tag, struct wsdd__ProbeMatchesType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ProbeMatchesType **)soap_malloc(soap, sizeof(struct wsdd__ProbeMatchesType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ProbeMatchesType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ProbeMatchesType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ProbeMatchesType, sizeof(struct wsdd__ProbeMatchesType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ProbeMatchesType(soap, tag ? tag : "wsdd:ProbeMatchesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchesType ** SOAP_FMAC4 soap_get_PointerTowsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ProbeMatchesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ProbeType)) + soap_serialize_wsdd__ProbeType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ProbeType(struct soap *soap, const char *tag, int id, struct wsdd__ProbeType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ProbeType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ProbeType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ProbeType ** SOAP_FMAC4 soap_in_PointerTowsdd__ProbeType(struct soap *soap, const char *tag, struct wsdd__ProbeType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ProbeType **)soap_malloc(soap, sizeof(struct wsdd__ProbeType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ProbeType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ProbeType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ProbeType, sizeof(struct wsdd__ProbeType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ProbeType(soap, tag ? tag : "wsdd:ProbeType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ProbeType ** SOAP_FMAC4 soap_get_PointerTowsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ProbeType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ByeType(struct soap *soap, struct wsdd__ByeType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ByeType)) + soap_serialize_wsdd__ByeType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ByeType(struct soap *soap, const char *tag, int id, struct wsdd__ByeType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ByeType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ByeType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ByeType ** SOAP_FMAC4 soap_in_PointerTowsdd__ByeType(struct soap *soap, const char *tag, struct wsdd__ByeType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ByeType **)soap_malloc(soap, sizeof(struct wsdd__ByeType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ByeType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ByeType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ByeType, sizeof(struct wsdd__ByeType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ByeType(struct soap *soap, struct wsdd__ByeType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ByeType(soap, tag ? tag : "wsdd:ByeType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ByeType ** SOAP_FMAC4 soap_get_PointerTowsdd__ByeType(struct soap *soap, struct wsdd__ByeType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ByeType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__HelloType(struct soap *soap, struct wsdd__HelloType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__HelloType)) + soap_serialize_wsdd__HelloType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__HelloType(struct soap *soap, const char *tag, int id, struct wsdd__HelloType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__HelloType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__HelloType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__HelloType ** SOAP_FMAC4 soap_in_PointerTowsdd__HelloType(struct soap *soap, const char *tag, struct wsdd__HelloType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__HelloType **)soap_malloc(soap, sizeof(struct wsdd__HelloType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__HelloType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__HelloType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__HelloType, sizeof(struct wsdd__HelloType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__HelloType(struct soap *soap, struct wsdd__HelloType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__HelloType(soap, tag ? tag : "wsdd:HelloType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__HelloType ** SOAP_FMAC4 soap_get_PointerTowsdd__HelloType(struct soap *soap, struct wsdd__HelloType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__HelloType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__AppSequenceType)) + soap_serialize_wsdd__AppSequenceType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__AppSequenceType(struct soap *soap, const char *tag, int id, struct wsdd__AppSequenceType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__AppSequenceType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__AppSequenceType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__AppSequenceType ** SOAP_FMAC4 soap_in_PointerTowsdd__AppSequenceType(struct soap *soap, const char *tag, struct wsdd__AppSequenceType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__AppSequenceType **)soap_malloc(soap, sizeof(struct wsdd__AppSequenceType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__AppSequenceType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__AppSequenceType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__AppSequenceType, sizeof(struct wsdd__AppSequenceType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__AppSequenceType(soap, tag ? tag : "wsdd:AppSequenceType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__AppSequenceType ** SOAP_FMAC4 soap_get_PointerTowsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__AppSequenceType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Id(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out__wsdd__Id(soap, tag ? tag : "wsdd:Id", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__SigType(struct soap *soap, struct wsdd__SigType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__SigType)) + soap_serialize_wsdd__SigType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__SigType(struct soap *soap, const char *tag, int id, struct wsdd__SigType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__SigType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__SigType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__SigType ** SOAP_FMAC4 soap_in_PointerTowsdd__SigType(struct soap *soap, const char *tag, struct wsdd__SigType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__SigType **)soap_malloc(soap, sizeof(struct wsdd__SigType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__SigType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__SigType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__SigType, sizeof(struct wsdd__SigType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__SigType(struct soap *soap, struct wsdd__SigType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__SigType(soap, tag ? tag : "wsdd:SigType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__SigType ** SOAP_FMAC4 soap_get_PointerTowsdd__SigType(struct soap *soap, struct wsdd__SigType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__SigType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ResolveMatchType)) + soap_serialize_wsdd__ResolveMatchType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ResolveMatchType(struct soap *soap, const char *tag, int id, struct wsdd__ResolveMatchType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ResolveMatchType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ResolveMatchType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchType ** SOAP_FMAC4 soap_in_PointerTowsdd__ResolveMatchType(struct soap *soap, const char *tag, struct wsdd__ResolveMatchType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ResolveMatchType **)soap_malloc(soap, sizeof(struct wsdd__ResolveMatchType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ResolveMatchType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ResolveMatchType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ResolveMatchType, sizeof(struct wsdd__ResolveMatchType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ResolveMatchType(soap, tag ? tag : "wsdd:ResolveMatchType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ResolveMatchType ** SOAP_FMAC4 soap_get_PointerTowsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ResolveMatchType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ProbeMatchType)) + soap_serialize_wsdd__ProbeMatchType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ProbeMatchType(struct soap *soap, const char *tag, int id, struct wsdd__ProbeMatchType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ProbeMatchType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ProbeMatchType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchType ** SOAP_FMAC4 soap_in_PointerTowsdd__ProbeMatchType(struct soap *soap, const char *tag, struct wsdd__ProbeMatchType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ProbeMatchType **)soap_malloc(soap, sizeof(struct wsdd__ProbeMatchType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ProbeMatchType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ProbeMatchType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ProbeMatchType, sizeof(struct wsdd__ProbeMatchType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ProbeMatchType(soap, tag ? tag : "wsdd:ProbeMatchType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ProbeMatchType ** SOAP_FMAC4 soap_get_PointerTowsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ProbeMatchType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedInt(struct soap *soap, unsigned int *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + (void)soap_reference(soap, *a, SOAP_TYPE_unsignedInt); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedInt(struct soap *soap, const char *tag, int id, unsigned int *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_unsignedInt, NULL); + if (id < 0) + return soap->error; + return soap_out_unsignedInt(soap, tag, id, *a, type); +} + +SOAP_FMAC3 unsigned int ** SOAP_FMAC4 soap_in_PointerTounsignedInt(struct soap *soap, const char *tag, unsigned int **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (unsigned int **)soap_malloc(soap, sizeof(unsigned int *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_unsignedInt(soap, tag, *a, type))) + return NULL; + } + else + { a = (unsigned int **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_unsignedInt, sizeof(unsigned int), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedInt(struct soap *soap, unsigned int *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTounsignedInt(soap, tag ? tag : "unsignedInt", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 unsigned int ** SOAP_FMAC4 soap_get_PointerTounsignedInt(struct soap *soap, unsigned int **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTounsignedInt(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsdd__ScopesType)) + soap_serialize_wsdd__ScopesType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ScopesType(struct soap *soap, const char *tag, int id, struct wsdd__ScopesType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsdd__ScopesType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsdd__ScopesType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsdd__ScopesType ** SOAP_FMAC4 soap_in_PointerTowsdd__ScopesType(struct soap *soap, const char *tag, struct wsdd__ScopesType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsdd__ScopesType **)soap_malloc(soap, sizeof(struct wsdd__ScopesType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsdd__ScopesType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsdd__ScopesType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsdd__ScopesType, sizeof(struct wsdd__ScopesType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsdd__ScopesType(soap, tag ? tag : "wsdd:ScopesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsdd__ScopesType ** SOAP_FMAC4 soap_get_PointerTowsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsdd__ScopesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__FaultCodeOpenType(struct soap *soap, char *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + (void)soap_reference(soap, *a, SOAP_TYPE_wsdd__FaultCodeOpenType); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__FaultCodeOpenType(struct soap *soap, const char *tag, int id, char *const*a, const char *type) +{ + return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_wsdd__FaultCodeOpenType); +} + +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_wsdd__FaultCodeOpenType(struct soap *soap, const char *tag, char **a, const char *type) +{ + a = soap_instring(soap, tag, a, type, SOAP_TYPE_wsdd__FaultCodeOpenType, 1, 0, -1, NULL); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__FaultCodeOpenType(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out_wsdd__FaultCodeOpenType(soap, tag ? tag : "wsdd:FaultCodeOpenType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_wsdd__FaultCodeOpenType(struct soap *soap, char **p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__FaultCodeOpenType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__UriListType(struct soap *soap, char *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + (void)soap_reference(soap, *a, SOAP_TYPE_wsdd__UriListType); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__UriListType(struct soap *soap, const char *tag, int id, char *const*a, const char *type) +{ + return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_wsdd__UriListType); +} + +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_wsdd__UriListType(struct soap *soap, const char *tag, char **a, const char *type) +{ + a = soap_instring(soap, tag, a, type, SOAP_TYPE_wsdd__UriListType, 1, 0, -1, NULL); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__UriListType(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out_wsdd__UriListType(soap, tag ? tag : "wsdd:UriListType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_wsdd__UriListType(struct soap *soap, char **p, const char *tag, const char *type) +{ + if ((p = soap_in_wsdd__UriListType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +#ifndef WITH_NOGLOBAL + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#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, NULL); + 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) +{ + (void)type; /* appease -Wall -Werror */ + 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, NULL); + 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) +{ + if (soap_out_PointerToSOAP_ENV__Reason(soap, tag ? tag : "SOAP-ENV:Reason", -2, 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__Code(struct soap *soap, struct SOAP_ENV__Code *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#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) +{ + char *mark; + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_SOAP_ENV__Code, &mark); + if (id < 0) + return soap->error; + (void)soap_out_SOAP_ENV__Code(soap, tag, id, *a, type); + soap_unmark(soap, mark); + return soap->error; +} + +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) +{ + (void)type; /* appease -Wall -Werror */ + 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, NULL); + 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) +{ + if (soap_out_PointerToSOAP_ENV__Code(soap, tag ? tag : "SOAP-ENV:Code", -2, 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 + +#ifndef WITH_NOGLOBAL + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#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, NULL); + 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) +{ + (void)type; /* appease -Wall -Werror */ + 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, NULL); + 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) +{ + if (soap_out_PointerToSOAP_ENV__Detail(soap, tag ? tag : "SOAP-ENV:Detail", -2, 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 + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__FaultTo(struct soap *soap, struct wsa__EndpointReferenceType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__wsa__FaultTo)) + soap_serialize__wsa__FaultTo(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__FaultTo(struct soap *soap, const char *tag, int id, struct wsa__EndpointReferenceType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__wsa__FaultTo, NULL); + if (id < 0) + return soap->error; + return soap_out__wsa__FaultTo(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_in_PointerTo_wsa__FaultTo(struct soap *soap, const char *tag, struct wsa__EndpointReferenceType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsa__EndpointReferenceType **)soap_malloc(soap, sizeof(struct wsa__EndpointReferenceType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in__wsa__FaultTo(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsa__EndpointReferenceType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__wsa__FaultTo, sizeof(struct wsa__EndpointReferenceType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__FaultTo(struct soap *soap, struct wsa__EndpointReferenceType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTo_wsa__FaultTo(soap, tag ? tag : "wsa:FaultTo", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_get_PointerTo_wsa__FaultTo(struct soap *soap, struct wsa__EndpointReferenceType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_wsa__FaultTo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__ReplyTo(struct soap *soap, struct wsa__EndpointReferenceType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__wsa__ReplyTo)) + soap_serialize__wsa__ReplyTo(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__ReplyTo(struct soap *soap, const char *tag, int id, struct wsa__EndpointReferenceType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__wsa__ReplyTo, NULL); + if (id < 0) + return soap->error; + return soap_out__wsa__ReplyTo(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_in_PointerTo_wsa__ReplyTo(struct soap *soap, const char *tag, struct wsa__EndpointReferenceType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsa__EndpointReferenceType **)soap_malloc(soap, sizeof(struct wsa__EndpointReferenceType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in__wsa__ReplyTo(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsa__EndpointReferenceType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__wsa__ReplyTo, sizeof(struct wsa__EndpointReferenceType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__ReplyTo(struct soap *soap, struct wsa__EndpointReferenceType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTo_wsa__ReplyTo(soap, tag ? tag : "wsa:ReplyTo", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_get_PointerTo_wsa__ReplyTo(struct soap *soap, struct wsa__EndpointReferenceType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_wsa__ReplyTo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__From(struct soap *soap, struct wsa__EndpointReferenceType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__wsa__From)) + soap_serialize__wsa__From(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__From(struct soap *soap, const char *tag, int id, struct wsa__EndpointReferenceType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__wsa__From, NULL); + if (id < 0) + return soap->error; + return soap_out__wsa__From(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_in_PointerTo_wsa__From(struct soap *soap, const char *tag, struct wsa__EndpointReferenceType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsa__EndpointReferenceType **)soap_malloc(soap, sizeof(struct wsa__EndpointReferenceType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in__wsa__From(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsa__EndpointReferenceType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__wsa__From, sizeof(struct wsa__EndpointReferenceType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__From(struct soap *soap, struct wsa__EndpointReferenceType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTo_wsa__From(soap, tag ? tag : "wsa:From", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_get_PointerTo_wsa__From(struct soap *soap, struct wsa__EndpointReferenceType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_wsa__From(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__RelatesTo(struct soap *soap, struct wsa__Relationship *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__wsa__RelatesTo)) + soap_serialize__wsa__RelatesTo(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__RelatesTo(struct soap *soap, const char *tag, int id, struct wsa__Relationship *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__wsa__RelatesTo, NULL); + if (id < 0) + return soap->error; + return soap_out__wsa__RelatesTo(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsa__Relationship ** SOAP_FMAC4 soap_in_PointerTo_wsa__RelatesTo(struct soap *soap, const char *tag, struct wsa__Relationship **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsa__Relationship **)soap_malloc(soap, sizeof(struct wsa__Relationship *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in__wsa__RelatesTo(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsa__Relationship **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__wsa__RelatesTo, sizeof(struct wsa__Relationship), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__RelatesTo(struct soap *soap, struct wsa__Relationship *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTo_wsa__RelatesTo(soap, tag ? tag : "wsa:RelatesTo", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__Relationship ** SOAP_FMAC4 soap_get_PointerTo_wsa__RelatesTo(struct soap *soap, struct wsa__Relationship **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_wsa__RelatesTo(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__Action(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out__wsa__Action(soap, tag ? tag : "wsa:Action", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__To(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out__wsa__To(soap, tag ? tag : "wsa:To", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__MessageID(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out__wsa__MessageID(soap, tag ? tag : "wsa:MessageID", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsa__ServiceNameType)) + soap_serialize_wsa__ServiceNameType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsa__ServiceNameType(struct soap *soap, const char *tag, int id, struct wsa__ServiceNameType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsa__ServiceNameType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsa__ServiceNameType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsa__ServiceNameType ** SOAP_FMAC4 soap_in_PointerTowsa__ServiceNameType(struct soap *soap, const char *tag, struct wsa__ServiceNameType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsa__ServiceNameType **)soap_malloc(soap, sizeof(struct wsa__ServiceNameType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsa__ServiceNameType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsa__ServiceNameType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsa__ServiceNameType, sizeof(struct wsa__ServiceNameType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsa__ServiceNameType(soap, tag ? tag : "wsa:ServiceNameType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__ServiceNameType ** SOAP_FMAC4 soap_get_PointerTowsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsa__ServiceNameType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_QName(struct soap *soap, char **const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE__QName)) + soap_serialize__QName(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_QName(struct soap *soap, const char *tag, int id, char **const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE__QName, NULL); + if (id < 0) + return soap->error; + return soap_out__QName(soap, tag, id, *a, type); +} + +SOAP_FMAC3 char *** SOAP_FMAC4 soap_in_PointerTo_QName(struct soap *soap, const char *tag, char ***a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (char ***)soap_malloc(soap, sizeof(char **)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in__QName(soap, tag, *a, type))) + return NULL; + } + else + { a = (char ***)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE__QName, sizeof(char *), 1, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_QName(struct soap *soap, char **const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTo_QName(soap, tag ? tag : "QName", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 char *** SOAP_FMAC4 soap_get_PointerTo_QName(struct soap *soap, char ***p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTo_QName(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsa__ReferenceParametersType)) + soap_serialize_wsa__ReferenceParametersType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsa__ReferenceParametersType(struct soap *soap, const char *tag, int id, struct wsa__ReferenceParametersType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsa__ReferenceParametersType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsa__ReferenceParametersType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsa__ReferenceParametersType ** SOAP_FMAC4 soap_in_PointerTowsa__ReferenceParametersType(struct soap *soap, const char *tag, struct wsa__ReferenceParametersType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsa__ReferenceParametersType **)soap_malloc(soap, sizeof(struct wsa__ReferenceParametersType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsa__ReferenceParametersType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsa__ReferenceParametersType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsa__ReferenceParametersType, sizeof(struct wsa__ReferenceParametersType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsa__ReferenceParametersType(soap, tag ? tag : "wsa:ReferenceParametersType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__ReferenceParametersType ** SOAP_FMAC4 soap_get_PointerTowsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsa__ReferenceParametersType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + if (!soap_reference(soap, *a, SOAP_TYPE_wsa__ReferencePropertiesType)) + soap_serialize_wsa__ReferencePropertiesType(soap, *a); +#endif +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsa__ReferencePropertiesType(struct soap *soap, const char *tag, int id, struct wsa__ReferencePropertiesType *const*a, const char *type) +{ + id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_wsa__ReferencePropertiesType, NULL); + if (id < 0) + return soap->error; + return soap_out_wsa__ReferencePropertiesType(soap, tag, id, *a, type); +} + +SOAP_FMAC3 struct wsa__ReferencePropertiesType ** SOAP_FMAC4 soap_in_PointerTowsa__ReferencePropertiesType(struct soap *soap, const char *tag, struct wsa__ReferencePropertiesType **a, const char *type) +{ + (void)type; /* appease -Wall -Werror */ + if (soap_element_begin_in(soap, tag, 1, NULL)) + return NULL; + if (!a) + if (!(a = (struct wsa__ReferencePropertiesType **)soap_malloc(soap, sizeof(struct wsa__ReferencePropertiesType *)))) + return NULL; + *a = NULL; + if (!soap->null && *soap->href != '#') + { soap_revert(soap); + if (!(*a = soap_in_wsa__ReferencePropertiesType(soap, tag, *a, type))) + return NULL; + } + else + { a = (struct wsa__ReferencePropertiesType **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_wsa__ReferencePropertiesType, sizeof(struct wsa__ReferencePropertiesType), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType *const*a, const char *tag, const char *type) +{ + if (soap_out_PointerTowsa__ReferencePropertiesType(soap, tag ? tag : "wsa:ReferencePropertiesType", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 struct wsa__ReferencePropertiesType ** SOAP_FMAC4 soap_get_PointerTowsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType **p, const char *tag, const char *type) +{ + if ((p = soap_in_PointerTowsa__ReferencePropertiesType(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize__QName(struct soap *soap, char *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + (void)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); +} + +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap *soap, const char *tag, char **a, const char *type) +{ + a = soap_instring(soap, tag, a, type, SOAP_TYPE__QName, 2, 0, -1, NULL); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out__QName(soap, tag ? tag : "QName", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap *soap, char **p, const char *tag, const char *type) +{ + if ((p = soap_in__QName(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap *soap, char *const*a) +{ + (void)soap; (void)a; /* appease -Wall -Werror */ +#ifndef WITH_NOIDREF + (void)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) +{ + return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_string); +} + +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap *soap, const char *tag, char **a, const char *type) +{ + a = soap_instring(soap, tag, a, type, SOAP_TYPE_string, 1, 0, -1, NULL); + return a; +} + +SOAP_FMAC3 char * * SOAP_FMAC4 soap_new_string(struct soap *soap, int n) +{ + char * *a = static_cast(soap_malloc(soap, (n = (n < 0 ? 1 : n)) * sizeof(char *))); + for (char * *p = a; p && n--; ++p) + soap_default_string(soap, p); + return a; +} + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap *soap, char *const*a, const char *tag, const char *type) +{ + if (soap_out_string(soap, tag ? tag : "string", -2, a, type)) + return soap->error; + return soap_putindependent(soap); +} + +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap *soap, char **p, const char *tag, const char *type) +{ + if ((p = soap_in_string(soap, tag, p, type))) + if (soap_getindependent(soap)) + return NULL; + return p; +} + +#if defined(__BORLANDC__) +#pragma option pop +#pragma option pop +#endif + +/* End of soapC.cpp */ diff --git a/unit_test/test/onvif/onvif-discover/soapClient.cpp b/unit_test/test/onvif/onvif-discover/soapClient.cpp new file mode 100644 index 0000000..6767343 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/soapClient.cpp @@ -0,0 +1,598 @@ +/* soapClient.cpp + Generated by gSOAP 2.8.135 for ../onvif_head/onvif.h + +gSOAP XML Web services tools +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc. All Rights Reserved. +The soapcpp2 tool and its generated software are released under the GPL. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#if defined(__BORLANDC__) +#pragma option push -w-8060 +#pragma option push -w-8004 +#endif +#include "soapH.h" + +SOAP_SOURCE_STAMP("@(#) soapClient.cpp ver 2.8.135 2024-09-04 02:23:14 GMT") + + +SOAP_FMAC5 int SOAP_FMAC6 soap_send_SOAP_ENV__Fault(struct soap *soap, const char *soap_endpoint, const char *soap_action, 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 soap_tmp_SOAP_ENV__Fault; + if (soap_action == NULL) + soap_action = "http://schemas.xmlsoap.org/ws/2004/08/addressing/soap/fault"; + soap_tmp_SOAP_ENV__Fault.faultcode = faultcode; + soap_tmp_SOAP_ENV__Fault.faultstring = faultstring; + soap_tmp_SOAP_ENV__Fault.faultactor = faultactor; + soap_tmp_SOAP_ENV__Fault.detail = detail; + soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Code = SOAP_ENV__Code; + soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Reason = SOAP_ENV__Reason; + soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Node = SOAP_ENV__Node; + soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Role = SOAP_ENV__Role; + soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Detail = SOAP_ENV__Detail; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize_SOAP_ENV__Fault(soap, &soap_tmp_SOAP_ENV__Fault); + 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_SOAP_ENV__Fault(soap, &soap_tmp_SOAP_ENV__Fault, "SOAP-ENV:Fault", "") + || 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_SOAP_ENV__Fault(soap, &soap_tmp_SOAP_ENV__Fault, "SOAP-ENV:Fault", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *_param_1) +{ + soap_default_SOAP_ENV__Fault(soap, _param_1); + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get_SOAP_ENV__Fault(soap, _param_1, "SOAP-ENV:Fault", NULL); + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 2) + soap->error = SOAP_OK; + if (soap->error + || soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Hello(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__HelloType *wsdd__Hello) +{ struct __wsdd__Hello soap_tmp___wsdd__Hello; + if (soap_action == NULL) + soap_action = "http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Hello"; + soap_tmp___wsdd__Hello.wsdd__Hello = wsdd__Hello; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___wsdd__Hello(soap, &soap_tmp___wsdd__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___wsdd__Hello(soap, &soap_tmp___wsdd__Hello, "-wsdd:Hello", "") + || 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___wsdd__Hello(soap, &soap_tmp___wsdd__Hello, "-wsdd:Hello", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Hello(struct soap *soap, struct __wsdd__Hello *_param_1) +{ + soap_default___wsdd__Hello(soap, _param_1); + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get___wsdd__Hello(soap, _param_1, "-wsdd:Hello", NULL); + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 2) + soap->error = SOAP_OK; + if (soap->error + || soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Bye(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ByeType *wsdd__Bye) +{ struct __wsdd__Bye soap_tmp___wsdd__Bye; + if (soap_action == NULL) + soap_action = "http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Bye"; + soap_tmp___wsdd__Bye.wsdd__Bye = wsdd__Bye; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___wsdd__Bye(soap, &soap_tmp___wsdd__Bye); + 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___wsdd__Bye(soap, &soap_tmp___wsdd__Bye, "-wsdd:Bye", "") + || 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___wsdd__Bye(soap, &soap_tmp___wsdd__Bye, "-wsdd:Bye", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Bye(struct soap *soap, struct __wsdd__Bye *_param_1) +{ + soap_default___wsdd__Bye(soap, _param_1); + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get___wsdd__Bye(soap, _param_1, "-wsdd:Bye", NULL); + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 2) + soap->error = SOAP_OK; + if (soap->error + || soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Probe(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ProbeType *wsdd__Probe) +{ struct __wsdd__Probe soap_tmp___wsdd__Probe; + if (soap_action == NULL) + soap_action = "http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Probe"; + soap_tmp___wsdd__Probe.wsdd__Probe = wsdd__Probe; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___wsdd__Probe(soap, &soap_tmp___wsdd__Probe); + 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___wsdd__Probe(soap, &soap_tmp___wsdd__Probe, "-wsdd:Probe", "") + || 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___wsdd__Probe(soap, &soap_tmp___wsdd__Probe, "-wsdd:Probe", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Probe(struct soap *soap, struct __wsdd__Probe *_param_1) +{ + soap_default___wsdd__Probe(soap, _param_1); + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get___wsdd__Probe(soap, _param_1, "-wsdd:Probe", NULL); + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 2) + soap->error = SOAP_OK; + if (soap->error + || soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__ProbeMatches(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ProbeMatchesType *wsdd__ProbeMatches) +{ struct __wsdd__ProbeMatches soap_tmp___wsdd__ProbeMatches; + if (soap_action == NULL) + soap_action = "http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/ProbeMatches"; + soap_tmp___wsdd__ProbeMatches.wsdd__ProbeMatches = wsdd__ProbeMatches; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___wsdd__ProbeMatches(soap, &soap_tmp___wsdd__ProbeMatches); + 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___wsdd__ProbeMatches(soap, &soap_tmp___wsdd__ProbeMatches, "-wsdd:ProbeMatches", "") + || 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___wsdd__ProbeMatches(soap, &soap_tmp___wsdd__ProbeMatches, "-wsdd:ProbeMatches", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__ProbeMatches(struct soap *soap, struct __wsdd__ProbeMatches *_param_1) +{ + soap_default___wsdd__ProbeMatches(soap, _param_1); + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get___wsdd__ProbeMatches(soap, _param_1, "-wsdd:ProbeMatches", NULL); + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 2) + soap->error = SOAP_OK; + if (soap->error + || soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Resolve(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ResolveType *wsdd__Resolve) +{ struct __wsdd__Resolve soap_tmp___wsdd__Resolve; + if (soap_action == NULL) + soap_action = "http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Resolve"; + soap_tmp___wsdd__Resolve.wsdd__Resolve = wsdd__Resolve; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___wsdd__Resolve(soap, &soap_tmp___wsdd__Resolve); + 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___wsdd__Resolve(soap, &soap_tmp___wsdd__Resolve, "-wsdd:Resolve", "") + || 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___wsdd__Resolve(soap, &soap_tmp___wsdd__Resolve, "-wsdd:Resolve", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Resolve(struct soap *soap, struct __wsdd__Resolve *_param_1) +{ + soap_default___wsdd__Resolve(soap, _param_1); + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get___wsdd__Resolve(soap, _param_1, "-wsdd:Resolve", NULL); + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 2) + soap->error = SOAP_OK; + if (soap->error + || soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__ResolveMatches(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ResolveMatchesType *wsdd__ResolveMatches) +{ struct __wsdd__ResolveMatches soap_tmp___wsdd__ResolveMatches; + if (soap_action == NULL) + soap_action = "http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/ResolveMatches"; + soap_tmp___wsdd__ResolveMatches.wsdd__ResolveMatches = wsdd__ResolveMatches; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___wsdd__ResolveMatches(soap, &soap_tmp___wsdd__ResolveMatches); + 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___wsdd__ResolveMatches(soap, &soap_tmp___wsdd__ResolveMatches, "-wsdd:ResolveMatches", "") + || 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___wsdd__ResolveMatches(soap, &soap_tmp___wsdd__ResolveMatches, "-wsdd:ResolveMatches", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__ResolveMatches(struct soap *soap, struct __wsdd__ResolveMatches *_param_1) +{ + soap_default___wsdd__ResolveMatches(soap, _param_1); + soap_begin(soap); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get___wsdd__ResolveMatches(soap, _param_1, "-wsdd:ResolveMatches", NULL); + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 2) + soap->error = SOAP_OK; + if (soap->error + || soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_call___tdn__Hello(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__HelloType& tdn__Hello, struct wsdd__ResolveType &tdn__HelloResponse) +{ if (soap_send___tdn__Hello(soap, soap_endpoint, soap_action, tdn__Hello) || soap_recv___tdn__Hello(soap, tdn__HelloResponse)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___tdn__Hello(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__HelloType& tdn__Hello) +{ struct __tdn__Hello soap_tmp___tdn__Hello; + if (soap_action == NULL) + soap_action = "http://www.onvif.org/ver10/network/wsdl/Hello"; + soap_tmp___tdn__Hello.tdn__Hello = tdn__Hello; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___tdn__Hello(soap, &soap_tmp___tdn__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___tdn__Hello(soap, &soap_tmp___tdn__Hello, "-tdn:Hello", "") + || 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___tdn__Hello(soap, &soap_tmp___tdn__Hello, "-tdn:Hello", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___tdn__Hello(struct soap *soap, struct wsdd__ResolveType &tdn__HelloResponse) +{ + soap_default_wsdd__ResolveType(soap, &tdn__HelloResponse); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get_wsdd__ResolveType(soap, &tdn__HelloResponse, "tdn:HelloResponse", NULL); + if (soap->error) + return soap_recv_fault(soap, 0); + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_call___tdn__Bye(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ByeType& tdn__Bye, struct wsdd__ResolveType &tdn__ByeResponse) +{ if (soap_send___tdn__Bye(soap, soap_endpoint, soap_action, tdn__Bye) || soap_recv___tdn__Bye(soap, tdn__ByeResponse)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___tdn__Bye(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ByeType& tdn__Bye) +{ struct __tdn__Bye soap_tmp___tdn__Bye; + if (soap_action == NULL) + soap_action = "http://www.onvif.org/ver10/network/wsdl/Bye"; + soap_tmp___tdn__Bye.tdn__Bye = tdn__Bye; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___tdn__Bye(soap, &soap_tmp___tdn__Bye); + 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___tdn__Bye(soap, &soap_tmp___tdn__Bye, "-tdn:Bye", "") + || 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___tdn__Bye(soap, &soap_tmp___tdn__Bye, "-tdn:Bye", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___tdn__Bye(struct soap *soap, struct wsdd__ResolveType &tdn__ByeResponse) +{ + soap_default_wsdd__ResolveType(soap, &tdn__ByeResponse); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get_wsdd__ResolveType(soap, &tdn__ByeResponse, "tdn:ByeResponse", NULL); + if (soap->error) + return soap_recv_fault(soap, 0); + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_call___tdn__Probe(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ProbeType& tdn__Probe, struct wsdd__ProbeMatchesType &tdn__ProbeResponse) +{ if (soap_send___tdn__Probe(soap, soap_endpoint, soap_action, tdn__Probe) || soap_recv___tdn__Probe(soap, tdn__ProbeResponse)) + return soap->error; + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_send___tdn__Probe(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ProbeType& tdn__Probe) +{ struct __tdn__Probe soap_tmp___tdn__Probe; + if (soap_action == NULL) + soap_action = "http://www.onvif.org/ver10/network/wsdl/Probe"; + soap_tmp___tdn__Probe.tdn__Probe = tdn__Probe; + soap_begin(soap); + soap_set_version(soap, 2); /* use SOAP1.2 */ + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize___tdn__Probe(soap, &soap_tmp___tdn__Probe); + 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___tdn__Probe(soap, &soap_tmp___tdn__Probe, "-tdn:Probe", "") + || 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___tdn__Probe(soap, &soap_tmp___tdn__Probe, "-tdn:Probe", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_recv___tdn__Probe(struct soap *soap, struct wsdd__ProbeMatchesType &tdn__ProbeResponse) +{ + soap_default_wsdd__ProbeMatchesType(soap, &tdn__ProbeResponse); + if (soap_begin_recv(soap) + || soap_envelope_begin_in(soap) + || soap_recv_header(soap) + || soap_body_begin_in(soap)) + return soap_closesock(soap); + soap_get_wsdd__ProbeMatchesType(soap, &tdn__ProbeResponse, "tdn:ProbeResponse", NULL); + 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); +} + +#if defined(__BORLANDC__) +#pragma option pop +#pragma option pop +#endif + +/* End of soapClient.cpp */ diff --git a/unit_test/test/onvif/onvif-discover/soapH.h b/unit_test/test/onvif/onvif-discover/soapH.h new file mode 100644 index 0000000..27c8292 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/soapH.h @@ -0,0 +1,6056 @@ +/* soapH.h + Generated by gSOAP 2.8.135 for ../onvif_head/onvif.h + +gSOAP XML Web services tools +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc. All Rights Reserved. +The soapcpp2 tool and its generated software are released under the GPL. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#ifndef soapH_H +#define soapH_H +#include "soapStub.h" +#ifndef WITH_NOIDREF + +#ifdef __cplusplus +extern "C" { +#endif +SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap*, const void*, int); + +#ifdef __cplusplus +} +#endif +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*, const char*, int*); +SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int); +SOAP_FMAC3 void * SOAP_FMAC4 soap_dupelement(struct soap*, const void*, int); +SOAP_FMAC3 void SOAP_FMAC4 soap_delelement(const void*, int); + +#ifdef __cplusplus +} +#endif +SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*); +SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap*, int, const char*, const char*, size_t*); +SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap *soap, struct soap_clist*); +SOAP_FMAC3 int SOAP_FMAC4 soap_fbase(int, int); +SOAP_FMAC3 void SOAP_FMAC4 soap_finsert(struct soap*, int, int, void*, size_t, const void*, void**); + +#ifndef SOAP_TYPE_byte_DEFINED +#define SOAP_TYPE_byte_DEFINED + +inline void soap_default_byte(struct soap *soap, char *a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_byte + *a = SOAP_DEFAULT_byte; +#else + *a = (char)0; +#endif +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap*, const char*, int, const char *, const char*); +SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap*, const char*, char *, const char*); + +SOAP_FMAC3 char * SOAP_FMAC4 soap_new_byte(struct soap *soap, int n = -1); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*); + +inline int soap_write_byte(struct soap *soap, char const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_byte(soap, p, "byte", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_byte(struct soap *soap, const char *URL, char const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_byte(soap, p, "byte", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_byte(struct soap *soap, const char *URL, char const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_byte(soap, p, "byte", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_byte(struct soap *soap, const char *URL, char const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_byte(soap, p, "byte", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*); + +inline int soap_read_byte(struct soap *soap, char *p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_byte(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_byte(struct soap *soap, const char *URL, char *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_byte(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_byte(struct soap *soap, char *p) +{ + if (::soap_read_byte(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_int_DEFINED +#define SOAP_TYPE_int_DEFINED + +inline void 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*, 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_new_int(struct soap *soap, int n = -1); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*); + +inline int soap_write_int(struct soap *soap, int const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_int(soap, p, "int", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_int(struct soap *soap, const char *URL, int const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_int(soap, p, "int", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_int(struct soap *soap, const char *URL, int const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_int(soap, p, "int", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_int(struct soap *soap, const char *URL, int const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_int(soap, p, "int", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*); + +inline int soap_read_int(struct soap *soap, int *p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_int(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_int(struct soap *soap, const char *URL, int *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_int(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_int(struct soap *soap, int *p) +{ + if (::soap_read_int(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif +/* _wsdd__MetadataVersion is a typedef synonym of unsignedInt */ + +#ifndef SOAP_TYPE__wsdd__MetadataVersion_DEFINED +#define SOAP_TYPE__wsdd__MetadataVersion_DEFINED + +#define soap_default__wsdd__MetadataVersion soap_default_unsignedInt + + +#define soap__wsdd__MetadataVersion2s soap_unsignedInt2s + + +#define soap_out__wsdd__MetadataVersion soap_out_unsignedInt + + +#define soap_s2_wsdd__MetadataVersion soap_s2unsignedInt + + +#define soap_in__wsdd__MetadataVersion soap_in_unsignedInt + + +#define soap_instantiate__wsdd__MetadataVersion soap_instantiate_unsignedInt + + +#define soap_new__wsdd__MetadataVersion soap_new_unsignedInt + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__MetadataVersion(struct soap*, const unsigned int *, const char*, const char*); + +inline int soap_write__wsdd__MetadataVersion(struct soap *soap, unsigned int const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put__wsdd__MetadataVersion(soap, p, "wsdd:MetadataVersion", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT__wsdd__MetadataVersion(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsdd__MetadataVersion(soap, p, "wsdd:MetadataVersion", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__MetadataVersion(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsdd__MetadataVersion(soap, p, "wsdd:MetadataVersion", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__MetadataVersion(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsdd__MetadataVersion(soap, p, "wsdd:MetadataVersion", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__MetadataVersion soap_get_unsignedInt + + +#define soap_read__wsdd__MetadataVersion soap_read_unsignedInt + + +#define soap_GET__wsdd__MetadataVersion soap_GET_unsignedInt + + +#define soap_POST_recv__wsdd__MetadataVersion soap_POST_recv_unsignedInt + +#endif +/* _wsa__ReplyAfter is a typedef synonym of unsignedInt */ + +#ifndef SOAP_TYPE__wsa__ReplyAfter_DEFINED +#define SOAP_TYPE__wsa__ReplyAfter_DEFINED + +#define soap_default__wsa__ReplyAfter soap_default_unsignedInt + + +#define soap__wsa__ReplyAfter2s soap_unsignedInt2s + + +#define soap_out__wsa__ReplyAfter soap_out_unsignedInt + + +#define soap_s2_wsa__ReplyAfter soap_s2unsignedInt + + +#define soap_in__wsa__ReplyAfter soap_in_unsignedInt + + +#define soap_instantiate__wsa__ReplyAfter soap_instantiate_unsignedInt + + +#define soap_new__wsa__ReplyAfter soap_new_unsignedInt + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__ReplyAfter(struct soap*, const unsigned int *, const char*, const char*); + +inline int soap_write__wsa__ReplyAfter(struct soap *soap, unsigned int const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put__wsa__ReplyAfter(soap, p, "wsa:ReplyAfter", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT__wsa__ReplyAfter(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__ReplyAfter(soap, p, "wsa:ReplyAfter", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__ReplyAfter(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__ReplyAfter(soap, p, "wsa:ReplyAfter", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__ReplyAfter(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__ReplyAfter(soap, p, "wsa:ReplyAfter", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__ReplyAfter soap_get_unsignedInt + + +#define soap_read__wsa__ReplyAfter soap_read_unsignedInt + + +#define soap_GET__wsa__ReplyAfter soap_GET_unsignedInt + + +#define soap_POST_recv__wsa__ReplyAfter soap_POST_recv_unsignedInt + +#endif + +#ifndef SOAP_TYPE_unsignedInt_DEFINED +#define SOAP_TYPE_unsignedInt_DEFINED + +inline void soap_default_unsignedInt(struct soap *soap, unsigned int *a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_unsignedInt + *a = SOAP_DEFAULT_unsignedInt; +#else + *a = (unsigned int)0; +#endif +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap*, 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 unsigned int * SOAP_FMAC4 soap_new_unsignedInt(struct soap *soap, int n = -1); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap*, const unsigned int *, const char*, const char*); + +inline int soap_write_unsignedInt(struct soap *soap, unsigned int const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_unsignedInt(soap, p, "unsignedInt", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_unsignedInt(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_unsignedInt(soap, p, "unsignedInt", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_unsignedInt(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_unsignedInt(soap, p, "unsignedInt", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_unsignedInt(struct soap *soap, const char *URL, unsigned int const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_unsignedInt(soap, p, "unsignedInt", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap*, unsigned int *, const char*, const char*); + +inline int soap_read_unsignedInt(struct soap *soap, unsigned int *p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_unsignedInt(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_unsignedInt(struct soap *soap, const char *URL, unsigned int *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_unsignedInt(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_unsignedInt(struct soap *soap, unsigned int *p) +{ + if (::soap_read_unsignedInt(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__FaultCodeType_DEFINED +#define SOAP_TYPE_wsdd__FaultCodeType_DEFINED + +inline void soap_default_wsdd__FaultCodeType(struct soap *soap, enum wsdd__FaultCodeType *a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_wsdd__FaultCodeType + *a = SOAP_DEFAULT_wsdd__FaultCodeType; +#else + *a = (enum wsdd__FaultCodeType)0; +#endif +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__FaultCodeType(struct soap*, const char*, int, const enum wsdd__FaultCodeType *, const char*); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_wsdd__FaultCodeType2s(struct soap*, enum wsdd__FaultCodeType); +SOAP_FMAC3 enum wsdd__FaultCodeType * SOAP_FMAC4 soap_in_wsdd__FaultCodeType(struct soap*, const char*, enum wsdd__FaultCodeType *, const char*); +SOAP_FMAC3S int SOAP_FMAC4S soap_s2wsdd__FaultCodeType(struct soap*, const char*, enum wsdd__FaultCodeType *); + +SOAP_FMAC3 enum wsdd__FaultCodeType * SOAP_FMAC4 soap_new_wsdd__FaultCodeType(struct soap *soap, int n = -1); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__FaultCodeType(struct soap*, const enum wsdd__FaultCodeType *, const char*, const char*); + +inline int soap_write_wsdd__FaultCodeType(struct soap *soap, enum wsdd__FaultCodeType const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_wsdd__FaultCodeType(soap, p, "wsdd:FaultCodeType", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_wsdd__FaultCodeType(struct soap *soap, const char *URL, enum wsdd__FaultCodeType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__FaultCodeType(soap, p, "wsdd:FaultCodeType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__FaultCodeType(struct soap *soap, const char *URL, enum wsdd__FaultCodeType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__FaultCodeType(soap, p, "wsdd:FaultCodeType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__FaultCodeType(struct soap *soap, const char *URL, enum wsdd__FaultCodeType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__FaultCodeType(soap, p, "wsdd:FaultCodeType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 enum wsdd__FaultCodeType * SOAP_FMAC4 soap_get_wsdd__FaultCodeType(struct soap*, enum wsdd__FaultCodeType *, const char*, const char*); + +inline int soap_read_wsdd__FaultCodeType(struct soap *soap, enum wsdd__FaultCodeType *p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_wsdd__FaultCodeType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__FaultCodeType(struct soap *soap, const char *URL, enum wsdd__FaultCodeType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__FaultCodeType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__FaultCodeType(struct soap *soap, enum wsdd__FaultCodeType *p) +{ + if (::soap_read_wsdd__FaultCodeType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsa__FaultSubcodeValues_DEFINED +#define SOAP_TYPE_wsa__FaultSubcodeValues_DEFINED + +inline void soap_default_wsa__FaultSubcodeValues(struct soap *soap, enum wsa__FaultSubcodeValues *a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_wsa__FaultSubcodeValues + *a = SOAP_DEFAULT_wsa__FaultSubcodeValues; +#else + *a = (enum wsa__FaultSubcodeValues)0; +#endif +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__FaultSubcodeValues(struct soap*, const char*, int, const enum wsa__FaultSubcodeValues *, const char*); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_wsa__FaultSubcodeValues2s(struct soap*, enum wsa__FaultSubcodeValues); +SOAP_FMAC3 enum wsa__FaultSubcodeValues * SOAP_FMAC4 soap_in_wsa__FaultSubcodeValues(struct soap*, const char*, enum wsa__FaultSubcodeValues *, const char*); +SOAP_FMAC3S int SOAP_FMAC4S soap_s2wsa__FaultSubcodeValues(struct soap*, const char*, enum wsa__FaultSubcodeValues *); + +SOAP_FMAC3 enum wsa__FaultSubcodeValues * SOAP_FMAC4 soap_new_wsa__FaultSubcodeValues(struct soap *soap, int n = -1); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__FaultSubcodeValues(struct soap*, const enum wsa__FaultSubcodeValues *, const char*, const char*); + +inline int soap_write_wsa__FaultSubcodeValues(struct soap *soap, enum wsa__FaultSubcodeValues const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_wsa__FaultSubcodeValues(soap, p, "wsa:FaultSubcodeValues", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_wsa__FaultSubcodeValues(struct soap *soap, const char *URL, enum wsa__FaultSubcodeValues const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsa__FaultSubcodeValues(soap, p, "wsa:FaultSubcodeValues", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsa__FaultSubcodeValues(struct soap *soap, const char *URL, enum wsa__FaultSubcodeValues const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsa__FaultSubcodeValues(soap, p, "wsa:FaultSubcodeValues", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsa__FaultSubcodeValues(struct soap *soap, const char *URL, enum wsa__FaultSubcodeValues const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsa__FaultSubcodeValues(soap, p, "wsa:FaultSubcodeValues", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 enum wsa__FaultSubcodeValues * SOAP_FMAC4 soap_get_wsa__FaultSubcodeValues(struct soap*, enum wsa__FaultSubcodeValues *, const char*, const char*); + +inline int soap_read_wsa__FaultSubcodeValues(struct soap *soap, enum wsa__FaultSubcodeValues *p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_wsa__FaultSubcodeValues(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsa__FaultSubcodeValues(struct soap *soap, const char *URL, enum wsa__FaultSubcodeValues *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsa__FaultSubcodeValues(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsa__FaultSubcodeValues(struct soap *soap, enum wsa__FaultSubcodeValues *p) +{ + if (::soap_read_wsa__FaultSubcodeValues(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsa__RelationshipTypeValues_DEFINED +#define SOAP_TYPE_wsa__RelationshipTypeValues_DEFINED + +inline void soap_default_wsa__RelationshipTypeValues(struct soap *soap, enum wsa__RelationshipTypeValues *a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_wsa__RelationshipTypeValues + *a = SOAP_DEFAULT_wsa__RelationshipTypeValues; +#else + *a = (enum wsa__RelationshipTypeValues)0; +#endif +} +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__RelationshipTypeValues(struct soap*, const char*, int, const enum wsa__RelationshipTypeValues *, const char*); +SOAP_FMAC3S const char* SOAP_FMAC4S soap_wsa__RelationshipTypeValues2s(struct soap*, enum wsa__RelationshipTypeValues); +SOAP_FMAC3 enum wsa__RelationshipTypeValues * SOAP_FMAC4 soap_in_wsa__RelationshipTypeValues(struct soap*, const char*, enum wsa__RelationshipTypeValues *, const char*); +SOAP_FMAC3S int SOAP_FMAC4S soap_s2wsa__RelationshipTypeValues(struct soap*, const char*, enum wsa__RelationshipTypeValues *); + +SOAP_FMAC3 enum wsa__RelationshipTypeValues * SOAP_FMAC4 soap_new_wsa__RelationshipTypeValues(struct soap *soap, int n = -1); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__RelationshipTypeValues(struct soap*, const enum wsa__RelationshipTypeValues *, const char*, const char*); + +inline int soap_write_wsa__RelationshipTypeValues(struct soap *soap, enum wsa__RelationshipTypeValues const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_wsa__RelationshipTypeValues(soap, p, "wsa:RelationshipTypeValues", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_wsa__RelationshipTypeValues(struct soap *soap, const char *URL, enum wsa__RelationshipTypeValues const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsa__RelationshipTypeValues(soap, p, "wsa:RelationshipTypeValues", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsa__RelationshipTypeValues(struct soap *soap, const char *URL, enum wsa__RelationshipTypeValues const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsa__RelationshipTypeValues(soap, p, "wsa:RelationshipTypeValues", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsa__RelationshipTypeValues(struct soap *soap, const char *URL, enum wsa__RelationshipTypeValues const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsa__RelationshipTypeValues(soap, p, "wsa:RelationshipTypeValues", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 enum wsa__RelationshipTypeValues * SOAP_FMAC4 soap_get_wsa__RelationshipTypeValues(struct soap*, enum wsa__RelationshipTypeValues *, const char*, const char*); + +inline int soap_read_wsa__RelationshipTypeValues(struct soap *soap, enum wsa__RelationshipTypeValues *p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_wsa__RelationshipTypeValues(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsa__RelationshipTypeValues(struct soap *soap, const char *URL, enum wsa__RelationshipTypeValues *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsa__RelationshipTypeValues(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsa__RelationshipTypeValues(struct soap *soap, enum wsa__RelationshipTypeValues *p) +{ + if (::soap_read_wsa__RelationshipTypeValues(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___tdn__Probe_DEFINED +#define SOAP_TYPE___tdn__Probe_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___tdn__Probe(struct soap*, struct __tdn__Probe *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___tdn__Probe(struct soap*, const struct __tdn__Probe *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___tdn__Probe(struct soap*, const char*, int, const struct __tdn__Probe *, const char*); +SOAP_FMAC3 struct __tdn__Probe * SOAP_FMAC4 soap_in___tdn__Probe(struct soap*, const char*, struct __tdn__Probe *, const char*); +SOAP_FMAC1 struct __tdn__Probe * SOAP_FMAC2 soap_instantiate___tdn__Probe(struct soap*, int, const char*, const char*, size_t*); + +inline struct __tdn__Probe * soap_new___tdn__Probe(struct soap *soap, int n = -1) +{ + return soap_instantiate___tdn__Probe(soap, n, NULL, NULL, NULL); +} + +inline struct __tdn__Probe * soap_new_req___tdn__Probe( + struct soap *soap, + const struct wsdd__ProbeType& tdn__Probe) +{ + struct __tdn__Probe *_p = ::soap_new___tdn__Probe(soap); + if (_p) + { ::soap_default___tdn__Probe(soap, _p); + _p->tdn__Probe = tdn__Probe; + } + return _p; +} + +inline struct __tdn__Probe * soap_new_set___tdn__Probe( + struct soap *soap, + const struct wsdd__ProbeType& tdn__Probe) +{ + struct __tdn__Probe *_p = ::soap_new___tdn__Probe(soap); + if (_p) + { ::soap_default___tdn__Probe(soap, _p); + _p->tdn__Probe = tdn__Probe; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___tdn__Probe(struct soap*, const struct __tdn__Probe *, const char*, const char*); + +inline int soap_write___tdn__Probe(struct soap *soap, struct __tdn__Probe const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___tdn__Probe(soap, p), 0) || ::soap_put___tdn__Probe(soap, p, "-tdn:Probe", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___tdn__Probe(struct soap *soap, const char *URL, struct __tdn__Probe const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Probe(soap, p), 0) || ::soap_put___tdn__Probe(soap, p, "-tdn:Probe", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___tdn__Probe(struct soap *soap, const char *URL, struct __tdn__Probe const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Probe(soap, p), 0) || ::soap_put___tdn__Probe(soap, p, "-tdn:Probe", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___tdn__Probe(struct soap *soap, const char *URL, struct __tdn__Probe const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Probe(soap, p), 0) || ::soap_put___tdn__Probe(soap, p, "-tdn:Probe", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __tdn__Probe * SOAP_FMAC4 soap_get___tdn__Probe(struct soap*, struct __tdn__Probe *, const char*, const char*); + +inline int soap_read___tdn__Probe(struct soap *soap, struct __tdn__Probe *p) +{ + if (p) + { ::soap_default___tdn__Probe(soap, p); + if (soap_begin_recv(soap) || ::soap_get___tdn__Probe(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___tdn__Probe(struct soap *soap, const char *URL, struct __tdn__Probe *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___tdn__Probe(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___tdn__Probe(struct soap *soap, struct __tdn__Probe *p) +{ + if (::soap_read___tdn__Probe(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___tdn__Bye_DEFINED +#define SOAP_TYPE___tdn__Bye_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___tdn__Bye(struct soap*, struct __tdn__Bye *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___tdn__Bye(struct soap*, const struct __tdn__Bye *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___tdn__Bye(struct soap*, const char*, int, const struct __tdn__Bye *, const char*); +SOAP_FMAC3 struct __tdn__Bye * SOAP_FMAC4 soap_in___tdn__Bye(struct soap*, const char*, struct __tdn__Bye *, const char*); +SOAP_FMAC1 struct __tdn__Bye * SOAP_FMAC2 soap_instantiate___tdn__Bye(struct soap*, int, const char*, const char*, size_t*); + +inline struct __tdn__Bye * soap_new___tdn__Bye(struct soap *soap, int n = -1) +{ + return soap_instantiate___tdn__Bye(soap, n, NULL, NULL, NULL); +} + +inline struct __tdn__Bye * soap_new_req___tdn__Bye( + struct soap *soap, + const struct wsdd__ByeType& tdn__Bye) +{ + struct __tdn__Bye *_p = ::soap_new___tdn__Bye(soap); + if (_p) + { ::soap_default___tdn__Bye(soap, _p); + _p->tdn__Bye = tdn__Bye; + } + return _p; +} + +inline struct __tdn__Bye * soap_new_set___tdn__Bye( + struct soap *soap, + const struct wsdd__ByeType& tdn__Bye) +{ + struct __tdn__Bye *_p = ::soap_new___tdn__Bye(soap); + if (_p) + { ::soap_default___tdn__Bye(soap, _p); + _p->tdn__Bye = tdn__Bye; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___tdn__Bye(struct soap*, const struct __tdn__Bye *, const char*, const char*); + +inline int soap_write___tdn__Bye(struct soap *soap, struct __tdn__Bye const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___tdn__Bye(soap, p), 0) || ::soap_put___tdn__Bye(soap, p, "-tdn:Bye", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___tdn__Bye(struct soap *soap, const char *URL, struct __tdn__Bye const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Bye(soap, p), 0) || ::soap_put___tdn__Bye(soap, p, "-tdn:Bye", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___tdn__Bye(struct soap *soap, const char *URL, struct __tdn__Bye const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Bye(soap, p), 0) || ::soap_put___tdn__Bye(soap, p, "-tdn:Bye", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___tdn__Bye(struct soap *soap, const char *URL, struct __tdn__Bye const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Bye(soap, p), 0) || ::soap_put___tdn__Bye(soap, p, "-tdn:Bye", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __tdn__Bye * SOAP_FMAC4 soap_get___tdn__Bye(struct soap*, struct __tdn__Bye *, const char*, const char*); + +inline int soap_read___tdn__Bye(struct soap *soap, struct __tdn__Bye *p) +{ + if (p) + { ::soap_default___tdn__Bye(soap, p); + if (soap_begin_recv(soap) || ::soap_get___tdn__Bye(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___tdn__Bye(struct soap *soap, const char *URL, struct __tdn__Bye *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___tdn__Bye(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___tdn__Bye(struct soap *soap, struct __tdn__Bye *p) +{ + if (::soap_read___tdn__Bye(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___tdn__Hello_DEFINED +#define SOAP_TYPE___tdn__Hello_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___tdn__Hello(struct soap*, struct __tdn__Hello *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___tdn__Hello(struct soap*, const struct __tdn__Hello *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___tdn__Hello(struct soap*, const char*, int, const struct __tdn__Hello *, const char*); +SOAP_FMAC3 struct __tdn__Hello * SOAP_FMAC4 soap_in___tdn__Hello(struct soap*, const char*, struct __tdn__Hello *, const char*); +SOAP_FMAC1 struct __tdn__Hello * SOAP_FMAC2 soap_instantiate___tdn__Hello(struct soap*, int, const char*, const char*, size_t*); + +inline struct __tdn__Hello * soap_new___tdn__Hello(struct soap *soap, int n = -1) +{ + return soap_instantiate___tdn__Hello(soap, n, NULL, NULL, NULL); +} + +inline struct __tdn__Hello * soap_new_req___tdn__Hello( + struct soap *soap, + const struct wsdd__HelloType& tdn__Hello) +{ + struct __tdn__Hello *_p = ::soap_new___tdn__Hello(soap); + if (_p) + { ::soap_default___tdn__Hello(soap, _p); + _p->tdn__Hello = tdn__Hello; + } + return _p; +} + +inline struct __tdn__Hello * soap_new_set___tdn__Hello( + struct soap *soap, + const struct wsdd__HelloType& tdn__Hello) +{ + struct __tdn__Hello *_p = ::soap_new___tdn__Hello(soap); + if (_p) + { ::soap_default___tdn__Hello(soap, _p); + _p->tdn__Hello = tdn__Hello; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___tdn__Hello(struct soap*, const struct __tdn__Hello *, const char*, const char*); + +inline int soap_write___tdn__Hello(struct soap *soap, struct __tdn__Hello const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___tdn__Hello(soap, p), 0) || ::soap_put___tdn__Hello(soap, p, "-tdn:Hello", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___tdn__Hello(struct soap *soap, const char *URL, struct __tdn__Hello const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Hello(soap, p), 0) || ::soap_put___tdn__Hello(soap, p, "-tdn:Hello", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___tdn__Hello(struct soap *soap, const char *URL, struct __tdn__Hello const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Hello(soap, p), 0) || ::soap_put___tdn__Hello(soap, p, "-tdn:Hello", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___tdn__Hello(struct soap *soap, const char *URL, struct __tdn__Hello const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___tdn__Hello(soap, p), 0) || ::soap_put___tdn__Hello(soap, p, "-tdn:Hello", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __tdn__Hello * SOAP_FMAC4 soap_get___tdn__Hello(struct soap*, struct __tdn__Hello *, const char*, const char*); + +inline int soap_read___tdn__Hello(struct soap *soap, struct __tdn__Hello *p) +{ + if (p) + { ::soap_default___tdn__Hello(soap, p); + if (soap_begin_recv(soap) || ::soap_get___tdn__Hello(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___tdn__Hello(struct soap *soap, const char *URL, struct __tdn__Hello *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___tdn__Hello(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___tdn__Hello(struct soap *soap, struct __tdn__Hello *p) +{ + if (::soap_read___tdn__Hello(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___wsdd__ResolveMatches_DEFINED +#define SOAP_TYPE___wsdd__ResolveMatches_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__ResolveMatches(struct soap*, struct __wsdd__ResolveMatches *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__ResolveMatches(struct soap*, const struct __wsdd__ResolveMatches *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__ResolveMatches(struct soap*, const char*, int, const struct __wsdd__ResolveMatches *, const char*); +SOAP_FMAC3 struct __wsdd__ResolveMatches * SOAP_FMAC4 soap_in___wsdd__ResolveMatches(struct soap*, const char*, struct __wsdd__ResolveMatches *, const char*); +SOAP_FMAC1 struct __wsdd__ResolveMatches * SOAP_FMAC2 soap_instantiate___wsdd__ResolveMatches(struct soap*, int, const char*, const char*, size_t*); + +inline struct __wsdd__ResolveMatches * soap_new___wsdd__ResolveMatches(struct soap *soap, int n = -1) +{ + return soap_instantiate___wsdd__ResolveMatches(soap, n, NULL, NULL, NULL); +} + +inline struct __wsdd__ResolveMatches * soap_new_req___wsdd__ResolveMatches( + struct soap *soap) +{ + struct __wsdd__ResolveMatches *_p = ::soap_new___wsdd__ResolveMatches(soap); + if (_p) + { ::soap_default___wsdd__ResolveMatches(soap, _p); + } + return _p; +} + +inline struct __wsdd__ResolveMatches * soap_new_set___wsdd__ResolveMatches( + struct soap *soap, + struct wsdd__ResolveMatchesType *wsdd__ResolveMatches) +{ + struct __wsdd__ResolveMatches *_p = ::soap_new___wsdd__ResolveMatches(soap); + if (_p) + { ::soap_default___wsdd__ResolveMatches(soap, _p); + _p->wsdd__ResolveMatches = wsdd__ResolveMatches; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__ResolveMatches(struct soap*, const struct __wsdd__ResolveMatches *, const char*, const char*); + +inline int soap_write___wsdd__ResolveMatches(struct soap *soap, struct __wsdd__ResolveMatches const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___wsdd__ResolveMatches(soap, p), 0) || ::soap_put___wsdd__ResolveMatches(soap, p, "-wsdd:ResolveMatches", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___wsdd__ResolveMatches(struct soap *soap, const char *URL, struct __wsdd__ResolveMatches const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__ResolveMatches(soap, p), 0) || ::soap_put___wsdd__ResolveMatches(soap, p, "-wsdd:ResolveMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___wsdd__ResolveMatches(struct soap *soap, const char *URL, struct __wsdd__ResolveMatches const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__ResolveMatches(soap, p), 0) || ::soap_put___wsdd__ResolveMatches(soap, p, "-wsdd:ResolveMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___wsdd__ResolveMatches(struct soap *soap, const char *URL, struct __wsdd__ResolveMatches const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__ResolveMatches(soap, p), 0) || ::soap_put___wsdd__ResolveMatches(soap, p, "-wsdd:ResolveMatches", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __wsdd__ResolveMatches * SOAP_FMAC4 soap_get___wsdd__ResolveMatches(struct soap*, struct __wsdd__ResolveMatches *, const char*, const char*); + +inline int soap_read___wsdd__ResolveMatches(struct soap *soap, struct __wsdd__ResolveMatches *p) +{ + if (p) + { ::soap_default___wsdd__ResolveMatches(soap, p); + if (soap_begin_recv(soap) || ::soap_get___wsdd__ResolveMatches(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___wsdd__ResolveMatches(struct soap *soap, const char *URL, struct __wsdd__ResolveMatches *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___wsdd__ResolveMatches(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___wsdd__ResolveMatches(struct soap *soap, struct __wsdd__ResolveMatches *p) +{ + if (::soap_read___wsdd__ResolveMatches(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___wsdd__Resolve_DEFINED +#define SOAP_TYPE___wsdd__Resolve_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Resolve(struct soap*, struct __wsdd__Resolve *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Resolve(struct soap*, const struct __wsdd__Resolve *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Resolve(struct soap*, const char*, int, const struct __wsdd__Resolve *, const char*); +SOAP_FMAC3 struct __wsdd__Resolve * SOAP_FMAC4 soap_in___wsdd__Resolve(struct soap*, const char*, struct __wsdd__Resolve *, const char*); +SOAP_FMAC1 struct __wsdd__Resolve * SOAP_FMAC2 soap_instantiate___wsdd__Resolve(struct soap*, int, const char*, const char*, size_t*); + +inline struct __wsdd__Resolve * soap_new___wsdd__Resolve(struct soap *soap, int n = -1) +{ + return soap_instantiate___wsdd__Resolve(soap, n, NULL, NULL, NULL); +} + +inline struct __wsdd__Resolve * soap_new_req___wsdd__Resolve( + struct soap *soap) +{ + struct __wsdd__Resolve *_p = ::soap_new___wsdd__Resolve(soap); + if (_p) + { ::soap_default___wsdd__Resolve(soap, _p); + } + return _p; +} + +inline struct __wsdd__Resolve * soap_new_set___wsdd__Resolve( + struct soap *soap, + struct wsdd__ResolveType *wsdd__Resolve) +{ + struct __wsdd__Resolve *_p = ::soap_new___wsdd__Resolve(soap); + if (_p) + { ::soap_default___wsdd__Resolve(soap, _p); + _p->wsdd__Resolve = wsdd__Resolve; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Resolve(struct soap*, const struct __wsdd__Resolve *, const char*, const char*); + +inline int soap_write___wsdd__Resolve(struct soap *soap, struct __wsdd__Resolve const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___wsdd__Resolve(soap, p), 0) || ::soap_put___wsdd__Resolve(soap, p, "-wsdd:Resolve", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___wsdd__Resolve(struct soap *soap, const char *URL, struct __wsdd__Resolve const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Resolve(soap, p), 0) || ::soap_put___wsdd__Resolve(soap, p, "-wsdd:Resolve", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___wsdd__Resolve(struct soap *soap, const char *URL, struct __wsdd__Resolve const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Resolve(soap, p), 0) || ::soap_put___wsdd__Resolve(soap, p, "-wsdd:Resolve", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___wsdd__Resolve(struct soap *soap, const char *URL, struct __wsdd__Resolve const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Resolve(soap, p), 0) || ::soap_put___wsdd__Resolve(soap, p, "-wsdd:Resolve", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __wsdd__Resolve * SOAP_FMAC4 soap_get___wsdd__Resolve(struct soap*, struct __wsdd__Resolve *, const char*, const char*); + +inline int soap_read___wsdd__Resolve(struct soap *soap, struct __wsdd__Resolve *p) +{ + if (p) + { ::soap_default___wsdd__Resolve(soap, p); + if (soap_begin_recv(soap) || ::soap_get___wsdd__Resolve(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___wsdd__Resolve(struct soap *soap, const char *URL, struct __wsdd__Resolve *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___wsdd__Resolve(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___wsdd__Resolve(struct soap *soap, struct __wsdd__Resolve *p) +{ + if (::soap_read___wsdd__Resolve(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___wsdd__ProbeMatches_DEFINED +#define SOAP_TYPE___wsdd__ProbeMatches_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__ProbeMatches(struct soap*, struct __wsdd__ProbeMatches *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__ProbeMatches(struct soap*, const struct __wsdd__ProbeMatches *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__ProbeMatches(struct soap*, const char*, int, const struct __wsdd__ProbeMatches *, const char*); +SOAP_FMAC3 struct __wsdd__ProbeMatches * SOAP_FMAC4 soap_in___wsdd__ProbeMatches(struct soap*, const char*, struct __wsdd__ProbeMatches *, const char*); +SOAP_FMAC1 struct __wsdd__ProbeMatches * SOAP_FMAC2 soap_instantiate___wsdd__ProbeMatches(struct soap*, int, const char*, const char*, size_t*); + +inline struct __wsdd__ProbeMatches * soap_new___wsdd__ProbeMatches(struct soap *soap, int n = -1) +{ + return soap_instantiate___wsdd__ProbeMatches(soap, n, NULL, NULL, NULL); +} + +inline struct __wsdd__ProbeMatches * soap_new_req___wsdd__ProbeMatches( + struct soap *soap) +{ + struct __wsdd__ProbeMatches *_p = ::soap_new___wsdd__ProbeMatches(soap); + if (_p) + { ::soap_default___wsdd__ProbeMatches(soap, _p); + } + return _p; +} + +inline struct __wsdd__ProbeMatches * soap_new_set___wsdd__ProbeMatches( + struct soap *soap, + struct wsdd__ProbeMatchesType *wsdd__ProbeMatches) +{ + struct __wsdd__ProbeMatches *_p = ::soap_new___wsdd__ProbeMatches(soap); + if (_p) + { ::soap_default___wsdd__ProbeMatches(soap, _p); + _p->wsdd__ProbeMatches = wsdd__ProbeMatches; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__ProbeMatches(struct soap*, const struct __wsdd__ProbeMatches *, const char*, const char*); + +inline int soap_write___wsdd__ProbeMatches(struct soap *soap, struct __wsdd__ProbeMatches const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___wsdd__ProbeMatches(soap, p), 0) || ::soap_put___wsdd__ProbeMatches(soap, p, "-wsdd:ProbeMatches", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___wsdd__ProbeMatches(struct soap *soap, const char *URL, struct __wsdd__ProbeMatches const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__ProbeMatches(soap, p), 0) || ::soap_put___wsdd__ProbeMatches(soap, p, "-wsdd:ProbeMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___wsdd__ProbeMatches(struct soap *soap, const char *URL, struct __wsdd__ProbeMatches const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__ProbeMatches(soap, p), 0) || ::soap_put___wsdd__ProbeMatches(soap, p, "-wsdd:ProbeMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___wsdd__ProbeMatches(struct soap *soap, const char *URL, struct __wsdd__ProbeMatches const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__ProbeMatches(soap, p), 0) || ::soap_put___wsdd__ProbeMatches(soap, p, "-wsdd:ProbeMatches", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __wsdd__ProbeMatches * SOAP_FMAC4 soap_get___wsdd__ProbeMatches(struct soap*, struct __wsdd__ProbeMatches *, const char*, const char*); + +inline int soap_read___wsdd__ProbeMatches(struct soap *soap, struct __wsdd__ProbeMatches *p) +{ + if (p) + { ::soap_default___wsdd__ProbeMatches(soap, p); + if (soap_begin_recv(soap) || ::soap_get___wsdd__ProbeMatches(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___wsdd__ProbeMatches(struct soap *soap, const char *URL, struct __wsdd__ProbeMatches *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___wsdd__ProbeMatches(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___wsdd__ProbeMatches(struct soap *soap, struct __wsdd__ProbeMatches *p) +{ + if (::soap_read___wsdd__ProbeMatches(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___wsdd__Probe_DEFINED +#define SOAP_TYPE___wsdd__Probe_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Probe(struct soap*, struct __wsdd__Probe *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Probe(struct soap*, const struct __wsdd__Probe *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Probe(struct soap*, const char*, int, const struct __wsdd__Probe *, const char*); +SOAP_FMAC3 struct __wsdd__Probe * SOAP_FMAC4 soap_in___wsdd__Probe(struct soap*, const char*, struct __wsdd__Probe *, const char*); +SOAP_FMAC1 struct __wsdd__Probe * SOAP_FMAC2 soap_instantiate___wsdd__Probe(struct soap*, int, const char*, const char*, size_t*); + +inline struct __wsdd__Probe * soap_new___wsdd__Probe(struct soap *soap, int n = -1) +{ + return soap_instantiate___wsdd__Probe(soap, n, NULL, NULL, NULL); +} + +inline struct __wsdd__Probe * soap_new_req___wsdd__Probe( + struct soap *soap) +{ + struct __wsdd__Probe *_p = ::soap_new___wsdd__Probe(soap); + if (_p) + { ::soap_default___wsdd__Probe(soap, _p); + } + return _p; +} + +inline struct __wsdd__Probe * soap_new_set___wsdd__Probe( + struct soap *soap, + struct wsdd__ProbeType *wsdd__Probe) +{ + struct __wsdd__Probe *_p = ::soap_new___wsdd__Probe(soap); + if (_p) + { ::soap_default___wsdd__Probe(soap, _p); + _p->wsdd__Probe = wsdd__Probe; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Probe(struct soap*, const struct __wsdd__Probe *, const char*, const char*); + +inline int soap_write___wsdd__Probe(struct soap *soap, struct __wsdd__Probe const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___wsdd__Probe(soap, p), 0) || ::soap_put___wsdd__Probe(soap, p, "-wsdd:Probe", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___wsdd__Probe(struct soap *soap, const char *URL, struct __wsdd__Probe const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Probe(soap, p), 0) || ::soap_put___wsdd__Probe(soap, p, "-wsdd:Probe", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___wsdd__Probe(struct soap *soap, const char *URL, struct __wsdd__Probe const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Probe(soap, p), 0) || ::soap_put___wsdd__Probe(soap, p, "-wsdd:Probe", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___wsdd__Probe(struct soap *soap, const char *URL, struct __wsdd__Probe const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Probe(soap, p), 0) || ::soap_put___wsdd__Probe(soap, p, "-wsdd:Probe", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __wsdd__Probe * SOAP_FMAC4 soap_get___wsdd__Probe(struct soap*, struct __wsdd__Probe *, const char*, const char*); + +inline int soap_read___wsdd__Probe(struct soap *soap, struct __wsdd__Probe *p) +{ + if (p) + { ::soap_default___wsdd__Probe(soap, p); + if (soap_begin_recv(soap) || ::soap_get___wsdd__Probe(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___wsdd__Probe(struct soap *soap, const char *URL, struct __wsdd__Probe *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___wsdd__Probe(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___wsdd__Probe(struct soap *soap, struct __wsdd__Probe *p) +{ + if (::soap_read___wsdd__Probe(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___wsdd__Bye_DEFINED +#define SOAP_TYPE___wsdd__Bye_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Bye(struct soap*, struct __wsdd__Bye *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Bye(struct soap*, const struct __wsdd__Bye *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Bye(struct soap*, const char*, int, const struct __wsdd__Bye *, const char*); +SOAP_FMAC3 struct __wsdd__Bye * SOAP_FMAC4 soap_in___wsdd__Bye(struct soap*, const char*, struct __wsdd__Bye *, const char*); +SOAP_FMAC1 struct __wsdd__Bye * SOAP_FMAC2 soap_instantiate___wsdd__Bye(struct soap*, int, const char*, const char*, size_t*); + +inline struct __wsdd__Bye * soap_new___wsdd__Bye(struct soap *soap, int n = -1) +{ + return soap_instantiate___wsdd__Bye(soap, n, NULL, NULL, NULL); +} + +inline struct __wsdd__Bye * soap_new_req___wsdd__Bye( + struct soap *soap) +{ + struct __wsdd__Bye *_p = ::soap_new___wsdd__Bye(soap); + if (_p) + { ::soap_default___wsdd__Bye(soap, _p); + } + return _p; +} + +inline struct __wsdd__Bye * soap_new_set___wsdd__Bye( + struct soap *soap, + struct wsdd__ByeType *wsdd__Bye) +{ + struct __wsdd__Bye *_p = ::soap_new___wsdd__Bye(soap); + if (_p) + { ::soap_default___wsdd__Bye(soap, _p); + _p->wsdd__Bye = wsdd__Bye; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Bye(struct soap*, const struct __wsdd__Bye *, const char*, const char*); + +inline int soap_write___wsdd__Bye(struct soap *soap, struct __wsdd__Bye const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___wsdd__Bye(soap, p), 0) || ::soap_put___wsdd__Bye(soap, p, "-wsdd:Bye", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___wsdd__Bye(struct soap *soap, const char *URL, struct __wsdd__Bye const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Bye(soap, p), 0) || ::soap_put___wsdd__Bye(soap, p, "-wsdd:Bye", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___wsdd__Bye(struct soap *soap, const char *URL, struct __wsdd__Bye const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Bye(soap, p), 0) || ::soap_put___wsdd__Bye(soap, p, "-wsdd:Bye", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___wsdd__Bye(struct soap *soap, const char *URL, struct __wsdd__Bye const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Bye(soap, p), 0) || ::soap_put___wsdd__Bye(soap, p, "-wsdd:Bye", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __wsdd__Bye * SOAP_FMAC4 soap_get___wsdd__Bye(struct soap*, struct __wsdd__Bye *, const char*, const char*); + +inline int soap_read___wsdd__Bye(struct soap *soap, struct __wsdd__Bye *p) +{ + if (p) + { ::soap_default___wsdd__Bye(soap, p); + if (soap_begin_recv(soap) || ::soap_get___wsdd__Bye(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___wsdd__Bye(struct soap *soap, const char *URL, struct __wsdd__Bye *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___wsdd__Bye(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___wsdd__Bye(struct soap *soap, struct __wsdd__Bye *p) +{ + if (::soap_read___wsdd__Bye(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE___wsdd__Hello_DEFINED +#define SOAP_TYPE___wsdd__Hello_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default___wsdd__Hello(struct soap*, struct __wsdd__Hello *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize___wsdd__Hello(struct soap*, const struct __wsdd__Hello *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out___wsdd__Hello(struct soap*, const char*, int, const struct __wsdd__Hello *, const char*); +SOAP_FMAC3 struct __wsdd__Hello * SOAP_FMAC4 soap_in___wsdd__Hello(struct soap*, const char*, struct __wsdd__Hello *, const char*); +SOAP_FMAC1 struct __wsdd__Hello * SOAP_FMAC2 soap_instantiate___wsdd__Hello(struct soap*, int, const char*, const char*, size_t*); + +inline struct __wsdd__Hello * soap_new___wsdd__Hello(struct soap *soap, int n = -1) +{ + return soap_instantiate___wsdd__Hello(soap, n, NULL, NULL, NULL); +} + +inline struct __wsdd__Hello * soap_new_req___wsdd__Hello( + struct soap *soap) +{ + struct __wsdd__Hello *_p = ::soap_new___wsdd__Hello(soap); + if (_p) + { ::soap_default___wsdd__Hello(soap, _p); + } + return _p; +} + +inline struct __wsdd__Hello * soap_new_set___wsdd__Hello( + struct soap *soap, + struct wsdd__HelloType *wsdd__Hello) +{ + struct __wsdd__Hello *_p = ::soap_new___wsdd__Hello(soap); + if (_p) + { ::soap_default___wsdd__Hello(soap, _p); + _p->wsdd__Hello = wsdd__Hello; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put___wsdd__Hello(struct soap*, const struct __wsdd__Hello *, const char*, const char*); + +inline int soap_write___wsdd__Hello(struct soap *soap, struct __wsdd__Hello const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize___wsdd__Hello(soap, p), 0) || ::soap_put___wsdd__Hello(soap, p, "-wsdd:Hello", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT___wsdd__Hello(struct soap *soap, const char *URL, struct __wsdd__Hello const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Hello(soap, p), 0) || ::soap_put___wsdd__Hello(soap, p, "-wsdd:Hello", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH___wsdd__Hello(struct soap *soap, const char *URL, struct __wsdd__Hello const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Hello(soap, p), 0) || ::soap_put___wsdd__Hello(soap, p, "-wsdd:Hello", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send___wsdd__Hello(struct soap *soap, const char *URL, struct __wsdd__Hello const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize___wsdd__Hello(soap, p), 0) || ::soap_put___wsdd__Hello(soap, p, "-wsdd:Hello", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct __wsdd__Hello * SOAP_FMAC4 soap_get___wsdd__Hello(struct soap*, struct __wsdd__Hello *, const char*, const char*); + +inline int soap_read___wsdd__Hello(struct soap *soap, struct __wsdd__Hello *p) +{ + if (p) + { ::soap_default___wsdd__Hello(soap, p); + if (soap_begin_recv(soap) || ::soap_get___wsdd__Hello(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET___wsdd__Hello(struct soap *soap, const char *URL, struct __wsdd__Hello *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read___wsdd__Hello(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv___wsdd__Hello(struct soap *soap, struct __wsdd__Hello *p) +{ + if (::soap_read___wsdd__Hello(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif +/* _wsdd__AppSequence is a typedef synonym of wsdd__AppSequenceType */ + +#ifndef SOAP_TYPE__wsdd__AppSequence_DEFINED +#define SOAP_TYPE__wsdd__AppSequence_DEFINED + +#define soap_default__wsdd__AppSequence soap_default_wsdd__AppSequenceType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__AppSequenceType(struct soap*, const struct wsdd__AppSequenceType *); + +#define soap_serialize__wsdd__AppSequence soap_serialize_wsdd__AppSequenceType + + +#define soap__wsdd__AppSequence2s soap_wsdd__AppSequenceType2s + + +#define soap_out__wsdd__AppSequence soap_out_wsdd__AppSequenceType + + +#define soap_s2_wsdd__AppSequence soap_s2wsdd__AppSequenceType + + +#define soap_in__wsdd__AppSequence soap_in_wsdd__AppSequenceType + + +#define soap_instantiate__wsdd__AppSequence soap_instantiate_wsdd__AppSequenceType + + +#define soap_new__wsdd__AppSequence soap_new_wsdd__AppSequenceType + + +#define soap_new_req__wsdd__AppSequence soap_new_req_wsdd__AppSequenceType + + +#define soap_new_set__wsdd__AppSequence soap_new_set_wsdd__AppSequenceType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__AppSequence(struct soap*, const struct wsdd__AppSequenceType *, const char*, const char*); + +inline int soap_write__wsdd__AppSequence(struct soap *soap, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__AppSequence(soap, p), 0) || ::soap_put__wsdd__AppSequence(soap, p, "wsdd:AppSequence", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__AppSequence(struct soap *soap, const char *URL, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__AppSequence(soap, p), 0) || ::soap_put__wsdd__AppSequence(soap, p, "wsdd:AppSequence", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__AppSequence(struct soap *soap, const char *URL, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__AppSequence(soap, p), 0) || ::soap_put__wsdd__AppSequence(soap, p, "wsdd:AppSequence", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__AppSequence(struct soap *soap, const char *URL, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__AppSequence(soap, p), 0) || ::soap_put__wsdd__AppSequence(soap, p, "wsdd:AppSequence", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__AppSequence soap_get_wsdd__AppSequenceType + + +#define soap_read__wsdd__AppSequence soap_read_wsdd__AppSequenceType + + +#define soap_GET__wsdd__AppSequence soap_GET_wsdd__AppSequenceType + + +#define soap_POST_recv__wsdd__AppSequence soap_POST_recv_wsdd__AppSequenceType + +#endif +/* _wsdd__Sig is a typedef synonym of wsdd__SigType */ + +#ifndef SOAP_TYPE__wsdd__Sig_DEFINED +#define SOAP_TYPE__wsdd__Sig_DEFINED + +#define soap_default__wsdd__Sig soap_default_wsdd__SigType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__SigType(struct soap*, const struct wsdd__SigType *); + +#define soap_serialize__wsdd__Sig soap_serialize_wsdd__SigType + + +#define soap__wsdd__Sig2s soap_wsdd__SigType2s + + +#define soap_out__wsdd__Sig soap_out_wsdd__SigType + + +#define soap_s2_wsdd__Sig soap_s2wsdd__SigType + + +#define soap_in__wsdd__Sig soap_in_wsdd__SigType + + +#define soap_instantiate__wsdd__Sig soap_instantiate_wsdd__SigType + + +#define soap_new__wsdd__Sig soap_new_wsdd__SigType + + +#define soap_new_req__wsdd__Sig soap_new_req_wsdd__SigType + + +#define soap_new_set__wsdd__Sig soap_new_set_wsdd__SigType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Sig(struct soap*, const struct wsdd__SigType *, const char*, const char*); + +inline int soap_write__wsdd__Sig(struct soap *soap, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__Sig(soap, p), 0) || ::soap_put__wsdd__Sig(soap, p, "wsdd:Sig", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Sig(struct soap *soap, const char *URL, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Sig(soap, p), 0) || ::soap_put__wsdd__Sig(soap, p, "wsdd:Sig", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Sig(struct soap *soap, const char *URL, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Sig(soap, p), 0) || ::soap_put__wsdd__Sig(soap, p, "wsdd:Sig", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Sig(struct soap *soap, const char *URL, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Sig(soap, p), 0) || ::soap_put__wsdd__Sig(soap, p, "wsdd:Sig", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Sig soap_get_wsdd__SigType + + +#define soap_read__wsdd__Sig soap_read_wsdd__SigType + + +#define soap_GET__wsdd__Sig soap_GET_wsdd__SigType + + +#define soap_POST_recv__wsdd__Sig soap_POST_recv_wsdd__SigType + +#endif +/* _wsdd__Security is a typedef synonym of wsdd__SecurityType */ + +#ifndef SOAP_TYPE__wsdd__Security_DEFINED +#define SOAP_TYPE__wsdd__Security_DEFINED + +#define soap_default__wsdd__Security soap_default_wsdd__SecurityType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__SecurityType(struct soap*, const struct wsdd__SecurityType *); + +#define soap_serialize__wsdd__Security soap_serialize_wsdd__SecurityType + + +#define soap__wsdd__Security2s soap_wsdd__SecurityType2s + + +#define soap_out__wsdd__Security soap_out_wsdd__SecurityType + + +#define soap_s2_wsdd__Security soap_s2wsdd__SecurityType + + +#define soap_in__wsdd__Security soap_in_wsdd__SecurityType + + +#define soap_instantiate__wsdd__Security soap_instantiate_wsdd__SecurityType + + +#define soap_new__wsdd__Security soap_new_wsdd__SecurityType + + +#define soap_new_req__wsdd__Security soap_new_req_wsdd__SecurityType + + +#define soap_new_set__wsdd__Security soap_new_set_wsdd__SecurityType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Security(struct soap*, const struct wsdd__SecurityType *, const char*, const char*); + +inline int soap_write__wsdd__Security(struct soap *soap, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__Security(soap, p), 0) || ::soap_put__wsdd__Security(soap, p, "wsdd:Security", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Security(struct soap *soap, const char *URL, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Security(soap, p), 0) || ::soap_put__wsdd__Security(soap, p, "wsdd:Security", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Security(struct soap *soap, const char *URL, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Security(soap, p), 0) || ::soap_put__wsdd__Security(soap, p, "wsdd:Security", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Security(struct soap *soap, const char *URL, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Security(soap, p), 0) || ::soap_put__wsdd__Security(soap, p, "wsdd:Security", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Security soap_get_wsdd__SecurityType + + +#define soap_read__wsdd__Security soap_read_wsdd__SecurityType + + +#define soap_GET__wsdd__Security soap_GET_wsdd__SecurityType + + +#define soap_POST_recv__wsdd__Security soap_POST_recv_wsdd__SecurityType + +#endif +/* _wsdd__Scopes is a typedef synonym of wsdd__ScopesType */ + +#ifndef SOAP_TYPE__wsdd__Scopes_DEFINED +#define SOAP_TYPE__wsdd__Scopes_DEFINED + +#define soap_default__wsdd__Scopes soap_default_wsdd__ScopesType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ScopesType(struct soap*, const struct wsdd__ScopesType *); + +#define soap_serialize__wsdd__Scopes soap_serialize_wsdd__ScopesType + + +#define soap__wsdd__Scopes2s soap_wsdd__ScopesType2s + + +#define soap_out__wsdd__Scopes soap_out_wsdd__ScopesType + + +#define soap_s2_wsdd__Scopes soap_s2wsdd__ScopesType + + +#define soap_in__wsdd__Scopes soap_in_wsdd__ScopesType + + +#define soap_instantiate__wsdd__Scopes soap_instantiate_wsdd__ScopesType + + +#define soap_new__wsdd__Scopes soap_new_wsdd__ScopesType + + +#define soap_new_req__wsdd__Scopes soap_new_req_wsdd__ScopesType + + +#define soap_new_set__wsdd__Scopes soap_new_set_wsdd__ScopesType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Scopes(struct soap*, const struct wsdd__ScopesType *, const char*, const char*); + +inline int soap_write__wsdd__Scopes(struct soap *soap, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__Scopes(soap, p), 0) || ::soap_put__wsdd__Scopes(soap, p, "wsdd:Scopes", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Scopes(struct soap *soap, const char *URL, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Scopes(soap, p), 0) || ::soap_put__wsdd__Scopes(soap, p, "wsdd:Scopes", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Scopes(struct soap *soap, const char *URL, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Scopes(soap, p), 0) || ::soap_put__wsdd__Scopes(soap, p, "wsdd:Scopes", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Scopes(struct soap *soap, const char *URL, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Scopes(soap, p), 0) || ::soap_put__wsdd__Scopes(soap, p, "wsdd:Scopes", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Scopes soap_get_wsdd__ScopesType + + +#define soap_read__wsdd__Scopes soap_read_wsdd__ScopesType + + +#define soap_GET__wsdd__Scopes soap_GET_wsdd__ScopesType + + +#define soap_POST_recv__wsdd__Scopes soap_POST_recv_wsdd__ScopesType + +#endif +/* _wsdd__ResolveMatches is a typedef synonym of wsdd__ResolveMatchesType */ + +#ifndef SOAP_TYPE__wsdd__ResolveMatches_DEFINED +#define SOAP_TYPE__wsdd__ResolveMatches_DEFINED + +#define soap_default__wsdd__ResolveMatches soap_default_wsdd__ResolveMatchesType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveMatchesType(struct soap*, const struct wsdd__ResolveMatchesType *); + +#define soap_serialize__wsdd__ResolveMatches soap_serialize_wsdd__ResolveMatchesType + + +#define soap__wsdd__ResolveMatches2s soap_wsdd__ResolveMatchesType2s + + +#define soap_out__wsdd__ResolveMatches soap_out_wsdd__ResolveMatchesType + + +#define soap_s2_wsdd__ResolveMatches soap_s2wsdd__ResolveMatchesType + + +#define soap_in__wsdd__ResolveMatches soap_in_wsdd__ResolveMatchesType + + +#define soap_instantiate__wsdd__ResolveMatches soap_instantiate_wsdd__ResolveMatchesType + + +#define soap_new__wsdd__ResolveMatches soap_new_wsdd__ResolveMatchesType + + +#define soap_new_req__wsdd__ResolveMatches soap_new_req_wsdd__ResolveMatchesType + + +#define soap_new_set__wsdd__ResolveMatches soap_new_set_wsdd__ResolveMatchesType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__ResolveMatches(struct soap*, const struct wsdd__ResolveMatchesType *, const char*, const char*); + +inline int soap_write__wsdd__ResolveMatches(struct soap *soap, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__ResolveMatches(soap, p), 0) || ::soap_put__wsdd__ResolveMatches(soap, p, "wsdd:ResolveMatches", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__ResolveMatches(struct soap *soap, const char *URL, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__ResolveMatches(soap, p), 0) || ::soap_put__wsdd__ResolveMatches(soap, p, "wsdd:ResolveMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__ResolveMatches(struct soap *soap, const char *URL, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__ResolveMatches(soap, p), 0) || ::soap_put__wsdd__ResolveMatches(soap, p, "wsdd:ResolveMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__ResolveMatches(struct soap *soap, const char *URL, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__ResolveMatches(soap, p), 0) || ::soap_put__wsdd__ResolveMatches(soap, p, "wsdd:ResolveMatches", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__ResolveMatches soap_get_wsdd__ResolveMatchesType + + +#define soap_read__wsdd__ResolveMatches soap_read_wsdd__ResolveMatchesType + + +#define soap_GET__wsdd__ResolveMatches soap_GET_wsdd__ResolveMatchesType + + +#define soap_POST_recv__wsdd__ResolveMatches soap_POST_recv_wsdd__ResolveMatchesType + +#endif +/* _wsdd__Resolve is a typedef synonym of wsdd__ResolveType */ + +#ifndef SOAP_TYPE__wsdd__Resolve_DEFINED +#define SOAP_TYPE__wsdd__Resolve_DEFINED + +#define soap_default__wsdd__Resolve soap_default_wsdd__ResolveType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveType(struct soap*, const struct wsdd__ResolveType *); + +#define soap_serialize__wsdd__Resolve soap_serialize_wsdd__ResolveType + + +#define soap__wsdd__Resolve2s soap_wsdd__ResolveType2s + + +#define soap_out__wsdd__Resolve soap_out_wsdd__ResolveType + + +#define soap_s2_wsdd__Resolve soap_s2wsdd__ResolveType + + +#define soap_in__wsdd__Resolve soap_in_wsdd__ResolveType + + +#define soap_instantiate__wsdd__Resolve soap_instantiate_wsdd__ResolveType + + +#define soap_new__wsdd__Resolve soap_new_wsdd__ResolveType + + +#define soap_new_req__wsdd__Resolve soap_new_req_wsdd__ResolveType + + +#define soap_new_set__wsdd__Resolve soap_new_set_wsdd__ResolveType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Resolve(struct soap*, const struct wsdd__ResolveType *, const char*, const char*); + +inline int soap_write__wsdd__Resolve(struct soap *soap, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__Resolve(soap, p), 0) || ::soap_put__wsdd__Resolve(soap, p, "wsdd:Resolve", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Resolve(struct soap *soap, const char *URL, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Resolve(soap, p), 0) || ::soap_put__wsdd__Resolve(soap, p, "wsdd:Resolve", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Resolve(struct soap *soap, const char *URL, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Resolve(soap, p), 0) || ::soap_put__wsdd__Resolve(soap, p, "wsdd:Resolve", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Resolve(struct soap *soap, const char *URL, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Resolve(soap, p), 0) || ::soap_put__wsdd__Resolve(soap, p, "wsdd:Resolve", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Resolve soap_get_wsdd__ResolveType + + +#define soap_read__wsdd__Resolve soap_read_wsdd__ResolveType + + +#define soap_GET__wsdd__Resolve soap_GET_wsdd__ResolveType + + +#define soap_POST_recv__wsdd__Resolve soap_POST_recv_wsdd__ResolveType + +#endif +/* _wsdd__ProbeMatches is a typedef synonym of wsdd__ProbeMatchesType */ + +#ifndef SOAP_TYPE__wsdd__ProbeMatches_DEFINED +#define SOAP_TYPE__wsdd__ProbeMatches_DEFINED + +#define soap_default__wsdd__ProbeMatches soap_default_wsdd__ProbeMatchesType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeMatchesType(struct soap*, const struct wsdd__ProbeMatchesType *); + +#define soap_serialize__wsdd__ProbeMatches soap_serialize_wsdd__ProbeMatchesType + + +#define soap__wsdd__ProbeMatches2s soap_wsdd__ProbeMatchesType2s + + +#define soap_out__wsdd__ProbeMatches soap_out_wsdd__ProbeMatchesType + + +#define soap_s2_wsdd__ProbeMatches soap_s2wsdd__ProbeMatchesType + + +#define soap_in__wsdd__ProbeMatches soap_in_wsdd__ProbeMatchesType + + +#define soap_instantiate__wsdd__ProbeMatches soap_instantiate_wsdd__ProbeMatchesType + + +#define soap_new__wsdd__ProbeMatches soap_new_wsdd__ProbeMatchesType + + +#define soap_new_req__wsdd__ProbeMatches soap_new_req_wsdd__ProbeMatchesType + + +#define soap_new_set__wsdd__ProbeMatches soap_new_set_wsdd__ProbeMatchesType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__ProbeMatches(struct soap*, const struct wsdd__ProbeMatchesType *, const char*, const char*); + +inline int soap_write__wsdd__ProbeMatches(struct soap *soap, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__ProbeMatches(soap, p), 0) || ::soap_put__wsdd__ProbeMatches(soap, p, "wsdd:ProbeMatches", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__ProbeMatches(struct soap *soap, const char *URL, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__ProbeMatches(soap, p), 0) || ::soap_put__wsdd__ProbeMatches(soap, p, "wsdd:ProbeMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__ProbeMatches(struct soap *soap, const char *URL, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__ProbeMatches(soap, p), 0) || ::soap_put__wsdd__ProbeMatches(soap, p, "wsdd:ProbeMatches", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__ProbeMatches(struct soap *soap, const char *URL, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__ProbeMatches(soap, p), 0) || ::soap_put__wsdd__ProbeMatches(soap, p, "wsdd:ProbeMatches", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__ProbeMatches soap_get_wsdd__ProbeMatchesType + + +#define soap_read__wsdd__ProbeMatches soap_read_wsdd__ProbeMatchesType + + +#define soap_GET__wsdd__ProbeMatches soap_GET_wsdd__ProbeMatchesType + + +#define soap_POST_recv__wsdd__ProbeMatches soap_POST_recv_wsdd__ProbeMatchesType + +#endif +/* _wsdd__Probe is a typedef synonym of wsdd__ProbeType */ + +#ifndef SOAP_TYPE__wsdd__Probe_DEFINED +#define SOAP_TYPE__wsdd__Probe_DEFINED + +#define soap_default__wsdd__Probe soap_default_wsdd__ProbeType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeType(struct soap*, const struct wsdd__ProbeType *); + +#define soap_serialize__wsdd__Probe soap_serialize_wsdd__ProbeType + + +#define soap__wsdd__Probe2s soap_wsdd__ProbeType2s + + +#define soap_out__wsdd__Probe soap_out_wsdd__ProbeType + + +#define soap_s2_wsdd__Probe soap_s2wsdd__ProbeType + + +#define soap_in__wsdd__Probe soap_in_wsdd__ProbeType + + +#define soap_instantiate__wsdd__Probe soap_instantiate_wsdd__ProbeType + + +#define soap_new__wsdd__Probe soap_new_wsdd__ProbeType + + +#define soap_new_req__wsdd__Probe soap_new_req_wsdd__ProbeType + + +#define soap_new_set__wsdd__Probe soap_new_set_wsdd__ProbeType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Probe(struct soap*, const struct wsdd__ProbeType *, const char*, const char*); + +inline int soap_write__wsdd__Probe(struct soap *soap, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__Probe(soap, p), 0) || ::soap_put__wsdd__Probe(soap, p, "wsdd:Probe", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Probe(struct soap *soap, const char *URL, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Probe(soap, p), 0) || ::soap_put__wsdd__Probe(soap, p, "wsdd:Probe", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Probe(struct soap *soap, const char *URL, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Probe(soap, p), 0) || ::soap_put__wsdd__Probe(soap, p, "wsdd:Probe", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Probe(struct soap *soap, const char *URL, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Probe(soap, p), 0) || ::soap_put__wsdd__Probe(soap, p, "wsdd:Probe", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Probe soap_get_wsdd__ProbeType + + +#define soap_read__wsdd__Probe soap_read_wsdd__ProbeType + + +#define soap_GET__wsdd__Probe soap_GET_wsdd__ProbeType + + +#define soap_POST_recv__wsdd__Probe soap_POST_recv_wsdd__ProbeType + +#endif +/* _wsdd__Bye is a typedef synonym of wsdd__ByeType */ + +#ifndef SOAP_TYPE__wsdd__Bye_DEFINED +#define SOAP_TYPE__wsdd__Bye_DEFINED + +#define soap_default__wsdd__Bye soap_default_wsdd__ByeType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ByeType(struct soap*, const struct wsdd__ByeType *); + +#define soap_serialize__wsdd__Bye soap_serialize_wsdd__ByeType + + +#define soap__wsdd__Bye2s soap_wsdd__ByeType2s + + +#define soap_out__wsdd__Bye soap_out_wsdd__ByeType + + +#define soap_s2_wsdd__Bye soap_s2wsdd__ByeType + + +#define soap_in__wsdd__Bye soap_in_wsdd__ByeType + + +#define soap_instantiate__wsdd__Bye soap_instantiate_wsdd__ByeType + + +#define soap_new__wsdd__Bye soap_new_wsdd__ByeType + + +#define soap_new_req__wsdd__Bye soap_new_req_wsdd__ByeType + + +#define soap_new_set__wsdd__Bye soap_new_set_wsdd__ByeType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Bye(struct soap*, const struct wsdd__ByeType *, const char*, const char*); + +inline int soap_write__wsdd__Bye(struct soap *soap, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__Bye(soap, p), 0) || ::soap_put__wsdd__Bye(soap, p, "wsdd:Bye", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Bye(struct soap *soap, const char *URL, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Bye(soap, p), 0) || ::soap_put__wsdd__Bye(soap, p, "wsdd:Bye", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Bye(struct soap *soap, const char *URL, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Bye(soap, p), 0) || ::soap_put__wsdd__Bye(soap, p, "wsdd:Bye", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Bye(struct soap *soap, const char *URL, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Bye(soap, p), 0) || ::soap_put__wsdd__Bye(soap, p, "wsdd:Bye", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Bye soap_get_wsdd__ByeType + + +#define soap_read__wsdd__Bye soap_read_wsdd__ByeType + + +#define soap_GET__wsdd__Bye soap_GET_wsdd__ByeType + + +#define soap_POST_recv__wsdd__Bye soap_POST_recv_wsdd__ByeType + +#endif +/* _wsdd__Hello is a typedef synonym of wsdd__HelloType */ + +#ifndef SOAP_TYPE__wsdd__Hello_DEFINED +#define SOAP_TYPE__wsdd__Hello_DEFINED + +#define soap_default__wsdd__Hello soap_default_wsdd__HelloType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__HelloType(struct soap*, const struct wsdd__HelloType *); + +#define soap_serialize__wsdd__Hello soap_serialize_wsdd__HelloType + + +#define soap__wsdd__Hello2s soap_wsdd__HelloType2s + + +#define soap_out__wsdd__Hello soap_out_wsdd__HelloType + + +#define soap_s2_wsdd__Hello soap_s2wsdd__HelloType + + +#define soap_in__wsdd__Hello soap_in_wsdd__HelloType + + +#define soap_instantiate__wsdd__Hello soap_instantiate_wsdd__HelloType + + +#define soap_new__wsdd__Hello soap_new_wsdd__HelloType + + +#define soap_new_req__wsdd__Hello soap_new_req_wsdd__HelloType + + +#define soap_new_set__wsdd__Hello soap_new_set_wsdd__HelloType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Hello(struct soap*, const struct wsdd__HelloType *, const char*, const char*); + +inline int soap_write__wsdd__Hello(struct soap *soap, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsdd__Hello(soap, p), 0) || ::soap_put__wsdd__Hello(soap, p, "wsdd:Hello", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Hello(struct soap *soap, const char *URL, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Hello(soap, p), 0) || ::soap_put__wsdd__Hello(soap, p, "wsdd:Hello", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Hello(struct soap *soap, const char *URL, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Hello(soap, p), 0) || ::soap_put__wsdd__Hello(soap, p, "wsdd:Hello", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Hello(struct soap *soap, const char *URL, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsdd__Hello(soap, p), 0) || ::soap_put__wsdd__Hello(soap, p, "wsdd:Hello", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Hello soap_get_wsdd__HelloType + + +#define soap_read__wsdd__Hello soap_read_wsdd__HelloType + + +#define soap_GET__wsdd__Hello soap_GET_wsdd__HelloType + + +#define soap_POST_recv__wsdd__Hello soap_POST_recv_wsdd__HelloType + +#endif + +#ifndef SOAP_TYPE_wsdd__AppSequenceType_DEFINED +#define SOAP_TYPE_wsdd__AppSequenceType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__AppSequenceType(struct soap*, struct wsdd__AppSequenceType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__AppSequenceType(struct soap*, const struct wsdd__AppSequenceType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__AppSequenceType(struct soap*, const char*, int, const struct wsdd__AppSequenceType *, const char*); +SOAP_FMAC3 struct wsdd__AppSequenceType * SOAP_FMAC4 soap_in_wsdd__AppSequenceType(struct soap*, const char*, struct wsdd__AppSequenceType *, const char*); +SOAP_FMAC1 struct wsdd__AppSequenceType * SOAP_FMAC2 soap_instantiate_wsdd__AppSequenceType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__AppSequenceType * soap_new_wsdd__AppSequenceType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__AppSequenceType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__AppSequenceType * soap_new_req_wsdd__AppSequenceType( + struct soap *soap, + unsigned int InstanceId, + unsigned int MessageNumber) +{ + struct wsdd__AppSequenceType *_p = ::soap_new_wsdd__AppSequenceType(soap); + if (_p) + { ::soap_default_wsdd__AppSequenceType(soap, _p); + _p->InstanceId = InstanceId; + _p->MessageNumber = MessageNumber; + } + return _p; +} + +inline struct wsdd__AppSequenceType * soap_new_set_wsdd__AppSequenceType( + struct soap *soap, + unsigned int InstanceId, + char *SequenceId, + unsigned int MessageNumber) +{ + struct wsdd__AppSequenceType *_p = ::soap_new_wsdd__AppSequenceType(soap); + if (_p) + { ::soap_default_wsdd__AppSequenceType(soap, _p); + _p->InstanceId = InstanceId; + _p->SequenceId = SequenceId; + _p->MessageNumber = MessageNumber; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__AppSequenceType(struct soap*, const struct wsdd__AppSequenceType *, const char*, const char*); + +inline int soap_write_wsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__AppSequenceType(soap, p), 0) || ::soap_put_wsdd__AppSequenceType(soap, p, "wsdd:AppSequenceType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__AppSequenceType(struct soap *soap, const char *URL, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__AppSequenceType(soap, p), 0) || ::soap_put_wsdd__AppSequenceType(soap, p, "wsdd:AppSequenceType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__AppSequenceType(struct soap *soap, const char *URL, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__AppSequenceType(soap, p), 0) || ::soap_put_wsdd__AppSequenceType(soap, p, "wsdd:AppSequenceType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__AppSequenceType(struct soap *soap, const char *URL, struct wsdd__AppSequenceType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__AppSequenceType(soap, p), 0) || ::soap_put_wsdd__AppSequenceType(soap, p, "wsdd:AppSequenceType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__AppSequenceType * SOAP_FMAC4 soap_get_wsdd__AppSequenceType(struct soap*, struct wsdd__AppSequenceType *, const char*, const char*); + +inline int soap_read_wsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType *p) +{ + if (p) + { ::soap_default_wsdd__AppSequenceType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__AppSequenceType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__AppSequenceType(struct soap *soap, const char *URL, struct wsdd__AppSequenceType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__AppSequenceType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__AppSequenceType(struct soap *soap, struct wsdd__AppSequenceType *p) +{ + if (::soap_read_wsdd__AppSequenceType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__SigType_DEFINED +#define SOAP_TYPE_wsdd__SigType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__SigType(struct soap*, struct wsdd__SigType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__SigType(struct soap*, const struct wsdd__SigType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__SigType(struct soap*, const char*, int, const struct wsdd__SigType *, const char*); +SOAP_FMAC3 struct wsdd__SigType * SOAP_FMAC4 soap_in_wsdd__SigType(struct soap*, const char*, struct wsdd__SigType *, const char*); +SOAP_FMAC1 struct wsdd__SigType * SOAP_FMAC2 soap_instantiate_wsdd__SigType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__SigType * soap_new_wsdd__SigType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__SigType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__SigType * soap_new_req_wsdd__SigType( + struct soap *soap, + char *Scheme, + char *Refs, + char *Sig) +{ + struct wsdd__SigType *_p = ::soap_new_wsdd__SigType(soap); + if (_p) + { ::soap_default_wsdd__SigType(soap, _p); + _p->Scheme = Scheme; + _p->Refs = Refs; + _p->Sig = Sig; + } + return _p; +} + +inline struct wsdd__SigType * soap_new_set_wsdd__SigType( + struct soap *soap, + char *Scheme, + char *KeyId, + char *Refs, + char *Sig) +{ + struct wsdd__SigType *_p = ::soap_new_wsdd__SigType(soap); + if (_p) + { ::soap_default_wsdd__SigType(soap, _p); + _p->Scheme = Scheme; + _p->KeyId = KeyId; + _p->Refs = Refs; + _p->Sig = Sig; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__SigType(struct soap*, const struct wsdd__SigType *, const char*, const char*); + +inline int soap_write_wsdd__SigType(struct soap *soap, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__SigType(soap, p), 0) || ::soap_put_wsdd__SigType(soap, p, "wsdd:SigType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__SigType(struct soap *soap, const char *URL, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__SigType(soap, p), 0) || ::soap_put_wsdd__SigType(soap, p, "wsdd:SigType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__SigType(struct soap *soap, const char *URL, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__SigType(soap, p), 0) || ::soap_put_wsdd__SigType(soap, p, "wsdd:SigType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__SigType(struct soap *soap, const char *URL, struct wsdd__SigType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__SigType(soap, p), 0) || ::soap_put_wsdd__SigType(soap, p, "wsdd:SigType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__SigType * SOAP_FMAC4 soap_get_wsdd__SigType(struct soap*, struct wsdd__SigType *, const char*, const char*); + +inline int soap_read_wsdd__SigType(struct soap *soap, struct wsdd__SigType *p) +{ + if (p) + { ::soap_default_wsdd__SigType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__SigType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__SigType(struct soap *soap, const char *URL, struct wsdd__SigType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__SigType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__SigType(struct soap *soap, struct wsdd__SigType *p) +{ + if (::soap_read_wsdd__SigType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__SecurityType_DEFINED +#define SOAP_TYPE_wsdd__SecurityType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__SecurityType(struct soap*, struct wsdd__SecurityType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__SecurityType(struct soap*, const struct wsdd__SecurityType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__SecurityType(struct soap*, const char*, int, const struct wsdd__SecurityType *, const char*); +SOAP_FMAC3 struct wsdd__SecurityType * SOAP_FMAC4 soap_in_wsdd__SecurityType(struct soap*, const char*, struct wsdd__SecurityType *, const char*); +SOAP_FMAC1 struct wsdd__SecurityType * SOAP_FMAC2 soap_instantiate_wsdd__SecurityType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__SecurityType * soap_new_wsdd__SecurityType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__SecurityType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__SecurityType * soap_new_req_wsdd__SecurityType( + struct soap *soap) +{ + struct wsdd__SecurityType *_p = ::soap_new_wsdd__SecurityType(soap); + if (_p) + { ::soap_default_wsdd__SecurityType(soap, _p); + } + return _p; +} + +inline struct wsdd__SecurityType * soap_new_set_wsdd__SecurityType( + struct soap *soap, + struct wsdd__SigType *Sig) +{ + struct wsdd__SecurityType *_p = ::soap_new_wsdd__SecurityType(soap); + if (_p) + { ::soap_default_wsdd__SecurityType(soap, _p); + _p->Sig = Sig; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__SecurityType(struct soap*, const struct wsdd__SecurityType *, const char*, const char*); + +inline int soap_write_wsdd__SecurityType(struct soap *soap, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__SecurityType(soap, p), 0) || ::soap_put_wsdd__SecurityType(soap, p, "wsdd:SecurityType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__SecurityType(struct soap *soap, const char *URL, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__SecurityType(soap, p), 0) || ::soap_put_wsdd__SecurityType(soap, p, "wsdd:SecurityType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__SecurityType(struct soap *soap, const char *URL, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__SecurityType(soap, p), 0) || ::soap_put_wsdd__SecurityType(soap, p, "wsdd:SecurityType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__SecurityType(struct soap *soap, const char *URL, struct wsdd__SecurityType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__SecurityType(soap, p), 0) || ::soap_put_wsdd__SecurityType(soap, p, "wsdd:SecurityType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__SecurityType * SOAP_FMAC4 soap_get_wsdd__SecurityType(struct soap*, struct wsdd__SecurityType *, const char*, const char*); + +inline int soap_read_wsdd__SecurityType(struct soap *soap, struct wsdd__SecurityType *p) +{ + if (p) + { ::soap_default_wsdd__SecurityType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__SecurityType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__SecurityType(struct soap *soap, const char *URL, struct wsdd__SecurityType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__SecurityType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__SecurityType(struct soap *soap, struct wsdd__SecurityType *p) +{ + if (::soap_read_wsdd__SecurityType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ScopesType_DEFINED +#define SOAP_TYPE_wsdd__ScopesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ScopesType(struct soap*, struct wsdd__ScopesType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ScopesType(struct soap*, const struct wsdd__ScopesType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ScopesType(struct soap*, const char*, int, const struct wsdd__ScopesType *, const char*); +SOAP_FMAC3 struct wsdd__ScopesType * SOAP_FMAC4 soap_in_wsdd__ScopesType(struct soap*, const char*, struct wsdd__ScopesType *, const char*); +SOAP_FMAC1 struct wsdd__ScopesType * SOAP_FMAC2 soap_instantiate_wsdd__ScopesType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ScopesType * soap_new_wsdd__ScopesType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ScopesType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ScopesType * soap_new_req_wsdd__ScopesType( + struct soap *soap) +{ + struct wsdd__ScopesType *_p = ::soap_new_wsdd__ScopesType(soap); + if (_p) + { ::soap_default_wsdd__ScopesType(soap, _p); + } + return _p; +} + +inline struct wsdd__ScopesType * soap_new_set_wsdd__ScopesType( + struct soap *soap, + char *__item, + char *MatchBy) +{ + struct wsdd__ScopesType *_p = ::soap_new_wsdd__ScopesType(soap); + if (_p) + { ::soap_default_wsdd__ScopesType(soap, _p); + _p->__item = __item; + _p->MatchBy = MatchBy; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ScopesType(struct soap*, const struct wsdd__ScopesType *, const char*, const char*); + +inline int soap_write_wsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ScopesType(soap, p), 0) || ::soap_put_wsdd__ScopesType(soap, p, "wsdd:ScopesType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ScopesType(struct soap *soap, const char *URL, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ScopesType(soap, p), 0) || ::soap_put_wsdd__ScopesType(soap, p, "wsdd:ScopesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ScopesType(struct soap *soap, const char *URL, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ScopesType(soap, p), 0) || ::soap_put_wsdd__ScopesType(soap, p, "wsdd:ScopesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ScopesType(struct soap *soap, const char *URL, struct wsdd__ScopesType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ScopesType(soap, p), 0) || ::soap_put_wsdd__ScopesType(soap, p, "wsdd:ScopesType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ScopesType * SOAP_FMAC4 soap_get_wsdd__ScopesType(struct soap*, struct wsdd__ScopesType *, const char*, const char*); + +inline int soap_read_wsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType *p) +{ + if (p) + { ::soap_default_wsdd__ScopesType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ScopesType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ScopesType(struct soap *soap, const char *URL, struct wsdd__ScopesType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ScopesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ScopesType(struct soap *soap, struct wsdd__ScopesType *p) +{ + if (::soap_read_wsdd__ScopesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ResolveMatchType_DEFINED +#define SOAP_TYPE_wsdd__ResolveMatchType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ResolveMatchType(struct soap*, struct wsdd__ResolveMatchType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveMatchType(struct soap*, const struct wsdd__ResolveMatchType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ResolveMatchType(struct soap*, const char*, int, const struct wsdd__ResolveMatchType *, const char*); +SOAP_FMAC3 struct wsdd__ResolveMatchType * SOAP_FMAC4 soap_in_wsdd__ResolveMatchType(struct soap*, const char*, struct wsdd__ResolveMatchType *, const char*); +SOAP_FMAC1 struct wsdd__ResolveMatchType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveMatchType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ResolveMatchType * soap_new_wsdd__ResolveMatchType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ResolveMatchType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ResolveMatchType * soap_new_req_wsdd__ResolveMatchType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference, + unsigned int MetadataVersion) +{ + struct wsdd__ResolveMatchType *_p = ::soap_new_wsdd__ResolveMatchType(soap); + if (_p) + { ::soap_default_wsdd__ResolveMatchType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + _p->MetadataVersion = MetadataVersion; + } + return _p; +} + +inline struct wsdd__ResolveMatchType * soap_new_set_wsdd__ResolveMatchType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference, + char *Types, + struct wsdd__ScopesType *Scopes, + char *XAddrs, + unsigned int MetadataVersion) +{ + struct wsdd__ResolveMatchType *_p = ::soap_new_wsdd__ResolveMatchType(soap); + if (_p) + { ::soap_default_wsdd__ResolveMatchType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + _p->Types = Types; + _p->Scopes = Scopes; + _p->XAddrs = XAddrs; + _p->MetadataVersion = MetadataVersion; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ResolveMatchType(struct soap*, const struct wsdd__ResolveMatchType *, const char*, const char*); + +inline int soap_write_wsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ResolveMatchType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchType(soap, p, "wsdd:ResolveMatchType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ResolveMatchType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveMatchType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchType(soap, p, "wsdd:ResolveMatchType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ResolveMatchType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveMatchType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchType(soap, p, "wsdd:ResolveMatchType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ResolveMatchType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveMatchType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchType(soap, p, "wsdd:ResolveMatchType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ResolveMatchType * SOAP_FMAC4 soap_get_wsdd__ResolveMatchType(struct soap*, struct wsdd__ResolveMatchType *, const char*, const char*); + +inline int soap_read_wsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType *p) +{ + if (p) + { ::soap_default_wsdd__ResolveMatchType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ResolveMatchType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ResolveMatchType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ResolveMatchType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ResolveMatchType(struct soap *soap, struct wsdd__ResolveMatchType *p) +{ + if (::soap_read_wsdd__ResolveMatchType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ResolveMatchesType_DEFINED +#define SOAP_TYPE_wsdd__ResolveMatchesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ResolveMatchesType(struct soap*, struct wsdd__ResolveMatchesType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveMatchesType(struct soap*, const struct wsdd__ResolveMatchesType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ResolveMatchesType(struct soap*, const char*, int, const struct wsdd__ResolveMatchesType *, const char*); +SOAP_FMAC3 struct wsdd__ResolveMatchesType * SOAP_FMAC4 soap_in_wsdd__ResolveMatchesType(struct soap*, const char*, struct wsdd__ResolveMatchesType *, const char*); +SOAP_FMAC1 struct wsdd__ResolveMatchesType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveMatchesType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ResolveMatchesType * soap_new_wsdd__ResolveMatchesType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ResolveMatchesType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ResolveMatchesType * soap_new_req_wsdd__ResolveMatchesType( + struct soap *soap) +{ + struct wsdd__ResolveMatchesType *_p = ::soap_new_wsdd__ResolveMatchesType(soap); + if (_p) + { ::soap_default_wsdd__ResolveMatchesType(soap, _p); + } + return _p; +} + +inline struct wsdd__ResolveMatchesType * soap_new_set_wsdd__ResolveMatchesType( + struct soap *soap, + struct wsdd__ResolveMatchType *ResolveMatch) +{ + struct wsdd__ResolveMatchesType *_p = ::soap_new_wsdd__ResolveMatchesType(soap); + if (_p) + { ::soap_default_wsdd__ResolveMatchesType(soap, _p); + _p->ResolveMatch = ResolveMatch; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ResolveMatchesType(struct soap*, const struct wsdd__ResolveMatchesType *, const char*, const char*); + +inline int soap_write_wsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ResolveMatchesType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchesType(soap, p, "wsdd:ResolveMatchesType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ResolveMatchesType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveMatchesType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchesType(soap, p, "wsdd:ResolveMatchesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ResolveMatchesType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveMatchesType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchesType(soap, p, "wsdd:ResolveMatchesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ResolveMatchesType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveMatchesType(soap, p), 0) || ::soap_put_wsdd__ResolveMatchesType(soap, p, "wsdd:ResolveMatchesType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ResolveMatchesType * SOAP_FMAC4 soap_get_wsdd__ResolveMatchesType(struct soap*, struct wsdd__ResolveMatchesType *, const char*, const char*); + +inline int soap_read_wsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType *p) +{ + if (p) + { ::soap_default_wsdd__ResolveMatchesType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ResolveMatchesType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ResolveMatchesType(struct soap *soap, const char *URL, struct wsdd__ResolveMatchesType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ResolveMatchesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ResolveMatchesType(struct soap *soap, struct wsdd__ResolveMatchesType *p) +{ + if (::soap_read_wsdd__ResolveMatchesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ResolveType_DEFINED +#define SOAP_TYPE_wsdd__ResolveType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ResolveType(struct soap*, struct wsdd__ResolveType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ResolveType(struct soap*, const struct wsdd__ResolveType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ResolveType(struct soap*, const char*, int, const struct wsdd__ResolveType *, const char*); +SOAP_FMAC3 struct wsdd__ResolveType * SOAP_FMAC4 soap_in_wsdd__ResolveType(struct soap*, const char*, struct wsdd__ResolveType *, const char*); +SOAP_FMAC1 struct wsdd__ResolveType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ResolveType * soap_new_wsdd__ResolveType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ResolveType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ResolveType * soap_new_req_wsdd__ResolveType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference) +{ + struct wsdd__ResolveType *_p = ::soap_new_wsdd__ResolveType(soap); + if (_p) + { ::soap_default_wsdd__ResolveType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + } + return _p; +} + +inline struct wsdd__ResolveType * soap_new_set_wsdd__ResolveType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference) +{ + struct wsdd__ResolveType *_p = ::soap_new_wsdd__ResolveType(soap); + if (_p) + { ::soap_default_wsdd__ResolveType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ResolveType(struct soap*, const struct wsdd__ResolveType *, const char*, const char*); + +inline int soap_write_wsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ResolveType(soap, p), 0) || ::soap_put_wsdd__ResolveType(soap, p, "wsdd:ResolveType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ResolveType(struct soap *soap, const char *URL, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveType(soap, p), 0) || ::soap_put_wsdd__ResolveType(soap, p, "wsdd:ResolveType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ResolveType(struct soap *soap, const char *URL, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveType(soap, p), 0) || ::soap_put_wsdd__ResolveType(soap, p, "wsdd:ResolveType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ResolveType(struct soap *soap, const char *URL, struct wsdd__ResolveType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ResolveType(soap, p), 0) || ::soap_put_wsdd__ResolveType(soap, p, "wsdd:ResolveType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ResolveType * SOAP_FMAC4 soap_get_wsdd__ResolveType(struct soap*, struct wsdd__ResolveType *, const char*, const char*); + +inline int soap_read_wsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType *p) +{ + if (p) + { ::soap_default_wsdd__ResolveType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ResolveType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ResolveType(struct soap *soap, const char *URL, struct wsdd__ResolveType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ResolveType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ResolveType(struct soap *soap, struct wsdd__ResolveType *p) +{ + if (::soap_read_wsdd__ResolveType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ProbeMatchType_DEFINED +#define SOAP_TYPE_wsdd__ProbeMatchType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ProbeMatchType(struct soap*, struct wsdd__ProbeMatchType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeMatchType(struct soap*, const struct wsdd__ProbeMatchType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ProbeMatchType(struct soap*, const char*, int, const struct wsdd__ProbeMatchType *, const char*); +SOAP_FMAC3 struct wsdd__ProbeMatchType * SOAP_FMAC4 soap_in_wsdd__ProbeMatchType(struct soap*, const char*, struct wsdd__ProbeMatchType *, const char*); +SOAP_FMAC1 struct wsdd__ProbeMatchType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeMatchType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ProbeMatchType * soap_new_wsdd__ProbeMatchType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ProbeMatchType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ProbeMatchType * soap_new_req_wsdd__ProbeMatchType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference, + unsigned int MetadataVersion) +{ + struct wsdd__ProbeMatchType *_p = ::soap_new_wsdd__ProbeMatchType(soap); + if (_p) + { ::soap_default_wsdd__ProbeMatchType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + _p->MetadataVersion = MetadataVersion; + } + return _p; +} + +inline struct wsdd__ProbeMatchType * soap_new_set_wsdd__ProbeMatchType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference, + char *Types, + struct wsdd__ScopesType *Scopes, + char *XAddrs, + unsigned int MetadataVersion) +{ + struct wsdd__ProbeMatchType *_p = ::soap_new_wsdd__ProbeMatchType(soap); + if (_p) + { ::soap_default_wsdd__ProbeMatchType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + _p->Types = Types; + _p->Scopes = Scopes; + _p->XAddrs = XAddrs; + _p->MetadataVersion = MetadataVersion; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ProbeMatchType(struct soap*, const struct wsdd__ProbeMatchType *, const char*, const char*); + +inline int soap_write_wsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ProbeMatchType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchType(soap, p, "wsdd:ProbeMatchType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ProbeMatchType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeMatchType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchType(soap, p, "wsdd:ProbeMatchType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ProbeMatchType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeMatchType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchType(soap, p, "wsdd:ProbeMatchType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ProbeMatchType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeMatchType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchType(soap, p, "wsdd:ProbeMatchType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ProbeMatchType * SOAP_FMAC4 soap_get_wsdd__ProbeMatchType(struct soap*, struct wsdd__ProbeMatchType *, const char*, const char*); + +inline int soap_read_wsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType *p) +{ + if (p) + { ::soap_default_wsdd__ProbeMatchType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ProbeMatchType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ProbeMatchType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ProbeMatchType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ProbeMatchType(struct soap *soap, struct wsdd__ProbeMatchType *p) +{ + if (::soap_read_wsdd__ProbeMatchType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ProbeMatchesType_DEFINED +#define SOAP_TYPE_wsdd__ProbeMatchesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ProbeMatchesType(struct soap*, struct wsdd__ProbeMatchesType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeMatchesType(struct soap*, const struct wsdd__ProbeMatchesType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ProbeMatchesType(struct soap*, const char*, int, const struct wsdd__ProbeMatchesType *, const char*); +SOAP_FMAC3 struct wsdd__ProbeMatchesType * SOAP_FMAC4 soap_in_wsdd__ProbeMatchesType(struct soap*, const char*, struct wsdd__ProbeMatchesType *, const char*); +SOAP_FMAC1 struct wsdd__ProbeMatchesType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeMatchesType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ProbeMatchesType * soap_new_wsdd__ProbeMatchesType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ProbeMatchesType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ProbeMatchesType * soap_new_req_wsdd__ProbeMatchesType( + struct soap *soap, + int __sizeProbeMatch, + struct wsdd__ProbeMatchType *ProbeMatch) +{ + struct wsdd__ProbeMatchesType *_p = ::soap_new_wsdd__ProbeMatchesType(soap); + if (_p) + { ::soap_default_wsdd__ProbeMatchesType(soap, _p); + _p->__sizeProbeMatch = __sizeProbeMatch; + _p->ProbeMatch = ProbeMatch; + } + return _p; +} + +inline struct wsdd__ProbeMatchesType * soap_new_set_wsdd__ProbeMatchesType( + struct soap *soap, + int __sizeProbeMatch, + struct wsdd__ProbeMatchType *ProbeMatch) +{ + struct wsdd__ProbeMatchesType *_p = ::soap_new_wsdd__ProbeMatchesType(soap); + if (_p) + { ::soap_default_wsdd__ProbeMatchesType(soap, _p); + _p->__sizeProbeMatch = __sizeProbeMatch; + _p->ProbeMatch = ProbeMatch; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ProbeMatchesType(struct soap*, const struct wsdd__ProbeMatchesType *, const char*, const char*); + +inline int soap_write_wsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ProbeMatchesType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchesType(soap, p, "wsdd:ProbeMatchesType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ProbeMatchesType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeMatchesType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchesType(soap, p, "wsdd:ProbeMatchesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ProbeMatchesType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeMatchesType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchesType(soap, p, "wsdd:ProbeMatchesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ProbeMatchesType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchesType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeMatchesType(soap, p), 0) || ::soap_put_wsdd__ProbeMatchesType(soap, p, "wsdd:ProbeMatchesType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ProbeMatchesType * SOAP_FMAC4 soap_get_wsdd__ProbeMatchesType(struct soap*, struct wsdd__ProbeMatchesType *, const char*, const char*); + +inline int soap_read_wsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType *p) +{ + if (p) + { ::soap_default_wsdd__ProbeMatchesType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ProbeMatchesType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ProbeMatchesType(struct soap *soap, const char *URL, struct wsdd__ProbeMatchesType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ProbeMatchesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ProbeMatchesType(struct soap *soap, struct wsdd__ProbeMatchesType *p) +{ + if (::soap_read_wsdd__ProbeMatchesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ProbeType_DEFINED +#define SOAP_TYPE_wsdd__ProbeType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ProbeType(struct soap*, struct wsdd__ProbeType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ProbeType(struct soap*, const struct wsdd__ProbeType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ProbeType(struct soap*, const char*, int, const struct wsdd__ProbeType *, const char*); +SOAP_FMAC3 struct wsdd__ProbeType * SOAP_FMAC4 soap_in_wsdd__ProbeType(struct soap*, const char*, struct wsdd__ProbeType *, const char*); +SOAP_FMAC1 struct wsdd__ProbeType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ProbeType * soap_new_wsdd__ProbeType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ProbeType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ProbeType * soap_new_req_wsdd__ProbeType( + struct soap *soap) +{ + struct wsdd__ProbeType *_p = ::soap_new_wsdd__ProbeType(soap); + if (_p) + { ::soap_default_wsdd__ProbeType(soap, _p); + } + return _p; +} + +inline struct wsdd__ProbeType * soap_new_set_wsdd__ProbeType( + struct soap *soap, + char *Types, + struct wsdd__ScopesType *Scopes) +{ + struct wsdd__ProbeType *_p = ::soap_new_wsdd__ProbeType(soap); + if (_p) + { ::soap_default_wsdd__ProbeType(soap, _p); + _p->Types = Types; + _p->Scopes = Scopes; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ProbeType(struct soap*, const struct wsdd__ProbeType *, const char*, const char*); + +inline int soap_write_wsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ProbeType(soap, p), 0) || ::soap_put_wsdd__ProbeType(soap, p, "wsdd:ProbeType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ProbeType(struct soap *soap, const char *URL, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeType(soap, p), 0) || ::soap_put_wsdd__ProbeType(soap, p, "wsdd:ProbeType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ProbeType(struct soap *soap, const char *URL, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeType(soap, p), 0) || ::soap_put_wsdd__ProbeType(soap, p, "wsdd:ProbeType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ProbeType(struct soap *soap, const char *URL, struct wsdd__ProbeType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ProbeType(soap, p), 0) || ::soap_put_wsdd__ProbeType(soap, p, "wsdd:ProbeType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ProbeType * SOAP_FMAC4 soap_get_wsdd__ProbeType(struct soap*, struct wsdd__ProbeType *, const char*, const char*); + +inline int soap_read_wsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType *p) +{ + if (p) + { ::soap_default_wsdd__ProbeType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ProbeType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ProbeType(struct soap *soap, const char *URL, struct wsdd__ProbeType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ProbeType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ProbeType(struct soap *soap, struct wsdd__ProbeType *p) +{ + if (::soap_read_wsdd__ProbeType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__ByeType_DEFINED +#define SOAP_TYPE_wsdd__ByeType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__ByeType(struct soap*, struct wsdd__ByeType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__ByeType(struct soap*, const struct wsdd__ByeType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__ByeType(struct soap*, const char*, int, const struct wsdd__ByeType *, const char*); +SOAP_FMAC3 struct wsdd__ByeType * SOAP_FMAC4 soap_in_wsdd__ByeType(struct soap*, const char*, struct wsdd__ByeType *, const char*); +SOAP_FMAC1 struct wsdd__ByeType * SOAP_FMAC2 soap_instantiate_wsdd__ByeType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__ByeType * soap_new_wsdd__ByeType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__ByeType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__ByeType * soap_new_req_wsdd__ByeType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference) +{ + struct wsdd__ByeType *_p = ::soap_new_wsdd__ByeType(soap); + if (_p) + { ::soap_default_wsdd__ByeType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + } + return _p; +} + +inline struct wsdd__ByeType * soap_new_set_wsdd__ByeType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference, + char *Types, + struct wsdd__ScopesType *Scopes, + char *XAddrs, + unsigned int *MetadataVersion) +{ + struct wsdd__ByeType *_p = ::soap_new_wsdd__ByeType(soap); + if (_p) + { ::soap_default_wsdd__ByeType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + _p->Types = Types; + _p->Scopes = Scopes; + _p->XAddrs = XAddrs; + _p->MetadataVersion = MetadataVersion; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__ByeType(struct soap*, const struct wsdd__ByeType *, const char*, const char*); + +inline int soap_write_wsdd__ByeType(struct soap *soap, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__ByeType(soap, p), 0) || ::soap_put_wsdd__ByeType(soap, p, "wsdd:ByeType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__ByeType(struct soap *soap, const char *URL, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ByeType(soap, p), 0) || ::soap_put_wsdd__ByeType(soap, p, "wsdd:ByeType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__ByeType(struct soap *soap, const char *URL, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ByeType(soap, p), 0) || ::soap_put_wsdd__ByeType(soap, p, "wsdd:ByeType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__ByeType(struct soap *soap, const char *URL, struct wsdd__ByeType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__ByeType(soap, p), 0) || ::soap_put_wsdd__ByeType(soap, p, "wsdd:ByeType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__ByeType * SOAP_FMAC4 soap_get_wsdd__ByeType(struct soap*, struct wsdd__ByeType *, const char*, const char*); + +inline int soap_read_wsdd__ByeType(struct soap *soap, struct wsdd__ByeType *p) +{ + if (p) + { ::soap_default_wsdd__ByeType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__ByeType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__ByeType(struct soap *soap, const char *URL, struct wsdd__ByeType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__ByeType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__ByeType(struct soap *soap, struct wsdd__ByeType *p) +{ + if (::soap_read_wsdd__ByeType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__HelloType_DEFINED +#define SOAP_TYPE_wsdd__HelloType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsdd__HelloType(struct soap*, struct wsdd__HelloType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__HelloType(struct soap*, const struct wsdd__HelloType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__HelloType(struct soap*, const char*, int, const struct wsdd__HelloType *, const char*); +SOAP_FMAC3 struct wsdd__HelloType * SOAP_FMAC4 soap_in_wsdd__HelloType(struct soap*, const char*, struct wsdd__HelloType *, const char*); +SOAP_FMAC1 struct wsdd__HelloType * SOAP_FMAC2 soap_instantiate_wsdd__HelloType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsdd__HelloType * soap_new_wsdd__HelloType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsdd__HelloType(soap, n, NULL, NULL, NULL); +} + +inline struct wsdd__HelloType * soap_new_req_wsdd__HelloType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference, + unsigned int MetadataVersion) +{ + struct wsdd__HelloType *_p = ::soap_new_wsdd__HelloType(soap); + if (_p) + { ::soap_default_wsdd__HelloType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + _p->MetadataVersion = MetadataVersion; + } + return _p; +} + +inline struct wsdd__HelloType * soap_new_set_wsdd__HelloType( + struct soap *soap, + const struct wsa__EndpointReferenceType& wsa__EndpointReference, + char *Types, + struct wsdd__ScopesType *Scopes, + char *XAddrs, + unsigned int MetadataVersion) +{ + struct wsdd__HelloType *_p = ::soap_new_wsdd__HelloType(soap); + if (_p) + { ::soap_default_wsdd__HelloType(soap, _p); + _p->wsa__EndpointReference = wsa__EndpointReference; + _p->Types = Types; + _p->Scopes = Scopes; + _p->XAddrs = XAddrs; + _p->MetadataVersion = MetadataVersion; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__HelloType(struct soap*, const struct wsdd__HelloType *, const char*, const char*); + +inline int soap_write_wsdd__HelloType(struct soap *soap, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsdd__HelloType(soap, p), 0) || ::soap_put_wsdd__HelloType(soap, p, "wsdd:HelloType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsdd__HelloType(struct soap *soap, const char *URL, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__HelloType(soap, p), 0) || ::soap_put_wsdd__HelloType(soap, p, "wsdd:HelloType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__HelloType(struct soap *soap, const char *URL, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__HelloType(soap, p), 0) || ::soap_put_wsdd__HelloType(soap, p, "wsdd:HelloType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__HelloType(struct soap *soap, const char *URL, struct wsdd__HelloType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsdd__HelloType(soap, p), 0) || ::soap_put_wsdd__HelloType(soap, p, "wsdd:HelloType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsdd__HelloType * SOAP_FMAC4 soap_get_wsdd__HelloType(struct soap*, struct wsdd__HelloType *, const char*, const char*); + +inline int soap_read_wsdd__HelloType(struct soap *soap, struct wsdd__HelloType *p) +{ + if (p) + { ::soap_default_wsdd__HelloType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsdd__HelloType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__HelloType(struct soap *soap, const char *URL, struct wsdd__HelloType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__HelloType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__HelloType(struct soap *soap, struct wsdd__HelloType *p) +{ + if (::soap_read_wsdd__HelloType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_SOAP_ENV__Fault_DEFINED +#define SOAP_TYPE_SOAP_ENV__Fault_DEFINED +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_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); +} + +inline struct SOAP_ENV__Fault * soap_new_req_SOAP_ENV__Fault( + struct soap *soap) +{ + struct SOAP_ENV__Fault *_p = ::soap_new_SOAP_ENV__Fault(soap); + 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_new_SOAP_ENV__Fault(soap); + 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; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*); + +inline int soap_write_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_SOAP_ENV__Fault(soap, p), 0) || ::soap_put_SOAP_ENV__Fault(soap, p, "SOAP-ENV:Fault", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_SOAP_ENV__Fault(struct soap *soap, const char *URL, struct SOAP_ENV__Fault const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Fault(soap, p), 0) || ::soap_put_SOAP_ENV__Fault(soap, p, "SOAP-ENV:Fault", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_SOAP_ENV__Fault(struct soap *soap, const char *URL, struct SOAP_ENV__Fault const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Fault(soap, p), 0) || ::soap_put_SOAP_ENV__Fault(soap, p, "SOAP-ENV:Fault", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_SOAP_ENV__Fault(struct soap *soap, const char *URL, struct SOAP_ENV__Fault const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Fault(soap, p), 0) || ::soap_put_SOAP_ENV__Fault(soap, p, "SOAP-ENV:Fault", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*); + +inline int soap_read_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p) +{ + if (p) + { ::soap_default_SOAP_ENV__Fault(soap, p); + if (soap_begin_recv(soap) || ::soap_get_SOAP_ENV__Fault(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_SOAP_ENV__Fault(struct soap *soap, const char *URL, struct SOAP_ENV__Fault *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_SOAP_ENV__Fault(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p) +{ + if (::soap_read_SOAP_ENV__Fault(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_SOAP_ENV__Reason_DEFINED +#define SOAP_TYPE_SOAP_ENV__Reason_DEFINED +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_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*); + +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_new_SOAP_ENV__Reason(soap); + if (_p) + { ::soap_default_SOAP_ENV__Reason(soap, _p); + } + return _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_new_SOAP_ENV__Reason(soap); + if (_p) + { ::soap_default_SOAP_ENV__Reason(soap, _p); + _p->SOAP_ENV__Text = SOAP_ENV__Text; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*); + +inline int soap_write_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_SOAP_ENV__Reason(soap, p), 0) || ::soap_put_SOAP_ENV__Reason(soap, p, "SOAP-ENV:Reason", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_SOAP_ENV__Reason(struct soap *soap, const char *URL, struct SOAP_ENV__Reason const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Reason(soap, p), 0) || ::soap_put_SOAP_ENV__Reason(soap, p, "SOAP-ENV:Reason", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_SOAP_ENV__Reason(struct soap *soap, const char *URL, struct SOAP_ENV__Reason const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Reason(soap, p), 0) || ::soap_put_SOAP_ENV__Reason(soap, p, "SOAP-ENV:Reason", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_SOAP_ENV__Reason(struct soap *soap, const char *URL, struct SOAP_ENV__Reason const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Reason(soap, p), 0) || ::soap_put_SOAP_ENV__Reason(soap, p, "SOAP-ENV:Reason", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*); + +inline int soap_read_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *p) +{ + if (p) + { ::soap_default_SOAP_ENV__Reason(soap, p); + if (soap_begin_recv(soap) || ::soap_get_SOAP_ENV__Reason(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_SOAP_ENV__Reason(struct soap *soap, const char *URL, struct SOAP_ENV__Reason *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_SOAP_ENV__Reason(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *p) +{ + if (::soap_read_SOAP_ENV__Reason(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_SOAP_ENV__Code_DEFINED +#define SOAP_TYPE_SOAP_ENV__Code_DEFINED +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_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*); + +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_new_SOAP_ENV__Code(soap); + if (_p) + { ::soap_default_SOAP_ENV__Code(soap, _p); + } + return _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_new_SOAP_ENV__Code(soap); + 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; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*); + +inline int soap_write_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_SOAP_ENV__Code(soap, p), 0) || ::soap_put_SOAP_ENV__Code(soap, p, "SOAP-ENV:Code", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_SOAP_ENV__Code(struct soap *soap, const char *URL, struct SOAP_ENV__Code const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Code(soap, p), 0) || ::soap_put_SOAP_ENV__Code(soap, p, "SOAP-ENV:Code", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_SOAP_ENV__Code(struct soap *soap, const char *URL, struct SOAP_ENV__Code const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Code(soap, p), 0) || ::soap_put_SOAP_ENV__Code(soap, p, "SOAP-ENV:Code", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_SOAP_ENV__Code(struct soap *soap, const char *URL, struct SOAP_ENV__Code const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Code(soap, p), 0) || ::soap_put_SOAP_ENV__Code(soap, p, "SOAP-ENV:Code", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*); + +inline int soap_read_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *p) +{ + if (p) + { ::soap_default_SOAP_ENV__Code(soap, p); + if (soap_begin_recv(soap) || ::soap_get_SOAP_ENV__Code(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_SOAP_ENV__Code(struct soap *soap, const char *URL, struct SOAP_ENV__Code *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_SOAP_ENV__Code(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *p) +{ + if (::soap_read_SOAP_ENV__Code(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_SOAP_ENV__Detail_DEFINED +#define SOAP_TYPE_SOAP_ENV__Detail_DEFINED +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_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*); + +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_new_SOAP_ENV__Detail(soap); + if (_p) + { ::soap_default_SOAP_ENV__Detail(soap, _p); + _p->__type = __type; + _p->fault = fault; + } + return _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_new_SOAP_ENV__Detail(soap); + if (_p) + { ::soap_default_SOAP_ENV__Detail(soap, _p); + _p->__any = __any; + _p->__type = __type; + _p->fault = fault; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*); + +inline int soap_write_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_SOAP_ENV__Detail(soap, p), 0) || ::soap_put_SOAP_ENV__Detail(soap, p, "SOAP-ENV:Detail", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_SOAP_ENV__Detail(struct soap *soap, const char *URL, struct SOAP_ENV__Detail const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Detail(soap, p), 0) || ::soap_put_SOAP_ENV__Detail(soap, p, "SOAP-ENV:Detail", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_SOAP_ENV__Detail(struct soap *soap, const char *URL, struct SOAP_ENV__Detail const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Detail(soap, p), 0) || ::soap_put_SOAP_ENV__Detail(soap, p, "SOAP-ENV:Detail", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_SOAP_ENV__Detail(struct soap *soap, const char *URL, struct SOAP_ENV__Detail const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Detail(soap, p), 0) || ::soap_put_SOAP_ENV__Detail(soap, p, "SOAP-ENV:Detail", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*); + +inline int soap_read_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *p) +{ + if (p) + { ::soap_default_SOAP_ENV__Detail(soap, p); + if (soap_begin_recv(soap) || ::soap_get_SOAP_ENV__Detail(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_SOAP_ENV__Detail(struct soap *soap, const char *URL, struct SOAP_ENV__Detail *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_SOAP_ENV__Detail(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *p) +{ + if (::soap_read_SOAP_ENV__Detail(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_SOAP_ENV__Header_DEFINED +#define SOAP_TYPE_SOAP_ENV__Header_DEFINED +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_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*); + +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_new_SOAP_ENV__Header(soap); + if (_p) + { ::soap_default_SOAP_ENV__Header(soap, _p); + } + return _p; +} + +inline struct SOAP_ENV__Header * soap_new_set_SOAP_ENV__Header( + struct soap *soap, + char *wsa__MessageID, + struct wsa__Relationship *wsa__RelatesTo, + struct wsa__EndpointReferenceType *wsa__From, + struct wsa__EndpointReferenceType *wsa__ReplyTo, + struct wsa__EndpointReferenceType *wsa__FaultTo, + char *wsa__To, + char *wsa__Action, + struct wsdd__AppSequenceType *wsdd__AppSequence) +{ + struct SOAP_ENV__Header *_p = ::soap_new_SOAP_ENV__Header(soap); + if (_p) + { ::soap_default_SOAP_ENV__Header(soap, _p); + _p->wsa__MessageID = wsa__MessageID; + _p->wsa__RelatesTo = wsa__RelatesTo; + _p->wsa__From = wsa__From; + _p->wsa__ReplyTo = wsa__ReplyTo; + _p->wsa__FaultTo = wsa__FaultTo; + _p->wsa__To = wsa__To; + _p->wsa__Action = wsa__Action; + _p->wsdd__AppSequence = wsdd__AppSequence; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*); + +inline int soap_write_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_SOAP_ENV__Header(soap, p), 0) || ::soap_put_SOAP_ENV__Header(soap, p, "SOAP-ENV:Header", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_SOAP_ENV__Header(struct soap *soap, const char *URL, struct SOAP_ENV__Header const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Header(soap, p), 0) || ::soap_put_SOAP_ENV__Header(soap, p, "SOAP-ENV:Header", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_SOAP_ENV__Header(struct soap *soap, const char *URL, struct SOAP_ENV__Header const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Header(soap, p), 0) || ::soap_put_SOAP_ENV__Header(soap, p, "SOAP-ENV:Header", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_SOAP_ENV__Header(struct soap *soap, const char *URL, struct SOAP_ENV__Header const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_SOAP_ENV__Header(soap, p), 0) || ::soap_put_SOAP_ENV__Header(soap, p, "SOAP-ENV:Header", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*); + +inline int soap_read_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *p) +{ + if (p) + { ::soap_default_SOAP_ENV__Header(soap, p); + if (soap_begin_recv(soap) || ::soap_get_SOAP_ENV__Header(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_SOAP_ENV__Header(struct soap *soap, const char *URL, struct SOAP_ENV__Header *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_SOAP_ENV__Header(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *p) +{ + if (::soap_read_SOAP_ENV__Header(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#endif +/* _wsa__FaultTo is a typedef synonym of wsa__EndpointReferenceType */ + +#ifndef SOAP_TYPE__wsa__FaultTo_DEFINED +#define SOAP_TYPE__wsa__FaultTo_DEFINED + +#define soap_default__wsa__FaultTo soap_default_wsa__EndpointReferenceType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__EndpointReferenceType(struct soap*, const struct wsa__EndpointReferenceType *); + +#define soap_serialize__wsa__FaultTo soap_serialize_wsa__EndpointReferenceType + + +#define soap__wsa__FaultTo2s soap_wsa__EndpointReferenceType2s + + +#define soap_out__wsa__FaultTo soap_out_wsa__EndpointReferenceType + + +#define soap_s2_wsa__FaultTo soap_s2wsa__EndpointReferenceType + + +#define soap_in__wsa__FaultTo soap_in_wsa__EndpointReferenceType + + +#define soap_instantiate__wsa__FaultTo soap_instantiate_wsa__EndpointReferenceType + + +#define soap_new__wsa__FaultTo soap_new_wsa__EndpointReferenceType + + +#define soap_new_req__wsa__FaultTo soap_new_req_wsa__EndpointReferenceType + + +#define soap_new_set__wsa__FaultTo soap_new_set_wsa__EndpointReferenceType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__FaultTo(struct soap*, const struct wsa__EndpointReferenceType *, const char*, const char*); + +inline int soap_write__wsa__FaultTo(struct soap *soap, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsa__FaultTo(soap, p), 0) || ::soap_put__wsa__FaultTo(soap, p, "wsa:FaultTo", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsa__FaultTo(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__FaultTo(soap, p), 0) || ::soap_put__wsa__FaultTo(soap, p, "wsa:FaultTo", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__FaultTo(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__FaultTo(soap, p), 0) || ::soap_put__wsa__FaultTo(soap, p, "wsa:FaultTo", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__FaultTo(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__FaultTo(soap, p), 0) || ::soap_put__wsa__FaultTo(soap, p, "wsa:FaultTo", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__FaultTo soap_get_wsa__EndpointReferenceType + + +#define soap_read__wsa__FaultTo soap_read_wsa__EndpointReferenceType + + +#define soap_GET__wsa__FaultTo soap_GET_wsa__EndpointReferenceType + + +#define soap_POST_recv__wsa__FaultTo soap_POST_recv_wsa__EndpointReferenceType + +#endif +/* _wsa__ReplyTo is a typedef synonym of wsa__EndpointReferenceType */ + +#ifndef SOAP_TYPE__wsa__ReplyTo_DEFINED +#define SOAP_TYPE__wsa__ReplyTo_DEFINED + +#define soap_default__wsa__ReplyTo soap_default_wsa__EndpointReferenceType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__EndpointReferenceType(struct soap*, const struct wsa__EndpointReferenceType *); + +#define soap_serialize__wsa__ReplyTo soap_serialize_wsa__EndpointReferenceType + + +#define soap__wsa__ReplyTo2s soap_wsa__EndpointReferenceType2s + + +#define soap_out__wsa__ReplyTo soap_out_wsa__EndpointReferenceType + + +#define soap_s2_wsa__ReplyTo soap_s2wsa__EndpointReferenceType + + +#define soap_in__wsa__ReplyTo soap_in_wsa__EndpointReferenceType + + +#define soap_instantiate__wsa__ReplyTo soap_instantiate_wsa__EndpointReferenceType + + +#define soap_new__wsa__ReplyTo soap_new_wsa__EndpointReferenceType + + +#define soap_new_req__wsa__ReplyTo soap_new_req_wsa__EndpointReferenceType + + +#define soap_new_set__wsa__ReplyTo soap_new_set_wsa__EndpointReferenceType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__ReplyTo(struct soap*, const struct wsa__EndpointReferenceType *, const char*, const char*); + +inline int soap_write__wsa__ReplyTo(struct soap *soap, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsa__ReplyTo(soap, p), 0) || ::soap_put__wsa__ReplyTo(soap, p, "wsa:ReplyTo", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsa__ReplyTo(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__ReplyTo(soap, p), 0) || ::soap_put__wsa__ReplyTo(soap, p, "wsa:ReplyTo", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__ReplyTo(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__ReplyTo(soap, p), 0) || ::soap_put__wsa__ReplyTo(soap, p, "wsa:ReplyTo", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__ReplyTo(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__ReplyTo(soap, p), 0) || ::soap_put__wsa__ReplyTo(soap, p, "wsa:ReplyTo", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__ReplyTo soap_get_wsa__EndpointReferenceType + + +#define soap_read__wsa__ReplyTo soap_read_wsa__EndpointReferenceType + + +#define soap_GET__wsa__ReplyTo soap_GET_wsa__EndpointReferenceType + + +#define soap_POST_recv__wsa__ReplyTo soap_POST_recv_wsa__EndpointReferenceType + +#endif +/* _wsa__From is a typedef synonym of wsa__EndpointReferenceType */ + +#ifndef SOAP_TYPE__wsa__From_DEFINED +#define SOAP_TYPE__wsa__From_DEFINED + +#define soap_default__wsa__From soap_default_wsa__EndpointReferenceType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__EndpointReferenceType(struct soap*, const struct wsa__EndpointReferenceType *); + +#define soap_serialize__wsa__From soap_serialize_wsa__EndpointReferenceType + + +#define soap__wsa__From2s soap_wsa__EndpointReferenceType2s + + +#define soap_out__wsa__From soap_out_wsa__EndpointReferenceType + + +#define soap_s2_wsa__From soap_s2wsa__EndpointReferenceType + + +#define soap_in__wsa__From soap_in_wsa__EndpointReferenceType + + +#define soap_instantiate__wsa__From soap_instantiate_wsa__EndpointReferenceType + + +#define soap_new__wsa__From soap_new_wsa__EndpointReferenceType + + +#define soap_new_req__wsa__From soap_new_req_wsa__EndpointReferenceType + + +#define soap_new_set__wsa__From soap_new_set_wsa__EndpointReferenceType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__From(struct soap*, const struct wsa__EndpointReferenceType *, const char*, const char*); + +inline int soap_write__wsa__From(struct soap *soap, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsa__From(soap, p), 0) || ::soap_put__wsa__From(soap, p, "wsa:From", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsa__From(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__From(soap, p), 0) || ::soap_put__wsa__From(soap, p, "wsa:From", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__From(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__From(soap, p), 0) || ::soap_put__wsa__From(soap, p, "wsa:From", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__From(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__From(soap, p), 0) || ::soap_put__wsa__From(soap, p, "wsa:From", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__From soap_get_wsa__EndpointReferenceType + + +#define soap_read__wsa__From soap_read_wsa__EndpointReferenceType + + +#define soap_GET__wsa__From soap_GET_wsa__EndpointReferenceType + + +#define soap_POST_recv__wsa__From soap_POST_recv_wsa__EndpointReferenceType + +#endif +/* _wsa__RelatesTo is a typedef synonym of wsa__Relationship */ + +#ifndef SOAP_TYPE__wsa__RelatesTo_DEFINED +#define SOAP_TYPE__wsa__RelatesTo_DEFINED + +#define soap_default__wsa__RelatesTo soap_default_wsa__Relationship + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__Relationship(struct soap*, const struct wsa__Relationship *); + +#define soap_serialize__wsa__RelatesTo soap_serialize_wsa__Relationship + + +#define soap__wsa__RelatesTo2s soap_wsa__Relationship2s + + +#define soap_out__wsa__RelatesTo soap_out_wsa__Relationship + + +#define soap_s2_wsa__RelatesTo soap_s2wsa__Relationship + + +#define soap_in__wsa__RelatesTo soap_in_wsa__Relationship + + +#define soap_instantiate__wsa__RelatesTo soap_instantiate_wsa__Relationship + + +#define soap_new__wsa__RelatesTo soap_new_wsa__Relationship + + +#define soap_new_req__wsa__RelatesTo soap_new_req_wsa__Relationship + + +#define soap_new_set__wsa__RelatesTo soap_new_set_wsa__Relationship + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__RelatesTo(struct soap*, const struct wsa__Relationship *, const char*, const char*); + +inline int soap_write__wsa__RelatesTo(struct soap *soap, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsa__RelatesTo(soap, p), 0) || ::soap_put__wsa__RelatesTo(soap, p, "wsa:RelatesTo", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsa__RelatesTo(struct soap *soap, const char *URL, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__RelatesTo(soap, p), 0) || ::soap_put__wsa__RelatesTo(soap, p, "wsa:RelatesTo", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__RelatesTo(struct soap *soap, const char *URL, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__RelatesTo(soap, p), 0) || ::soap_put__wsa__RelatesTo(soap, p, "wsa:RelatesTo", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__RelatesTo(struct soap *soap, const char *URL, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__RelatesTo(soap, p), 0) || ::soap_put__wsa__RelatesTo(soap, p, "wsa:RelatesTo", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__RelatesTo soap_get_wsa__Relationship + + +#define soap_read__wsa__RelatesTo soap_read_wsa__Relationship + + +#define soap_GET__wsa__RelatesTo soap_GET_wsa__Relationship + + +#define soap_POST_recv__wsa__RelatesTo soap_POST_recv_wsa__Relationship + +#endif +/* _wsa__EndpointReference is a typedef synonym of wsa__EndpointReferenceType */ + +#ifndef SOAP_TYPE__wsa__EndpointReference_DEFINED +#define SOAP_TYPE__wsa__EndpointReference_DEFINED + +#define soap_default__wsa__EndpointReference soap_default_wsa__EndpointReferenceType + +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__EndpointReferenceType(struct soap*, const struct wsa__EndpointReferenceType *); + +#define soap_serialize__wsa__EndpointReference soap_serialize_wsa__EndpointReferenceType + + +#define soap__wsa__EndpointReference2s soap_wsa__EndpointReferenceType2s + + +#define soap_out__wsa__EndpointReference soap_out_wsa__EndpointReferenceType + + +#define soap_s2_wsa__EndpointReference soap_s2wsa__EndpointReferenceType + + +#define soap_in__wsa__EndpointReference soap_in_wsa__EndpointReferenceType + + +#define soap_instantiate__wsa__EndpointReference soap_instantiate_wsa__EndpointReferenceType + + +#define soap_new__wsa__EndpointReference soap_new_wsa__EndpointReferenceType + + +#define soap_new_req__wsa__EndpointReference soap_new_req_wsa__EndpointReferenceType + + +#define soap_new_set__wsa__EndpointReference soap_new_set_wsa__EndpointReferenceType + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__EndpointReference(struct soap*, const struct wsa__EndpointReferenceType *, const char*, const char*); + +inline int soap_write__wsa__EndpointReference(struct soap *soap, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize__wsa__EndpointReference(soap, p), 0) || ::soap_put__wsa__EndpointReference(soap, p, "wsa:EndpointReference", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT__wsa__EndpointReference(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__EndpointReference(soap, p), 0) || ::soap_put__wsa__EndpointReference(soap, p, "wsa:EndpointReference", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__EndpointReference(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__EndpointReference(soap, p), 0) || ::soap_put__wsa__EndpointReference(soap, p, "wsa:EndpointReference", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__EndpointReference(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize__wsa__EndpointReference(soap, p), 0) || ::soap_put__wsa__EndpointReference(soap, p, "wsa:EndpointReference", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__EndpointReference soap_get_wsa__EndpointReferenceType + + +#define soap_read__wsa__EndpointReference soap_read_wsa__EndpointReferenceType + + +#define soap_GET__wsa__EndpointReference soap_GET_wsa__EndpointReferenceType + + +#define soap_POST_recv__wsa__EndpointReference soap_POST_recv_wsa__EndpointReferenceType + +#endif + +#ifndef SOAP_TYPE_wsa__Relationship_DEFINED +#define SOAP_TYPE_wsa__Relationship_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__Relationship(struct soap*, struct wsa__Relationship *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__Relationship(struct soap*, const struct wsa__Relationship *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__Relationship(struct soap*, const char*, int, const struct wsa__Relationship *, const char*); +SOAP_FMAC3 struct wsa__Relationship * SOAP_FMAC4 soap_in_wsa__Relationship(struct soap*, const char*, struct wsa__Relationship *, const char*); +SOAP_FMAC1 struct wsa__Relationship * SOAP_FMAC2 soap_instantiate_wsa__Relationship(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsa__Relationship * soap_new_wsa__Relationship(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsa__Relationship(soap, n, NULL, NULL, NULL); +} + +inline struct wsa__Relationship * soap_new_req_wsa__Relationship( + struct soap *soap) +{ + struct wsa__Relationship *_p = ::soap_new_wsa__Relationship(soap); + if (_p) + { ::soap_default_wsa__Relationship(soap, _p); + } + return _p; +} + +inline struct wsa__Relationship * soap_new_set_wsa__Relationship( + struct soap *soap, + char *__item, + char *RelationshipType, + char *__anyAttribute) +{ + struct wsa__Relationship *_p = ::soap_new_wsa__Relationship(soap); + if (_p) + { ::soap_default_wsa__Relationship(soap, _p); + _p->__item = __item; + _p->RelationshipType = RelationshipType; + _p->__anyAttribute = __anyAttribute; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__Relationship(struct soap*, const struct wsa__Relationship *, const char*, const char*); + +inline int soap_write_wsa__Relationship(struct soap *soap, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsa__Relationship(soap, p), 0) || ::soap_put_wsa__Relationship(soap, p, "wsa:Relationship", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsa__Relationship(struct soap *soap, const char *URL, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__Relationship(soap, p), 0) || ::soap_put_wsa__Relationship(soap, p, "wsa:Relationship", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsa__Relationship(struct soap *soap, const char *URL, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__Relationship(soap, p), 0) || ::soap_put_wsa__Relationship(soap, p, "wsa:Relationship", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsa__Relationship(struct soap *soap, const char *URL, struct wsa__Relationship const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__Relationship(soap, p), 0) || ::soap_put_wsa__Relationship(soap, p, "wsa:Relationship", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsa__Relationship * SOAP_FMAC4 soap_get_wsa__Relationship(struct soap*, struct wsa__Relationship *, const char*, const char*); + +inline int soap_read_wsa__Relationship(struct soap *soap, struct wsa__Relationship *p) +{ + if (p) + { ::soap_default_wsa__Relationship(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsa__Relationship(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsa__Relationship(struct soap *soap, const char *URL, struct wsa__Relationship *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsa__Relationship(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsa__Relationship(struct soap *soap, struct wsa__Relationship *p) +{ + if (::soap_read_wsa__Relationship(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsa__ServiceNameType_DEFINED +#define SOAP_TYPE_wsa__ServiceNameType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__ServiceNameType(struct soap*, struct wsa__ServiceNameType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__ServiceNameType(struct soap*, const struct wsa__ServiceNameType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__ServiceNameType(struct soap*, const char*, int, const struct wsa__ServiceNameType *, const char*); +SOAP_FMAC3 struct wsa__ServiceNameType * SOAP_FMAC4 soap_in_wsa__ServiceNameType(struct soap*, const char*, struct wsa__ServiceNameType *, const char*); +SOAP_FMAC1 struct wsa__ServiceNameType * SOAP_FMAC2 soap_instantiate_wsa__ServiceNameType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsa__ServiceNameType * soap_new_wsa__ServiceNameType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsa__ServiceNameType(soap, n, NULL, NULL, NULL); +} + +inline struct wsa__ServiceNameType * soap_new_req_wsa__ServiceNameType( + struct soap *soap) +{ + struct wsa__ServiceNameType *_p = ::soap_new_wsa__ServiceNameType(soap); + if (_p) + { ::soap_default_wsa__ServiceNameType(soap, _p); + } + return _p; +} + +inline struct wsa__ServiceNameType * soap_new_set_wsa__ServiceNameType( + struct soap *soap, + char *__item, + char *PortName, + char *__anyAttribute) +{ + struct wsa__ServiceNameType *_p = ::soap_new_wsa__ServiceNameType(soap); + if (_p) + { ::soap_default_wsa__ServiceNameType(soap, _p); + _p->__item = __item; + _p->PortName = PortName; + _p->__anyAttribute = __anyAttribute; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__ServiceNameType(struct soap*, const struct wsa__ServiceNameType *, const char*, const char*); + +inline int soap_write_wsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsa__ServiceNameType(soap, p), 0) || ::soap_put_wsa__ServiceNameType(soap, p, "wsa:ServiceNameType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsa__ServiceNameType(struct soap *soap, const char *URL, struct wsa__ServiceNameType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ServiceNameType(soap, p), 0) || ::soap_put_wsa__ServiceNameType(soap, p, "wsa:ServiceNameType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsa__ServiceNameType(struct soap *soap, const char *URL, struct wsa__ServiceNameType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ServiceNameType(soap, p), 0) || ::soap_put_wsa__ServiceNameType(soap, p, "wsa:ServiceNameType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsa__ServiceNameType(struct soap *soap, const char *URL, struct wsa__ServiceNameType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ServiceNameType(soap, p), 0) || ::soap_put_wsa__ServiceNameType(soap, p, "wsa:ServiceNameType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsa__ServiceNameType * SOAP_FMAC4 soap_get_wsa__ServiceNameType(struct soap*, struct wsa__ServiceNameType *, const char*, const char*); + +inline int soap_read_wsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType *p) +{ + if (p) + { ::soap_default_wsa__ServiceNameType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsa__ServiceNameType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsa__ServiceNameType(struct soap *soap, const char *URL, struct wsa__ServiceNameType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsa__ServiceNameType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsa__ServiceNameType(struct soap *soap, struct wsa__ServiceNameType *p) +{ + if (::soap_read_wsa__ServiceNameType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsa__ReferenceParametersType_DEFINED +#define SOAP_TYPE_wsa__ReferenceParametersType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__ReferenceParametersType(struct soap*, struct wsa__ReferenceParametersType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__ReferenceParametersType(struct soap*, const struct wsa__ReferenceParametersType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__ReferenceParametersType(struct soap*, const char*, int, const struct wsa__ReferenceParametersType *, const char*); +SOAP_FMAC3 struct wsa__ReferenceParametersType * SOAP_FMAC4 soap_in_wsa__ReferenceParametersType(struct soap*, const char*, struct wsa__ReferenceParametersType *, const char*); +SOAP_FMAC1 struct wsa__ReferenceParametersType * SOAP_FMAC2 soap_instantiate_wsa__ReferenceParametersType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsa__ReferenceParametersType * soap_new_wsa__ReferenceParametersType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsa__ReferenceParametersType(soap, n, NULL, NULL, NULL); +} + +inline struct wsa__ReferenceParametersType * soap_new_req_wsa__ReferenceParametersType( + struct soap *soap, + int __size, + char **__any) +{ + struct wsa__ReferenceParametersType *_p = ::soap_new_wsa__ReferenceParametersType(soap); + if (_p) + { ::soap_default_wsa__ReferenceParametersType(soap, _p); + _p->__size = __size; + _p->__any = __any; + } + return _p; +} + +inline struct wsa__ReferenceParametersType * soap_new_set_wsa__ReferenceParametersType( + struct soap *soap, + int __size, + char **__any) +{ + struct wsa__ReferenceParametersType *_p = ::soap_new_wsa__ReferenceParametersType(soap); + if (_p) + { ::soap_default_wsa__ReferenceParametersType(soap, _p); + _p->__size = __size; + _p->__any = __any; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__ReferenceParametersType(struct soap*, const struct wsa__ReferenceParametersType *, const char*, const char*); + +inline int soap_write_wsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsa__ReferenceParametersType(soap, p), 0) || ::soap_put_wsa__ReferenceParametersType(soap, p, "wsa:ReferenceParametersType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsa__ReferenceParametersType(struct soap *soap, const char *URL, struct wsa__ReferenceParametersType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ReferenceParametersType(soap, p), 0) || ::soap_put_wsa__ReferenceParametersType(soap, p, "wsa:ReferenceParametersType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsa__ReferenceParametersType(struct soap *soap, const char *URL, struct wsa__ReferenceParametersType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ReferenceParametersType(soap, p), 0) || ::soap_put_wsa__ReferenceParametersType(soap, p, "wsa:ReferenceParametersType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsa__ReferenceParametersType(struct soap *soap, const char *URL, struct wsa__ReferenceParametersType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ReferenceParametersType(soap, p), 0) || ::soap_put_wsa__ReferenceParametersType(soap, p, "wsa:ReferenceParametersType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsa__ReferenceParametersType * SOAP_FMAC4 soap_get_wsa__ReferenceParametersType(struct soap*, struct wsa__ReferenceParametersType *, const char*, const char*); + +inline int soap_read_wsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType *p) +{ + if (p) + { ::soap_default_wsa__ReferenceParametersType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsa__ReferenceParametersType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsa__ReferenceParametersType(struct soap *soap, const char *URL, struct wsa__ReferenceParametersType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsa__ReferenceParametersType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsa__ReferenceParametersType(struct soap *soap, struct wsa__ReferenceParametersType *p) +{ + if (::soap_read_wsa__ReferenceParametersType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsa__ReferencePropertiesType_DEFINED +#define SOAP_TYPE_wsa__ReferencePropertiesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__ReferencePropertiesType(struct soap*, struct wsa__ReferencePropertiesType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__ReferencePropertiesType(struct soap*, const struct wsa__ReferencePropertiesType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__ReferencePropertiesType(struct soap*, const char*, int, const struct wsa__ReferencePropertiesType *, const char*); +SOAP_FMAC3 struct wsa__ReferencePropertiesType * SOAP_FMAC4 soap_in_wsa__ReferencePropertiesType(struct soap*, const char*, struct wsa__ReferencePropertiesType *, const char*); +SOAP_FMAC1 struct wsa__ReferencePropertiesType * SOAP_FMAC2 soap_instantiate_wsa__ReferencePropertiesType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsa__ReferencePropertiesType * soap_new_wsa__ReferencePropertiesType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsa__ReferencePropertiesType(soap, n, NULL, NULL, NULL); +} + +inline struct wsa__ReferencePropertiesType * soap_new_req_wsa__ReferencePropertiesType( + struct soap *soap, + int __size, + char **__any) +{ + struct wsa__ReferencePropertiesType *_p = ::soap_new_wsa__ReferencePropertiesType(soap); + if (_p) + { ::soap_default_wsa__ReferencePropertiesType(soap, _p); + _p->__size = __size; + _p->__any = __any; + } + return _p; +} + +inline struct wsa__ReferencePropertiesType * soap_new_set_wsa__ReferencePropertiesType( + struct soap *soap, + int __size, + char **__any) +{ + struct wsa__ReferencePropertiesType *_p = ::soap_new_wsa__ReferencePropertiesType(soap); + if (_p) + { ::soap_default_wsa__ReferencePropertiesType(soap, _p); + _p->__size = __size; + _p->__any = __any; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__ReferencePropertiesType(struct soap*, const struct wsa__ReferencePropertiesType *, const char*, const char*); + +inline int soap_write_wsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsa__ReferencePropertiesType(soap, p), 0) || ::soap_put_wsa__ReferencePropertiesType(soap, p, "wsa:ReferencePropertiesType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsa__ReferencePropertiesType(struct soap *soap, const char *URL, struct wsa__ReferencePropertiesType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ReferencePropertiesType(soap, p), 0) || ::soap_put_wsa__ReferencePropertiesType(soap, p, "wsa:ReferencePropertiesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsa__ReferencePropertiesType(struct soap *soap, const char *URL, struct wsa__ReferencePropertiesType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ReferencePropertiesType(soap, p), 0) || ::soap_put_wsa__ReferencePropertiesType(soap, p, "wsa:ReferencePropertiesType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsa__ReferencePropertiesType(struct soap *soap, const char *URL, struct wsa__ReferencePropertiesType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__ReferencePropertiesType(soap, p), 0) || ::soap_put_wsa__ReferencePropertiesType(soap, p, "wsa:ReferencePropertiesType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsa__ReferencePropertiesType * SOAP_FMAC4 soap_get_wsa__ReferencePropertiesType(struct soap*, struct wsa__ReferencePropertiesType *, const char*, const char*); + +inline int soap_read_wsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType *p) +{ + if (p) + { ::soap_default_wsa__ReferencePropertiesType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsa__ReferencePropertiesType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsa__ReferencePropertiesType(struct soap *soap, const char *URL, struct wsa__ReferencePropertiesType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsa__ReferencePropertiesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsa__ReferencePropertiesType(struct soap *soap, struct wsa__ReferencePropertiesType *p) +{ + if (::soap_read_wsa__ReferencePropertiesType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsa__EndpointReferenceType_DEFINED +#define SOAP_TYPE_wsa__EndpointReferenceType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_default_wsa__EndpointReferenceType(struct soap*, struct wsa__EndpointReferenceType *); +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsa__EndpointReferenceType(struct soap*, const struct wsa__EndpointReferenceType *); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsa__EndpointReferenceType(struct soap*, const char*, int, const struct wsa__EndpointReferenceType *, const char*); +SOAP_FMAC3 struct wsa__EndpointReferenceType * SOAP_FMAC4 soap_in_wsa__EndpointReferenceType(struct soap*, const char*, struct wsa__EndpointReferenceType *, const char*); +SOAP_FMAC1 struct wsa__EndpointReferenceType * SOAP_FMAC2 soap_instantiate_wsa__EndpointReferenceType(struct soap*, int, const char*, const char*, size_t*); + +inline struct wsa__EndpointReferenceType * soap_new_wsa__EndpointReferenceType(struct soap *soap, int n = -1) +{ + return soap_instantiate_wsa__EndpointReferenceType(soap, n, NULL, NULL, NULL); +} + +inline struct wsa__EndpointReferenceType * soap_new_req_wsa__EndpointReferenceType( + struct soap *soap, + char *Address, + int __size, + char **__any) +{ + struct wsa__EndpointReferenceType *_p = ::soap_new_wsa__EndpointReferenceType(soap); + if (_p) + { ::soap_default_wsa__EndpointReferenceType(soap, _p); + _p->Address = Address; + _p->__size = __size; + _p->__any = __any; + } + return _p; +} + +inline struct wsa__EndpointReferenceType * soap_new_set_wsa__EndpointReferenceType( + struct soap *soap, + char *Address, + struct wsa__ReferencePropertiesType *ReferenceProperties, + struct wsa__ReferenceParametersType *ReferenceParameters, + char **PortType, + struct wsa__ServiceNameType *ServiceName, + int __size, + char **__any, + char *__anyAttribute) +{ + struct wsa__EndpointReferenceType *_p = ::soap_new_wsa__EndpointReferenceType(soap); + if (_p) + { ::soap_default_wsa__EndpointReferenceType(soap, _p); + _p->Address = Address; + _p->ReferenceProperties = ReferenceProperties; + _p->ReferenceParameters = ReferenceParameters; + _p->PortType = PortType; + _p->ServiceName = ServiceName; + _p->__size = __size; + _p->__any = __any; + _p->__anyAttribute = __anyAttribute; + } + return _p; +} +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsa__EndpointReferenceType(struct soap*, const struct wsa__EndpointReferenceType *, const char*, const char*); + +inline int soap_write_wsa__EndpointReferenceType(struct soap *soap, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_begin_send(soap) || (::soap_serialize_wsa__EndpointReferenceType(soap, p), 0) || ::soap_put_wsa__EndpointReferenceType(soap, p, "wsa:EndpointReferenceType", "") || soap_end_send(soap)) + return soap->error; + return SOAP_OK; +} + +inline int soap_PUT_wsa__EndpointReferenceType(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__EndpointReferenceType(soap, p), 0) || ::soap_put_wsa__EndpointReferenceType(soap, p, "wsa:EndpointReferenceType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsa__EndpointReferenceType(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__EndpointReferenceType(soap, p), 0) || ::soap_put_wsa__EndpointReferenceType(soap, p, "wsa:EndpointReferenceType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsa__EndpointReferenceType(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || (::soap_serialize_wsa__EndpointReferenceType(soap, p), 0) || ::soap_put_wsa__EndpointReferenceType(soap, p, "wsa:EndpointReferenceType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 struct wsa__EndpointReferenceType * SOAP_FMAC4 soap_get_wsa__EndpointReferenceType(struct soap*, struct wsa__EndpointReferenceType *, const char*, const char*); + +inline int soap_read_wsa__EndpointReferenceType(struct soap *soap, struct wsa__EndpointReferenceType *p) +{ + if (p) + { ::soap_default_wsa__EndpointReferenceType(soap, p); + if (soap_begin_recv(soap) || ::soap_get_wsa__EndpointReferenceType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsa__EndpointReferenceType(struct soap *soap, const char *URL, struct wsa__EndpointReferenceType *p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsa__EndpointReferenceType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsa__EndpointReferenceType(struct soap *soap, struct wsa__EndpointReferenceType *p) +{ + if (::soap_read_wsa__EndpointReferenceType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ResolveMatchesType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ResolveMatchesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ResolveMatchesType(struct soap*, struct wsdd__ResolveMatchesType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ResolveMatchesType(struct soap*, const char *, int, struct wsdd__ResolveMatchesType *const*, const char *); +SOAP_FMAC3 struct wsdd__ResolveMatchesType ** SOAP_FMAC4 soap_in_PointerTowsdd__ResolveMatchesType(struct soap*, const char*, struct wsdd__ResolveMatchesType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ResolveMatchesType(struct soap*, struct wsdd__ResolveMatchesType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ResolveMatchesType ** SOAP_FMAC4 soap_get_PointerTowsdd__ResolveMatchesType(struct soap*, struct wsdd__ResolveMatchesType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ResolveType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ResolveType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ResolveType(struct soap*, struct wsdd__ResolveType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ResolveType(struct soap*, const char *, int, struct wsdd__ResolveType *const*, const char *); +SOAP_FMAC3 struct wsdd__ResolveType ** SOAP_FMAC4 soap_in_PointerTowsdd__ResolveType(struct soap*, const char*, struct wsdd__ResolveType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ResolveType(struct soap*, struct wsdd__ResolveType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ResolveType ** SOAP_FMAC4 soap_get_PointerTowsdd__ResolveType(struct soap*, struct wsdd__ResolveType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ProbeMatchesType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ProbeMatchesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ProbeMatchesType(struct soap*, struct wsdd__ProbeMatchesType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ProbeMatchesType(struct soap*, const char *, int, struct wsdd__ProbeMatchesType *const*, const char *); +SOAP_FMAC3 struct wsdd__ProbeMatchesType ** SOAP_FMAC4 soap_in_PointerTowsdd__ProbeMatchesType(struct soap*, const char*, struct wsdd__ProbeMatchesType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ProbeMatchesType(struct soap*, struct wsdd__ProbeMatchesType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ProbeMatchesType ** SOAP_FMAC4 soap_get_PointerTowsdd__ProbeMatchesType(struct soap*, struct wsdd__ProbeMatchesType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ProbeType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ProbeType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ProbeType(struct soap*, struct wsdd__ProbeType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ProbeType(struct soap*, const char *, int, struct wsdd__ProbeType *const*, const char *); +SOAP_FMAC3 struct wsdd__ProbeType ** SOAP_FMAC4 soap_in_PointerTowsdd__ProbeType(struct soap*, const char*, struct wsdd__ProbeType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ProbeType(struct soap*, struct wsdd__ProbeType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ProbeType ** SOAP_FMAC4 soap_get_PointerTowsdd__ProbeType(struct soap*, struct wsdd__ProbeType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ByeType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ByeType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ByeType(struct soap*, struct wsdd__ByeType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ByeType(struct soap*, const char *, int, struct wsdd__ByeType *const*, const char *); +SOAP_FMAC3 struct wsdd__ByeType ** SOAP_FMAC4 soap_in_PointerTowsdd__ByeType(struct soap*, const char*, struct wsdd__ByeType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ByeType(struct soap*, struct wsdd__ByeType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ByeType ** SOAP_FMAC4 soap_get_PointerTowsdd__ByeType(struct soap*, struct wsdd__ByeType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__HelloType_DEFINED +#define SOAP_TYPE_PointerTowsdd__HelloType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__HelloType(struct soap*, struct wsdd__HelloType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__HelloType(struct soap*, const char *, int, struct wsdd__HelloType *const*, const char *); +SOAP_FMAC3 struct wsdd__HelloType ** SOAP_FMAC4 soap_in_PointerTowsdd__HelloType(struct soap*, const char*, struct wsdd__HelloType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__HelloType(struct soap*, struct wsdd__HelloType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__HelloType ** SOAP_FMAC4 soap_get_PointerTowsdd__HelloType(struct soap*, struct wsdd__HelloType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__AppSequenceType_DEFINED +#define SOAP_TYPE_PointerTowsdd__AppSequenceType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__AppSequenceType(struct soap*, struct wsdd__AppSequenceType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__AppSequenceType(struct soap*, const char *, int, struct wsdd__AppSequenceType *const*, const char *); +SOAP_FMAC3 struct wsdd__AppSequenceType ** SOAP_FMAC4 soap_in_PointerTowsdd__AppSequenceType(struct soap*, const char*, struct wsdd__AppSequenceType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__AppSequenceType(struct soap*, struct wsdd__AppSequenceType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__AppSequenceType ** SOAP_FMAC4 soap_get_PointerTowsdd__AppSequenceType(struct soap*, struct wsdd__AppSequenceType **, const char*, const char*); +#endif +/* _wsdd__Id is a typedef synonym of string */ + +#ifndef SOAP_TYPE__wsdd__Id_DEFINED +#define SOAP_TYPE__wsdd__Id_DEFINED + +#define soap_default__wsdd__Id soap_default_string + + +#define soap_serialize__wsdd__Id soap_serialize_string + + +#define soap__wsdd__Id2s(soap, a) (a) + +#define soap_out__wsdd__Id soap_out_string + + +#define soap_s2_wsdd__Id(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) + +#define soap_in__wsdd__Id soap_in_string + + +#define soap_instantiate__wsdd__Id soap_instantiate_string + + +#define soap_new__wsdd__Id soap_new_string + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsdd__Id(struct soap*, char *const*, const char*, const char*); + +inline int soap_write__wsdd__Id(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put__wsdd__Id(soap, p, "wsdd:Id", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT__wsdd__Id(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsdd__Id(soap, p, "wsdd:Id", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsdd__Id(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsdd__Id(soap, p, "wsdd:Id", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsdd__Id(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsdd__Id(soap, p, "wsdd:Id", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsdd__Id soap_get_string + + +#define soap_read__wsdd__Id soap_read_string + + +#define soap_GET__wsdd__Id soap_GET_string + + +#define soap_POST_recv__wsdd__Id soap_POST_recv_string + +#endif +/* _wsdd__SupportedMatchingRules is a typedef synonym of wsdd__UriListType */ + +#ifndef SOAP_TYPE__wsdd__SupportedMatchingRules_DEFINED +#define SOAP_TYPE__wsdd__SupportedMatchingRules_DEFINED + +#define soap_default__wsdd__SupportedMatchingRules soap_default_wsdd__UriListType + + +#define soap_serialize__wsdd__SupportedMatchingRules soap_serialize_wsdd__UriListType + + +#define soap__wsdd__SupportedMatchingRules2s(soap, a) (a) + +#define soap_out__wsdd__SupportedMatchingRules soap_out_wsdd__UriListType + + +#define soap_s2_wsdd__SupportedMatchingRules(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) + +#define soap_in__wsdd__SupportedMatchingRules soap_in_wsdd__UriListType + + +#define soap_instantiate__wsdd__SupportedMatchingRules soap_instantiate_wsdd__UriListType + + +#define soap_new__wsdd__SupportedMatchingRules soap_new_wsdd__UriListType + + +#define soap_put__wsdd__SupportedMatchingRules soap_put_wsdd__UriListType + + +#define soap_write__wsdd__SupportedMatchingRules soap_write_wsdd__UriListType + + +#define soap_PUT__wsdd__SupportedMatchingRules soap_PUT_wsdd__UriListType + + +#define soap_PATCH__wsdd__SupportedMatchingRules soap_PATCH_wsdd__UriListType + + +#define soap_POST_send__wsdd__SupportedMatchingRules soap_POST_send_wsdd__UriListType + + +#define soap_get__wsdd__SupportedMatchingRules soap_get_wsdd__UriListType + + +#define soap_read__wsdd__SupportedMatchingRules soap_read_wsdd__UriListType + + +#define soap_GET__wsdd__SupportedMatchingRules soap_GET_wsdd__UriListType + + +#define soap_POST_recv__wsdd__SupportedMatchingRules soap_POST_recv_wsdd__UriListType + +#endif +/* _wsdd__XAddrs is a typedef synonym of wsdd__UriListType */ + +#ifndef SOAP_TYPE__wsdd__XAddrs_DEFINED +#define SOAP_TYPE__wsdd__XAddrs_DEFINED + +#define soap_default__wsdd__XAddrs soap_default_wsdd__UriListType + + +#define soap_serialize__wsdd__XAddrs soap_serialize_wsdd__UriListType + + +#define soap__wsdd__XAddrs2s(soap, a) (a) + +#define soap_out__wsdd__XAddrs soap_out_wsdd__UriListType + + +#define soap_s2_wsdd__XAddrs(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) + +#define soap_in__wsdd__XAddrs soap_in_wsdd__UriListType + + +#define soap_instantiate__wsdd__XAddrs soap_instantiate_wsdd__UriListType + + +#define soap_new__wsdd__XAddrs soap_new_wsdd__UriListType + + +#define soap_put__wsdd__XAddrs soap_put_wsdd__UriListType + + +#define soap_write__wsdd__XAddrs soap_write_wsdd__UriListType + + +#define soap_PUT__wsdd__XAddrs soap_PUT_wsdd__UriListType + + +#define soap_PATCH__wsdd__XAddrs soap_PATCH_wsdd__UriListType + + +#define soap_POST_send__wsdd__XAddrs soap_POST_send_wsdd__UriListType + + +#define soap_get__wsdd__XAddrs soap_get_wsdd__UriListType + + +#define soap_read__wsdd__XAddrs soap_read_wsdd__UriListType + + +#define soap_GET__wsdd__XAddrs soap_GET_wsdd__UriListType + + +#define soap_POST_recv__wsdd__XAddrs soap_POST_recv_wsdd__UriListType + +#endif +/* _wsdd__Types is a typedef synonym of wsdd__QNameListType */ + +#ifndef SOAP_TYPE__wsdd__Types_DEFINED +#define SOAP_TYPE__wsdd__Types_DEFINED + +#define soap_default__wsdd__Types soap_default_wsdd__QNameListType + + +#define soap_serialize__wsdd__Types soap_serialize_wsdd__QNameListType + + +#define soap__wsdd__Types2s(soap, a) soap_QName2s(soap, (a)) + +#define soap_out__wsdd__Types soap_out_wsdd__QNameListType + + +#define soap_s2_wsdd__Types(soap, s, a) soap_s2QName((soap), (s), (char**)(a), 0, -1, NULL) + +#define soap_in__wsdd__Types soap_in_wsdd__QNameListType + + +#define soap_instantiate__wsdd__Types soap_instantiate_wsdd__QNameListType + + +#define soap_new__wsdd__Types soap_new_wsdd__QNameListType + + +#define soap_put__wsdd__Types soap_put_wsdd__QNameListType + + +#define soap_write__wsdd__Types soap_write_wsdd__QNameListType + + +#define soap_PUT__wsdd__Types soap_PUT_wsdd__QNameListType + + +#define soap_PATCH__wsdd__Types soap_PATCH_wsdd__QNameListType + + +#define soap_POST_send__wsdd__Types soap_POST_send_wsdd__QNameListType + + +#define soap_get__wsdd__Types soap_get_wsdd__QNameListType + + +#define soap_read__wsdd__Types soap_read_wsdd__QNameListType + + +#define soap_GET__wsdd__Types soap_GET_wsdd__QNameListType + + +#define soap_POST_recv__wsdd__Types soap_POST_recv_wsdd__QNameListType + +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__SigType_DEFINED +#define SOAP_TYPE_PointerTowsdd__SigType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__SigType(struct soap*, struct wsdd__SigType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__SigType(struct soap*, const char *, int, struct wsdd__SigType *const*, const char *); +SOAP_FMAC3 struct wsdd__SigType ** SOAP_FMAC4 soap_in_PointerTowsdd__SigType(struct soap*, const char*, struct wsdd__SigType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__SigType(struct soap*, struct wsdd__SigType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__SigType ** SOAP_FMAC4 soap_get_PointerTowsdd__SigType(struct soap*, struct wsdd__SigType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ResolveMatchType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ResolveMatchType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ResolveMatchType(struct soap*, struct wsdd__ResolveMatchType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ResolveMatchType(struct soap*, const char *, int, struct wsdd__ResolveMatchType *const*, const char *); +SOAP_FMAC3 struct wsdd__ResolveMatchType ** SOAP_FMAC4 soap_in_PointerTowsdd__ResolveMatchType(struct soap*, const char*, struct wsdd__ResolveMatchType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ResolveMatchType(struct soap*, struct wsdd__ResolveMatchType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ResolveMatchType ** SOAP_FMAC4 soap_get_PointerTowsdd__ResolveMatchType(struct soap*, struct wsdd__ResolveMatchType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ProbeMatchType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ProbeMatchType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ProbeMatchType(struct soap*, struct wsdd__ProbeMatchType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ProbeMatchType(struct soap*, const char *, int, struct wsdd__ProbeMatchType *const*, const char *); +SOAP_FMAC3 struct wsdd__ProbeMatchType ** SOAP_FMAC4 soap_in_PointerTowsdd__ProbeMatchType(struct soap*, const char*, struct wsdd__ProbeMatchType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ProbeMatchType(struct soap*, struct wsdd__ProbeMatchType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ProbeMatchType ** SOAP_FMAC4 soap_get_PointerTowsdd__ProbeMatchType(struct soap*, struct wsdd__ProbeMatchType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTounsignedInt_DEFINED +#define SOAP_TYPE_PointerTounsignedInt_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedInt(struct soap*, unsigned int *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedInt(struct soap*, const char *, int, unsigned int *const*, const char *); +SOAP_FMAC3 unsigned int ** SOAP_FMAC4 soap_in_PointerTounsignedInt(struct soap*, const char*, unsigned int **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedInt(struct soap*, unsigned int *const*, const char*, const char*); +SOAP_FMAC3 unsigned int ** SOAP_FMAC4 soap_get_PointerTounsignedInt(struct soap*, unsigned int **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsdd__ScopesType_DEFINED +#define SOAP_TYPE_PointerTowsdd__ScopesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsdd__ScopesType(struct soap*, struct wsdd__ScopesType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsdd__ScopesType(struct soap*, const char *, int, struct wsdd__ScopesType *const*, const char *); +SOAP_FMAC3 struct wsdd__ScopesType ** SOAP_FMAC4 soap_in_PointerTowsdd__ScopesType(struct soap*, const char*, struct wsdd__ScopesType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsdd__ScopesType(struct soap*, struct wsdd__ScopesType *const*, const char*, const char*); +SOAP_FMAC3 struct wsdd__ScopesType ** SOAP_FMAC4 soap_get_PointerTowsdd__ScopesType(struct soap*, struct wsdd__ScopesType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_wsdd__FaultCodeOpenType_DEFINED +#define SOAP_TYPE_wsdd__FaultCodeOpenType_DEFINED + +inline void soap_default_wsdd__FaultCodeOpenType(struct soap *soap, char **a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_wsdd__FaultCodeOpenType + *a = SOAP_DEFAULT_wsdd__FaultCodeOpenType; +#else + *a = (char *)0; +#endif +} +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__FaultCodeOpenType(struct soap*, char *const*); + +#define soap_wsdd__FaultCodeOpenType2s(soap, a) (a) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__FaultCodeOpenType(struct soap*, const char*, int, char*const*, const char*); + +#define soap_s2wsdd__FaultCodeOpenType(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_wsdd__FaultCodeOpenType(struct soap*, const char*, char **, const char*); + +#define soap_instantiate_wsdd__FaultCodeOpenType soap_instantiate_string + + +#define soap_new_wsdd__FaultCodeOpenType soap_new_string + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__FaultCodeOpenType(struct soap*, char *const*, const char*, const char*); + +inline int soap_write_wsdd__FaultCodeOpenType(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_wsdd__FaultCodeOpenType(soap, p, "wsdd:FaultCodeOpenType", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_wsdd__FaultCodeOpenType(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__FaultCodeOpenType(soap, p, "wsdd:FaultCodeOpenType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__FaultCodeOpenType(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__FaultCodeOpenType(soap, p, "wsdd:FaultCodeOpenType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__FaultCodeOpenType(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__FaultCodeOpenType(soap, p, "wsdd:FaultCodeOpenType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_wsdd__FaultCodeOpenType(struct soap*, char **, const char*, const char*); + +inline int soap_read_wsdd__FaultCodeOpenType(struct soap *soap, char **p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_wsdd__FaultCodeOpenType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__FaultCodeOpenType(struct soap *soap, const char *URL, char **p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__FaultCodeOpenType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__FaultCodeOpenType(struct soap *soap, char **p) +{ + if (::soap_read_wsdd__FaultCodeOpenType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE_wsdd__UriListType_DEFINED +#define SOAP_TYPE_wsdd__UriListType_DEFINED + +inline void soap_default_wsdd__UriListType(struct soap *soap, char **a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_wsdd__UriListType + *a = SOAP_DEFAULT_wsdd__UriListType; +#else + *a = (char *)0; +#endif +} +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_wsdd__UriListType(struct soap*, char *const*); + +#define soap_wsdd__UriListType2s(soap, a) (a) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_wsdd__UriListType(struct soap*, const char*, int, char*const*, const char*); + +#define soap_s2wsdd__UriListType(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_wsdd__UriListType(struct soap*, const char*, char **, const char*); + +#define soap_instantiate_wsdd__UriListType soap_instantiate_string + + +#define soap_new_wsdd__UriListType soap_new_string + +SOAP_FMAC3 int SOAP_FMAC4 soap_put_wsdd__UriListType(struct soap*, char *const*, const char*, const char*); + +inline int soap_write_wsdd__UriListType(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_wsdd__UriListType(soap, p, "wsdd:UriListType", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_wsdd__UriListType(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__UriListType(soap, p, "wsdd:UriListType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_wsdd__UriListType(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__UriListType(soap, p, "wsdd:UriListType", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_wsdd__UriListType(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_wsdd__UriListType(soap, p, "wsdd:UriListType", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_wsdd__UriListType(struct soap*, char **, const char*, const char*); + +inline int soap_read_wsdd__UriListType(struct soap *soap, char **p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_wsdd__UriListType(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_wsdd__UriListType(struct soap *soap, const char *URL, char **p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_wsdd__UriListType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_wsdd__UriListType(struct soap *soap, char **p) +{ + if (::soap_read_wsdd__UriListType(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif +/* wsdd__QNameListType is a typedef synonym of _QName */ + +#ifndef SOAP_TYPE_wsdd__QNameListType_DEFINED +#define SOAP_TYPE_wsdd__QNameListType_DEFINED + +#define soap_default_wsdd__QNameListType soap_default__QName + + +#define soap_serialize_wsdd__QNameListType soap_serialize__QName + + +#define soap_wsdd__QNameListType2s(soap, a) soap_QName2s(soap, (a)) + +#define soap_out_wsdd__QNameListType soap_out__QName + + +#define soap_s2wsdd__QNameListType(soap, s, a) soap_s2QName((soap), (s), (char**)(a), 0, -1, NULL) + +#define soap_in_wsdd__QNameListType soap_in__QName + + +#define soap_instantiate_wsdd__QNameListType soap_instantiate__QName + + +#define soap_new_wsdd__QNameListType soap_new__QName + + +#define soap_put_wsdd__QNameListType soap_put__QName + + +#define soap_write_wsdd__QNameListType soap_write__QName + + +#define soap_PUT_wsdd__QNameListType soap_PUT__QName + + +#define soap_PATCH_wsdd__QNameListType soap_PATCH__QName + + +#define soap_POST_send_wsdd__QNameListType soap_POST_send__QName + + +#define soap_get_wsdd__QNameListType soap_get__QName + + +#define soap_read_wsdd__QNameListType soap_read__QName + + +#define soap_GET_wsdd__QNameListType soap_GET__QName + + +#define soap_POST_recv_wsdd__QNameListType soap_POST_recv__QName + +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_PointerToSOAP_ENV__Reason_DEFINED +#define SOAP_TYPE_PointerToSOAP_ENV__Reason_DEFINED +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*); +SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*); +#endif + +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_PointerToSOAP_ENV__Code_DEFINED +#define SOAP_TYPE_PointerToSOAP_ENV__Code_DEFINED +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*); +SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*); +#endif + +#endif + +#ifndef WITH_NOGLOBAL + +#ifndef SOAP_TYPE_PointerToSOAP_ENV__Detail_DEFINED +#define SOAP_TYPE_PointerToSOAP_ENV__Detail_DEFINED +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*); +SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*); +#endif + +#endif + +#ifndef SOAP_TYPE_PointerTo_wsa__FaultTo_DEFINED +#define SOAP_TYPE_PointerTo_wsa__FaultTo_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__FaultTo(struct soap*, struct wsa__EndpointReferenceType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__FaultTo(struct soap*, const char *, int, struct wsa__EndpointReferenceType *const*, const char *); +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_in_PointerTo_wsa__FaultTo(struct soap*, const char*, struct wsa__EndpointReferenceType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__FaultTo(struct soap*, struct wsa__EndpointReferenceType *const*, const char*, const char*); +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_get_PointerTo_wsa__FaultTo(struct soap*, struct wsa__EndpointReferenceType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTo_wsa__ReplyTo_DEFINED +#define SOAP_TYPE_PointerTo_wsa__ReplyTo_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__ReplyTo(struct soap*, struct wsa__EndpointReferenceType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__ReplyTo(struct soap*, const char *, int, struct wsa__EndpointReferenceType *const*, const char *); +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_in_PointerTo_wsa__ReplyTo(struct soap*, const char*, struct wsa__EndpointReferenceType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__ReplyTo(struct soap*, struct wsa__EndpointReferenceType *const*, const char*, const char*); +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_get_PointerTo_wsa__ReplyTo(struct soap*, struct wsa__EndpointReferenceType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTo_wsa__From_DEFINED +#define SOAP_TYPE_PointerTo_wsa__From_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__From(struct soap*, struct wsa__EndpointReferenceType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__From(struct soap*, const char *, int, struct wsa__EndpointReferenceType *const*, const char *); +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_in_PointerTo_wsa__From(struct soap*, const char*, struct wsa__EndpointReferenceType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__From(struct soap*, struct wsa__EndpointReferenceType *const*, const char*, const char*); +SOAP_FMAC3 struct wsa__EndpointReferenceType ** SOAP_FMAC4 soap_get_PointerTo_wsa__From(struct soap*, struct wsa__EndpointReferenceType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTo_wsa__RelatesTo_DEFINED +#define SOAP_TYPE_PointerTo_wsa__RelatesTo_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_wsa__RelatesTo(struct soap*, struct wsa__Relationship *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_wsa__RelatesTo(struct soap*, const char *, int, struct wsa__Relationship *const*, const char *); +SOAP_FMAC3 struct wsa__Relationship ** SOAP_FMAC4 soap_in_PointerTo_wsa__RelatesTo(struct soap*, const char*, struct wsa__Relationship **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_wsa__RelatesTo(struct soap*, struct wsa__Relationship *const*, const char*, const char*); +SOAP_FMAC3 struct wsa__Relationship ** SOAP_FMAC4 soap_get_PointerTo_wsa__RelatesTo(struct soap*, struct wsa__Relationship **, const char*, const char*); +#endif +/* _wsa__Action is a typedef synonym of string */ + +#ifndef SOAP_TYPE__wsa__Action_DEFINED +#define SOAP_TYPE__wsa__Action_DEFINED + +#define soap_default__wsa__Action soap_default_string + + +#define soap_serialize__wsa__Action soap_serialize_string + + +#define soap__wsa__Action2s(soap, a) (a) + +#define soap_out__wsa__Action soap_out_string + + +#define soap_s2_wsa__Action(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) + +#define soap_in__wsa__Action soap_in_string + + +#define soap_instantiate__wsa__Action soap_instantiate_string + + +#define soap_new__wsa__Action soap_new_string + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__Action(struct soap*, char *const*, const char*, const char*); + +inline int soap_write__wsa__Action(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put__wsa__Action(soap, p, "wsa:Action", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT__wsa__Action(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__Action(soap, p, "wsa:Action", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__Action(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__Action(soap, p, "wsa:Action", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__Action(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__Action(soap, p, "wsa:Action", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__Action soap_get_string + + +#define soap_read__wsa__Action soap_read_string + + +#define soap_GET__wsa__Action soap_GET_string + + +#define soap_POST_recv__wsa__Action soap_POST_recv_string + +#endif +/* _wsa__To is a typedef synonym of string */ + +#ifndef SOAP_TYPE__wsa__To_DEFINED +#define SOAP_TYPE__wsa__To_DEFINED + +#define soap_default__wsa__To soap_default_string + + +#define soap_serialize__wsa__To soap_serialize_string + + +#define soap__wsa__To2s(soap, a) (a) + +#define soap_out__wsa__To soap_out_string + + +#define soap_s2_wsa__To(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) + +#define soap_in__wsa__To soap_in_string + + +#define soap_instantiate__wsa__To soap_instantiate_string + + +#define soap_new__wsa__To soap_new_string + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__To(struct soap*, char *const*, const char*, const char*); + +inline int soap_write__wsa__To(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put__wsa__To(soap, p, "wsa:To", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT__wsa__To(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__To(soap, p, "wsa:To", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__To(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__To(soap, p, "wsa:To", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__To(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__To(soap, p, "wsa:To", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__To soap_get_string + + +#define soap_read__wsa__To soap_read_string + + +#define soap_GET__wsa__To soap_GET_string + + +#define soap_POST_recv__wsa__To soap_POST_recv_string + +#endif +/* _wsa__MessageID is a typedef synonym of string */ + +#ifndef SOAP_TYPE__wsa__MessageID_DEFINED +#define SOAP_TYPE__wsa__MessageID_DEFINED + +#define soap_default__wsa__MessageID soap_default_string + + +#define soap_serialize__wsa__MessageID soap_serialize_string + + +#define soap__wsa__MessageID2s(soap, a) (a) + +#define soap_out__wsa__MessageID soap_out_string + + +#define soap_s2_wsa__MessageID(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) + +#define soap_in__wsa__MessageID soap_in_string + + +#define soap_instantiate__wsa__MessageID soap_instantiate_string + + +#define soap_new__wsa__MessageID soap_new_string + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__wsa__MessageID(struct soap*, char *const*, const char*, const char*); + +inline int soap_write__wsa__MessageID(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put__wsa__MessageID(soap, p, "wsa:MessageID", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT__wsa__MessageID(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__MessageID(soap, p, "wsa:MessageID", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__wsa__MessageID(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__MessageID(soap, p, "wsa:MessageID", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__wsa__MessageID(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__wsa__MessageID(soap, p, "wsa:MessageID", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +#define soap_get__wsa__MessageID soap_get_string + + +#define soap_read__wsa__MessageID soap_read_string + + +#define soap_GET__wsa__MessageID soap_GET_string + + +#define soap_POST_recv__wsa__MessageID soap_POST_recv_string + +#endif + +#ifndef SOAP_TYPE_PointerTo_XML_DEFINED +#define SOAP_TYPE_PointerTo_XML_DEFINED +#endif + +#ifndef SOAP_TYPE_PointerTowsa__ServiceNameType_DEFINED +#define SOAP_TYPE_PointerTowsa__ServiceNameType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsa__ServiceNameType(struct soap*, struct wsa__ServiceNameType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsa__ServiceNameType(struct soap*, const char *, int, struct wsa__ServiceNameType *const*, const char *); +SOAP_FMAC3 struct wsa__ServiceNameType ** SOAP_FMAC4 soap_in_PointerTowsa__ServiceNameType(struct soap*, const char*, struct wsa__ServiceNameType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsa__ServiceNameType(struct soap*, struct wsa__ServiceNameType *const*, const char*, const char*); +SOAP_FMAC3 struct wsa__ServiceNameType ** SOAP_FMAC4 soap_get_PointerTowsa__ServiceNameType(struct soap*, struct wsa__ServiceNameType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTo_QName_DEFINED +#define SOAP_TYPE_PointerTo_QName_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTo_QName(struct soap*, char **const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTo_QName(struct soap*, const char *, int, char **const*, const char *); +SOAP_FMAC3 char *** SOAP_FMAC4 soap_in_PointerTo_QName(struct soap*, const char*, char ***, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTo_QName(struct soap*, char **const*, const char*, const char*); +SOAP_FMAC3 char *** SOAP_FMAC4 soap_get_PointerTo_QName(struct soap*, char ***, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsa__ReferenceParametersType_DEFINED +#define SOAP_TYPE_PointerTowsa__ReferenceParametersType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsa__ReferenceParametersType(struct soap*, struct wsa__ReferenceParametersType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsa__ReferenceParametersType(struct soap*, const char *, int, struct wsa__ReferenceParametersType *const*, const char *); +SOAP_FMAC3 struct wsa__ReferenceParametersType ** SOAP_FMAC4 soap_in_PointerTowsa__ReferenceParametersType(struct soap*, const char*, struct wsa__ReferenceParametersType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsa__ReferenceParametersType(struct soap*, struct wsa__ReferenceParametersType *const*, const char*, const char*); +SOAP_FMAC3 struct wsa__ReferenceParametersType ** SOAP_FMAC4 soap_get_PointerTowsa__ReferenceParametersType(struct soap*, struct wsa__ReferenceParametersType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE_PointerTowsa__ReferencePropertiesType_DEFINED +#define SOAP_TYPE_PointerTowsa__ReferencePropertiesType_DEFINED +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTowsa__ReferencePropertiesType(struct soap*, struct wsa__ReferencePropertiesType *const*); +SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTowsa__ReferencePropertiesType(struct soap*, const char *, int, struct wsa__ReferencePropertiesType *const*, const char *); +SOAP_FMAC3 struct wsa__ReferencePropertiesType ** SOAP_FMAC4 soap_in_PointerTowsa__ReferencePropertiesType(struct soap*, const char*, struct wsa__ReferencePropertiesType **, const char*); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTowsa__ReferencePropertiesType(struct soap*, struct wsa__ReferencePropertiesType *const*, const char*, const char*); +SOAP_FMAC3 struct wsa__ReferencePropertiesType ** SOAP_FMAC4 soap_get_PointerTowsa__ReferencePropertiesType(struct soap*, struct wsa__ReferencePropertiesType **, const char*, const char*); +#endif + +#ifndef SOAP_TYPE__QName_DEFINED +#define SOAP_TYPE__QName_DEFINED + +inline void soap_default__QName(struct soap *soap, char **a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT__QName + *a = SOAP_DEFAULT__QName; +#else + *a = (char *)0; +#endif +} +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize__QName(struct soap*, char *const*); + +#define soap__QName2s(soap, a) soap_QName2s(soap, (a)) +SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap*, const char*, int, char*const*, const char*); + +#define soap_s2_QName(soap, s, a) soap_s2QName((soap), (s), (char**)(a), 0, -1, NULL) +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap*, const char*, char **, const char*); + +#define soap_instantiate__QName soap_instantiate_string + + +#define soap_new__QName soap_new_string + +SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*); + +inline int soap_write__QName(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put__QName(soap, p, "QName", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT__QName(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__QName(soap, p, "QName", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH__QName(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__QName(soap, p, "QName", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send__QName(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put__QName(soap, p, "QName", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*); + +inline int soap_read__QName(struct soap *soap, char **p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get__QName(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET__QName(struct soap *soap, const char *URL, char **p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read__QName(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv__QName(struct soap *soap, char **p) +{ + if (::soap_read__QName(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#ifndef SOAP_TYPE__XML_DEFINED +#define SOAP_TYPE__XML_DEFINED +#endif + +#ifndef SOAP_TYPE_string_DEFINED +#define SOAP_TYPE_string_DEFINED + +inline void soap_default_string(struct soap *soap, char **a) +{ + (void)soap; /* appease -Wall -Werror */ +#ifdef SOAP_DEFAULT_string + *a = SOAP_DEFAULT_string; +#else + *a = (char *)0; +#endif +} +SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap*, char *const*); + +#define soap_string2s(soap, a) (a) +SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap*, const char*, int, char*const*, const char*); + +#define soap_s2string(soap, s, a) soap_s2char((soap), (s), (char**)(a), 1, 0, -1, NULL) +SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*); + +SOAP_FMAC3 char * * SOAP_FMAC4 soap_new_string(struct soap *soap, int n = -1); +SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*); + +inline int soap_write_string(struct soap *soap, char *const*p) +{ + soap_free_temp(soap); + if (p) + { if (soap_begin_send(soap) || ::soap_put_string(soap, p, "string", "") || soap_end_send(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_PUT_string(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PUT(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_string(soap, p, "string", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_PATCH_string(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_PATCH(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_string(soap, p, "string", "") || soap_end_send(soap) || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} + +inline int soap_POST_send_string(struct soap *soap, const char *URL, char *const*p) +{ + soap_free_temp(soap); + if (soap_POST(soap, URL, NULL, "text/xml; charset=utf-8") || ::soap_put_string(soap, p, "string", "") || soap_end_send(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*); + +inline int soap_read_string(struct soap *soap, char **p) +{ + if (p) + { if (soap_begin_recv(soap) || ::soap_get_string(soap, p, NULL, NULL) == NULL || soap_end_recv(soap)) + return soap->error; + } + return SOAP_OK; +} + +inline int soap_GET_string(struct soap *soap, const char *URL, char **p) +{ + if (soap_GET(soap, URL, NULL) || ::soap_read_string(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} + +inline int soap_POST_recv_string(struct soap *soap, char **p) +{ + if (::soap_read_string(soap, p)) + return soap_closesock(soap); + return soap_closesock(soap); +} +#endif + +#endif + +/* End of soapH.h */ diff --git a/unit_test/test/onvif/onvif-discover/soapServer.cpp b/unit_test/test/onvif/onvif-discover/soapServer.cpp new file mode 100644 index 0000000..3efea07 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/soapServer.cpp @@ -0,0 +1,316 @@ +/* soapServer.cpp + Generated by gSOAP 2.8.135 for ../onvif_head/onvif.h + +gSOAP XML Web services tools +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc. All Rights Reserved. +The soapcpp2 tool and its generated software are released under the GPL. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#if defined(__BORLANDC__) +#pragma option push -w-8060 +#pragma option push -w-8004 +#endif +#include "soapH.h" + +SOAP_SOURCE_STAMP("@(#) soapServer.cpp ver 2.8.135 2024-09-04 02:23:14 GMT") +extern "C" SOAP_FMAC5 int SOAP_FMAC6 soap_serve(struct soap *soap) +{ +#ifndef WITH_FASTCGI + soap->keep_alive = soap->max_keep_alive + 1; +#endif + do + { +#ifndef WITH_FASTCGI + if (soap->keep_alive > 0 && soap->max_keep_alive > 0) + soap->keep_alive--; +#endif + if (soap_begin_serve(soap)) + { if (soap->error >= SOAP_STOP) + continue; + return soap->error; + } + if ((soap_serve_request(soap) || (soap->fserveloop && soap->fserveloop(soap))) && soap->error && soap->error < SOAP_STOP) + { +#ifdef WITH_FASTCGI + soap_send_fault(soap); +#else + return soap_send_fault(soap); +#endif + } +#ifdef WITH_FASTCGI + soap_destroy(soap); + soap_end(soap); + } while (1); +#else + } while (soap->keep_alive); +#endif + return SOAP_OK; +} + +#ifndef WITH_NOSERVEREQUEST +extern "C" SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request(struct soap *soap) +{ + (void)soap_peek_element(soap); + if (!soap_match_tag(soap, soap->tag, "SOAP-ENV:Fault")) + return soap_serve_SOAP_ENV__Fault(soap); + if (!soap_match_tag(soap, soap->tag, "wsdd:Hello")) + return soap_serve___wsdd__Hello(soap); + if (!soap_match_tag(soap, soap->tag, "wsdd:Bye")) + return soap_serve___wsdd__Bye(soap); + if (!soap_match_tag(soap, soap->tag, "wsdd:Probe")) + return soap_serve___wsdd__Probe(soap); + if (!soap_match_tag(soap, soap->tag, "wsdd:ProbeMatches")) + return soap_serve___wsdd__ProbeMatches(soap); + if (!soap_match_tag(soap, soap->tag, "wsdd:Resolve")) + return soap_serve___wsdd__Resolve(soap); + if (!soap_match_tag(soap, soap->tag, "wsdd:ResolveMatches")) + return soap_serve___wsdd__ResolveMatches(soap); + if (!soap_match_tag(soap, soap->tag, "tdn:Hello")) + return soap_serve___tdn__Hello(soap); + if (!soap_match_tag(soap, soap->tag, "tdn:Bye")) + return soap_serve___tdn__Bye(soap); + if (!soap_match_tag(soap, soap->tag, "tdn:Probe")) + return soap_serve___tdn__Probe(soap); + return soap->error = SOAP_NO_METHOD; +} +#endif + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve_SOAP_ENV__Fault(struct soap *soap) +{ struct SOAP_ENV__Fault soap_tmp_SOAP_ENV__Fault; + soap_default_SOAP_ENV__Fault(soap, &soap_tmp_SOAP_ENV__Fault); + if (!soap_get_SOAP_ENV__Fault(soap, &soap_tmp_SOAP_ENV__Fault, "SOAP-ENV:Fault", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = SOAP_ENV__Fault(soap, soap_tmp_SOAP_ENV__Fault.faultcode, soap_tmp_SOAP_ENV__Fault.faultstring, soap_tmp_SOAP_ENV__Fault.faultactor, soap_tmp_SOAP_ENV__Fault.detail, soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Code, soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Reason, soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Node, soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Role, soap_tmp_SOAP_ENV__Fault.SOAP_ENV__Detail); + if (soap->error) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Hello(struct soap *soap) +{ struct __wsdd__Hello soap_tmp___wsdd__Hello; + soap_default___wsdd__Hello(soap, &soap_tmp___wsdd__Hello); + if (!soap_get___wsdd__Hello(soap, &soap_tmp___wsdd__Hello, "-wsdd:Hello", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __wsdd__Hello(soap, soap_tmp___wsdd__Hello.wsdd__Hello); + if (soap->error) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Bye(struct soap *soap) +{ struct __wsdd__Bye soap_tmp___wsdd__Bye; + soap_default___wsdd__Bye(soap, &soap_tmp___wsdd__Bye); + if (!soap_get___wsdd__Bye(soap, &soap_tmp___wsdd__Bye, "-wsdd:Bye", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __wsdd__Bye(soap, soap_tmp___wsdd__Bye.wsdd__Bye); + if (soap->error) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Probe(struct soap *soap) +{ struct __wsdd__Probe soap_tmp___wsdd__Probe; + soap_default___wsdd__Probe(soap, &soap_tmp___wsdd__Probe); + if (!soap_get___wsdd__Probe(soap, &soap_tmp___wsdd__Probe, "-wsdd:Probe", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __wsdd__Probe(soap, soap_tmp___wsdd__Probe.wsdd__Probe); + if (soap->error) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__ProbeMatches(struct soap *soap) +{ struct __wsdd__ProbeMatches soap_tmp___wsdd__ProbeMatches; + soap_default___wsdd__ProbeMatches(soap, &soap_tmp___wsdd__ProbeMatches); + if (!soap_get___wsdd__ProbeMatches(soap, &soap_tmp___wsdd__ProbeMatches, "-wsdd:ProbeMatches", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __wsdd__ProbeMatches(soap, soap_tmp___wsdd__ProbeMatches.wsdd__ProbeMatches); + if (soap->error) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Resolve(struct soap *soap) +{ struct __wsdd__Resolve soap_tmp___wsdd__Resolve; + soap_default___wsdd__Resolve(soap, &soap_tmp___wsdd__Resolve); + if (!soap_get___wsdd__Resolve(soap, &soap_tmp___wsdd__Resolve, "-wsdd:Resolve", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __wsdd__Resolve(soap, soap_tmp___wsdd__Resolve.wsdd__Resolve); + if (soap->error) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__ResolveMatches(struct soap *soap) +{ struct __wsdd__ResolveMatches soap_tmp___wsdd__ResolveMatches; + soap_default___wsdd__ResolveMatches(soap, &soap_tmp___wsdd__ResolveMatches); + if (!soap_get___wsdd__ResolveMatches(soap, &soap_tmp___wsdd__ResolveMatches, "-wsdd:ResolveMatches", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __wsdd__ResolveMatches(soap, soap_tmp___wsdd__ResolveMatches.wsdd__ResolveMatches); + if (soap->error) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___tdn__Hello(struct soap *soap) +{ struct __tdn__Hello soap_tmp___tdn__Hello; + struct wsdd__ResolveType tdn__HelloResponse; + soap_default_wsdd__ResolveType(soap, &tdn__HelloResponse); + soap_default___tdn__Hello(soap, &soap_tmp___tdn__Hello); + if (!soap_get___tdn__Hello(soap, &soap_tmp___tdn__Hello, "-tdn:Hello", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __tdn__Hello(soap, soap_tmp___tdn__Hello.tdn__Hello, tdn__HelloResponse); + if (soap->error) + return soap->error; + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize_wsdd__ResolveType(soap, &tdn__HelloResponse); + 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_wsdd__ResolveType(soap, &tdn__HelloResponse, "tdn:HelloResponse", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap)) + return soap->error; + }; + if (soap_end_count(soap) + || soap_response(soap, SOAP_OK) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put_wsdd__ResolveType(soap, &tdn__HelloResponse, "tdn:HelloResponse", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___tdn__Bye(struct soap *soap) +{ struct __tdn__Bye soap_tmp___tdn__Bye; + struct wsdd__ResolveType tdn__ByeResponse; + soap_default_wsdd__ResolveType(soap, &tdn__ByeResponse); + soap_default___tdn__Bye(soap, &soap_tmp___tdn__Bye); + if (!soap_get___tdn__Bye(soap, &soap_tmp___tdn__Bye, "-tdn:Bye", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __tdn__Bye(soap, soap_tmp___tdn__Bye.tdn__Bye, tdn__ByeResponse); + if (soap->error) + return soap->error; + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize_wsdd__ResolveType(soap, &tdn__ByeResponse); + 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_wsdd__ResolveType(soap, &tdn__ByeResponse, "tdn:ByeResponse", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap)) + return soap->error; + }; + if (soap_end_count(soap) + || soap_response(soap, SOAP_OK) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put_wsdd__ResolveType(soap, &tdn__ByeResponse, "tdn:ByeResponse", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap->error; + return soap_closesock(soap); +} + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___tdn__Probe(struct soap *soap) +{ struct __tdn__Probe soap_tmp___tdn__Probe; + struct wsdd__ProbeMatchesType tdn__ProbeResponse; + soap_default_wsdd__ProbeMatchesType(soap, &tdn__ProbeResponse); + soap_default___tdn__Probe(soap, &soap_tmp___tdn__Probe); + if (!soap_get___tdn__Probe(soap, &soap_tmp___tdn__Probe, "-tdn:Probe", NULL)) + return soap->error; + if (soap_body_end_in(soap) + || soap_envelope_end_in(soap) + || soap_end_recv(soap)) + return soap->error; + soap->error = __tdn__Probe(soap, soap_tmp___tdn__Probe.tdn__Probe, tdn__ProbeResponse); + if (soap->error) + return soap->error; + soap->encodingStyle = NULL; /* use SOAP literal style */ + soap_serializeheader(soap); + soap_serialize_wsdd__ProbeMatchesType(soap, &tdn__ProbeResponse); + 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_wsdd__ProbeMatchesType(soap, &tdn__ProbeResponse, "tdn:ProbeResponse", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap)) + return soap->error; + }; + if (soap_end_count(soap) + || soap_response(soap, SOAP_OK) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_put_wsdd__ProbeMatchesType(soap, &tdn__ProbeResponse, "tdn:ProbeResponse", "") + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap->error; + return soap_closesock(soap); +} + +#if defined(__BORLANDC__) +#pragma option pop +#pragma option pop +#endif + +/* End of soapServer.cpp */ diff --git a/unit_test/test/onvif/onvif-discover/soapStub.h b/unit_test/test/onvif/onvif-discover/soapStub.h new file mode 100644 index 0000000..2b3eb43 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/soapStub.h @@ -0,0 +1,1501 @@ +/* soapStub.h + Generated by gSOAP 2.8.135 for ../onvif_head/onvif.h + +gSOAP XML Web services tools +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc. All Rights Reserved. +The soapcpp2 tool and its generated software are released under the GPL. +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#include +#define SOAP_WSDD_2005 +#define SOAP_WSA_200408 +#define SOAP_NAMESPACE_OF_wsa "http://schemas.xmlsoap.org/ws/2004/08/addressing" +#define SOAP_NAMESPACE_OF_wsdd "http://schemas.xmlsoap.org/ws/2005/04/discovery" +#define SOAP_NAMESPACE_OF_tdn "http://www.onvif.org/ver10/network/wsdl" + +#ifndef soapStub_H +#define soapStub_H +#include "stdsoap2.h" +#if GSOAP_VERSION != 208135 +# error "GSOAP VERSION 208135 MISMATCH IN GENERATED CODE VERSUS LIBRARY CODE: PLEASE REINSTALL PACKAGE" +#endif + + +/******************************************************************************\ + * * + * Enumeration Types * + * * +\******************************************************************************/ + + +/* wsa.h:124 */ +#ifndef SOAP_TYPE_wsa__RelationshipTypeValues +#define SOAP_TYPE_wsa__RelationshipTypeValues (13) +/* wsa:RelationshipTypeValues */ +enum wsa__RelationshipTypeValues { + wsa__Reply = 0 +}; +#endif + +/* wsa.h:132 */ +#ifndef SOAP_TYPE_wsa__FaultSubcodeValues +#define SOAP_TYPE_wsa__FaultSubcodeValues (14) +/* wsa:FaultSubcodeValues */ +enum wsa__FaultSubcodeValues { + wsa__InvalidMessageInformationHeader = 0, + wsa__MessageInformationHeaderRequired = 1, + wsa__DestinationUnreachable = 2, + wsa__ActionNotSupported = 3, + wsa__EndpointUnavailable = 4 +}; +#endif + +/* wsdd10.h:109 */ +#ifndef SOAP_TYPE_wsdd__FaultCodeType +#define SOAP_TYPE_wsdd__FaultCodeType (59) +/* wsdd:FaultCodeType */ +enum wsdd__FaultCodeType { + wsdd__MatchingRuleNotSupported = 0 +}; +#endif + +/******************************************************************************\ + * * + * Types with Custom Serializers * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Classes, Structs and Unions * + * * +\******************************************************************************/ + +struct wsa__EndpointReferenceType; /* wsa.h:99 */ +struct wsa__ReferencePropertiesType; /* wsa.h:102 */ +struct wsa__ReferenceParametersType; /* wsa.h:105 */ +struct wsa__ServiceNameType; /* wsa.h:108 */ +struct wsa__Relationship; /* wsa.h:111 */ +struct wsdd__HelloType; /* wsdd10.h:64 */ +struct wsdd__ByeType; /* wsdd10.h:66 */ +struct wsdd__ProbeType; /* wsdd10.h:68 */ +struct wsdd__ProbeMatchesType; /* wsdd10.h:70 */ +struct wsdd__ProbeMatchType; /* wsdd10.h:72 */ +struct wsdd__ResolveType; /* wsdd10.h:74 */ +struct wsdd__ResolveMatchesType; /* wsdd10.h:76 */ +struct wsdd__ResolveMatchType; /* wsdd10.h:78 */ +struct wsdd__SecurityType; /* wsdd10.h:82 */ +struct wsdd__SigType; /* wsdd10.h:84 */ +struct wsdd__ScopesType; /* wsdd10.h:80 */ +struct wsdd__AppSequenceType; /* wsdd10.h:86 */ +struct __wsdd__Hello; /* wsdx.h:67 */ +struct __wsdd__Bye; /* wsdx.h:76 */ +struct __wsdd__Probe; /* wsdx.h:85 */ +struct __wsdd__ProbeMatches; /* wsdx.h:94 */ +struct __wsdd__Resolve; /* wsdx.h:103 */ +struct __wsdd__ResolveMatches; /* wsdx.h:112 */ +struct __tdn__Hello; /* ../onvif_head/onvif.h:335 */ +struct __tdn__Bye; /* ../onvif_head/onvif.h:402 */ +struct __tdn__Probe; /* ../onvif_head/onvif.h:469 */ + +/* wsa.h:99 */ +#ifndef SOAP_TYPE_wsa__EndpointReferenceType +#define SOAP_TYPE_wsa__EndpointReferenceType (8) +/* complex XML schema type 'wsa:EndpointReferenceType': */ +struct SOAP_CMAC wsa__EndpointReferenceType { + public: + /** Required element 'wsa:Address' of XML schema type 'xsd:string' */ + char *Address; + /** Optional element 'wsa:ReferenceProperties' of XML schema type 'wsa:ReferencePropertiesType' */ + struct wsa__ReferencePropertiesType *ReferenceProperties; + /** Optional element 'wsa:ReferenceParameters' of XML schema type 'wsa:ReferenceParametersType' */ + struct wsa__ReferenceParametersType *ReferenceParameters; + /** Optional element 'wsa:PortType' of XML schema type 'xsd:QName' */ + char **PortType; + /** Optional element 'wsa:ServiceName' of XML schema type 'wsa:ServiceNameType' */ + struct wsa__ServiceNameType *ServiceName; + /** Sequence of elements '-any' of XML schema type 'xsd:anyType' stored in dynamic array __any of length __size */ + int __size; + char **__any; + /** Optional attribute '-anyAttribute' of XML schema type 'xsd:anyType' */ + char *__anyAttribute; + public: + /** Return unique type id SOAP_TYPE_wsa__EndpointReferenceType */ + long soap_type() const { return SOAP_TYPE_wsa__EndpointReferenceType; } + /** Constructor with member initializations */ + wsa__EndpointReferenceType() : Address(), ReferenceProperties(), ReferenceParameters(), PortType(), ServiceName(), __size(), __any(), __anyAttribute() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsa__EndpointReferenceType * SOAP_FMAC2 soap_instantiate_wsa__EndpointReferenceType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsa.h:102 */ +#ifndef SOAP_TYPE_wsa__ReferencePropertiesType +#define SOAP_TYPE_wsa__ReferencePropertiesType (9) +/* complex XML schema type 'wsa:ReferencePropertiesType': */ +struct SOAP_CMAC wsa__ReferencePropertiesType { + public: + /** Sequence of elements '-any' of XML schema type 'xsd:anyType' stored in dynamic array __any of length __size */ + int __size; + char **__any; + public: + /** Return unique type id SOAP_TYPE_wsa__ReferencePropertiesType */ + long soap_type() const { return SOAP_TYPE_wsa__ReferencePropertiesType; } + /** Constructor with member initializations */ + wsa__ReferencePropertiesType() : __size(), __any() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsa__ReferencePropertiesType * SOAP_FMAC2 soap_instantiate_wsa__ReferencePropertiesType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsa.h:105 */ +#ifndef SOAP_TYPE_wsa__ReferenceParametersType +#define SOAP_TYPE_wsa__ReferenceParametersType (10) +/* complex XML schema type 'wsa:ReferenceParametersType': */ +struct SOAP_CMAC wsa__ReferenceParametersType { + public: + /** Sequence of elements '-any' of XML schema type 'xsd:anyType' stored in dynamic array __any of length __size */ + int __size; + char **__any; + public: + /** Return unique type id SOAP_TYPE_wsa__ReferenceParametersType */ + long soap_type() const { return SOAP_TYPE_wsa__ReferenceParametersType; } + /** Constructor with member initializations */ + wsa__ReferenceParametersType() : __size(), __any() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsa__ReferenceParametersType * SOAP_FMAC2 soap_instantiate_wsa__ReferenceParametersType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsa.h:108 */ +#ifndef SOAP_TYPE_wsa__ServiceNameType +#define SOAP_TYPE_wsa__ServiceNameType (11) +/* simple XML schema type 'wsa:ServiceNameType': */ +struct SOAP_CMAC wsa__ServiceNameType { + public: + /** Simple content of XML schema type 'xsd:QName' wrapped by this struct */ + char *__item; + /** Optional attribute 'PortName' of XML schema type 'xsd:string' */ + char *PortName; + /** Optional attribute '-anyAttribute' of XML schema type 'xsd:anyType' */ + char *__anyAttribute; + public: + /** Return unique type id SOAP_TYPE_wsa__ServiceNameType */ + long soap_type() const { return SOAP_TYPE_wsa__ServiceNameType; } + /** Constructor with member initializations */ + wsa__ServiceNameType() : __item(), PortName(), __anyAttribute() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsa__ServiceNameType * SOAP_FMAC2 soap_instantiate_wsa__ServiceNameType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsa.h:111 */ +#ifndef SOAP_TYPE_wsa__Relationship +#define SOAP_TYPE_wsa__Relationship (12) +/* simple XML schema type 'wsa:Relationship': */ +struct SOAP_CMAC wsa__Relationship { + public: + /** Simple content of XML schema type 'xsd:string' wrapped by this struct */ + char *__item; + /** Optional attribute 'RelationshipType' of XML schema type 'xsd:QName' */ + char *RelationshipType; + /** Optional attribute '-anyAttribute' of XML schema type 'xsd:anyType' */ + char *__anyAttribute; + public: + /** Return unique type id SOAP_TYPE_wsa__Relationship */ + long soap_type() const { return SOAP_TYPE_wsa__Relationship; } + /** Constructor with member initializations */ + wsa__Relationship() : __item(), RelationshipType(), __anyAttribute() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsa__Relationship * SOAP_FMAC2 soap_instantiate_wsa__Relationship(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsa.h:255 */ +#ifndef WITH_NOGLOBAL +#ifndef SOAP_TYPE_SOAP_ENV__Header +#define SOAP_TYPE_SOAP_ENV__Header (30) +/* SOAP_ENV__Header: */ +struct SOAP_CMAC SOAP_ENV__Header { + public: + /** Optional element 'wsa:MessageID' of XML schema type 'wsa:MessageID' */ + char *wsa__MessageID; + /** Optional element 'wsa:RelatesTo' of XML schema type 'wsa:RelatesTo' */ + struct wsa__Relationship *wsa__RelatesTo; + /** Optional element 'wsa:From' of XML schema type 'wsa:From' */ + struct wsa__EndpointReferenceType *wsa__From; + /** MustUnderstand */ + struct wsa__EndpointReferenceType *wsa__ReplyTo; + /** MustUnderstand */ + struct wsa__EndpointReferenceType *wsa__FaultTo; + /** MustUnderstand */ + char *wsa__To; + /** MustUnderstand */ + char *wsa__Action; + /** Optional element 'wsdd:AppSequence' of XML schema type 'wsdd:AppSequenceType' */ + struct wsdd__AppSequenceType *wsdd__AppSequence; + public: + /** Return unique type id SOAP_TYPE_SOAP_ENV__Header */ + long soap_type() const { return SOAP_TYPE_SOAP_ENV__Header; } + /** Constructor with member initializations */ + SOAP_ENV__Header() : wsa__MessageID(), wsa__RelatesTo(), wsa__From(), wsa__ReplyTo(), wsa__FaultTo(), wsa__To(), wsa__Action(), wsdd__AppSequence() { } + /** Friend allocator */ + friend SOAP_FMAC1 SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*); +}; +#endif +#endif + +/* wsa.h:271 */ +#ifndef WITH_NOGLOBAL +#ifndef SOAP_TYPE_SOAP_ENV__Detail +#define SOAP_TYPE_SOAP_ENV__Detail (35) +/* SOAP_ENV__Detail: */ +struct SOAP_CMAC SOAP_ENV__Detail { + public: + char *__any; + /** Any type of element 'fault' assigned to fault with its SOAP_TYPE_ assigned to __type */ + /** Do not create a cyclic data structure through this member unless SOAP encoding or SOAP_XML_GRAPH are used for id-ref serialization */ + int __type; + void *fault; + public: + /** Return unique type id SOAP_TYPE_SOAP_ENV__Detail */ + long soap_type() const { return SOAP_TYPE_SOAP_ENV__Detail; } + /** Constructor with member initializations */ + SOAP_ENV__Detail() : __any(), __type(), fault() { } + /** Friend allocator */ + friend SOAP_FMAC1 SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*); +}; +#endif +#endif + +/* wsa.h:272 */ +#ifndef WITH_NOGLOBAL +#ifndef SOAP_TYPE_SOAP_ENV__Code +#define SOAP_TYPE_SOAP_ENV__Code (37) +/* Type SOAP_ENV__Code is a recursive data type, (in)directly referencing itself through its (base or derived class) members */ +/* SOAP_ENV__Code: */ +struct SOAP_CMAC SOAP_ENV__Code { + public: + /** Optional element 'SOAP-ENV:Value' of XML schema type 'xsd:QName' */ + char *SOAP_ENV__Value; + /** Optional element 'SOAP-ENV:Subcode' of XML schema type 'SOAP-ENV:Code' */ + struct SOAP_ENV__Code *SOAP_ENV__Subcode; + public: + /** Return unique type id SOAP_TYPE_SOAP_ENV__Code */ + long soap_type() const { return SOAP_TYPE_SOAP_ENV__Code; } + /** Constructor with member initializations */ + SOAP_ENV__Code() : SOAP_ENV__Value(), SOAP_ENV__Subcode() { } + /** Friend allocator */ + friend SOAP_FMAC1 SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*); +}; +#endif +#endif + +/* wsa.h:273 */ +#ifndef WITH_NOGLOBAL +#ifndef SOAP_TYPE_SOAP_ENV__Reason +#define SOAP_TYPE_SOAP_ENV__Reason (39) +/* SOAP_ENV__Reason: */ +struct SOAP_CMAC SOAP_ENV__Reason { + public: + /** Optional element 'SOAP-ENV:Text' of XML schema type 'xsd:string' */ + char *SOAP_ENV__Text; + public: + /** Return unique type id SOAP_TYPE_SOAP_ENV__Reason */ + long soap_type() const { return SOAP_TYPE_SOAP_ENV__Reason; } + /** Constructor with member initializations */ + SOAP_ENV__Reason() : SOAP_ENV__Text() { } + /** Friend allocator */ + friend SOAP_FMAC1 SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*); +}; +#endif +#endif + +/* wsa.h:278 */ +#ifndef WITH_NOGLOBAL +#ifndef SOAP_TYPE_SOAP_ENV__Fault +#define SOAP_TYPE_SOAP_ENV__Fault (43) +/* SOAP_ENV__Fault: */ +struct SOAP_CMAC SOAP_ENV__Fault { + public: + /** Optional element 'faultcode' of XML schema type 'xsd:QName' */ + char *faultcode; + /** Optional element 'faultstring' of XML schema type 'xsd:string' */ + char *faultstring; + /** Optional element 'faultactor' of XML schema type 'xsd:string' */ + char *faultactor; + /** Optional element 'detail' of XML schema type 'SOAP-ENV:Detail' */ + struct SOAP_ENV__Detail *detail; + /** Optional element 'SOAP-ENV:Code' of XML schema type 'SOAP-ENV:Code' */ + struct SOAP_ENV__Code *SOAP_ENV__Code; + /** Optional element 'SOAP-ENV:Reason' of XML schema type 'SOAP-ENV:Reason' */ + struct SOAP_ENV__Reason *SOAP_ENV__Reason; + /** Optional element 'SOAP-ENV:Node' of XML schema type 'xsd:string' */ + char *SOAP_ENV__Node; + /** Optional element 'SOAP-ENV:Role' of XML schema type 'xsd:string' */ + char *SOAP_ENV__Role; + /** Optional element 'SOAP-ENV:Detail' of XML schema type 'SOAP-ENV:Detail' */ + struct SOAP_ENV__Detail *SOAP_ENV__Detail; + public: + /** Return unique type id SOAP_TYPE_SOAP_ENV__Fault */ + long soap_type() const { return SOAP_TYPE_SOAP_ENV__Fault; } + /** Constructor with member initializations */ + SOAP_ENV__Fault() : faultcode(), faultstring(), faultactor(), detail(), SOAP_ENV__Code(), SOAP_ENV__Reason(), SOAP_ENV__Node(), SOAP_ENV__Role(), SOAP_ENV__Detail() { } + /** Friend allocator */ + friend SOAP_FMAC1 SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*); +}; +#endif +#endif + +/* wsdd10.h:64 */ +#ifndef SOAP_TYPE_wsdd__HelloType +#define SOAP_TYPE_wsdd__HelloType (44) +/* complex XML schema type 'wsdd:HelloType': */ +struct SOAP_CMAC wsdd__HelloType { + public: + /** Required element 'wsa:EndpointReference' of XML schema type 'wsa:EndpointReference' */ + struct wsa__EndpointReferenceType wsa__EndpointReference; + /** Optional element 'wsdd:Types' of XML schema type 'xsd:QName' */ + char *Types; + /** Optional element 'wsdd:Scopes' of XML schema type 'wsdd:ScopesType' */ + struct wsdd__ScopesType *Scopes; + /** Optional element 'wsdd:XAddrs' of XML schema type 'wsdd:UriListType' */ + char *XAddrs; + /** Required element 'wsdd:MetadataVersion' of XML schema type 'xsd:unsignedInt' */ + unsigned int MetadataVersion; + public: + /** Return unique type id SOAP_TYPE_wsdd__HelloType */ + long soap_type() const { return SOAP_TYPE_wsdd__HelloType; } + /** Constructor with member initializations */ + wsdd__HelloType() : wsa__EndpointReference(), Types(), Scopes(), XAddrs(), MetadataVersion() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__HelloType * SOAP_FMAC2 soap_instantiate_wsdd__HelloType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:66 */ +#ifndef SOAP_TYPE_wsdd__ByeType +#define SOAP_TYPE_wsdd__ByeType (45) +/* complex XML schema type 'wsdd:ByeType': */ +struct SOAP_CMAC wsdd__ByeType { + public: + /** Required element 'wsa:EndpointReference' of XML schema type 'wsa:EndpointReference' */ + struct wsa__EndpointReferenceType wsa__EndpointReference; + /** Optional element 'wsdd:Types' of XML schema type 'xsd:QName' */ + char *Types; + /** Optional element 'wsdd:Scopes' of XML schema type 'wsdd:ScopesType' */ + struct wsdd__ScopesType *Scopes; + /** Optional element 'wsdd:XAddrs' of XML schema type 'wsdd:UriListType' */ + char *XAddrs; + /** Optional element 'wsdd:MetadataVersion' of XML schema type 'xsd:unsignedInt' */ + unsigned int *MetadataVersion; + public: + /** Return unique type id SOAP_TYPE_wsdd__ByeType */ + long soap_type() const { return SOAP_TYPE_wsdd__ByeType; } + /** Constructor with member initializations */ + wsdd__ByeType() : wsa__EndpointReference(), Types(), Scopes(), XAddrs(), MetadataVersion() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ByeType * SOAP_FMAC2 soap_instantiate_wsdd__ByeType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:68 */ +#ifndef SOAP_TYPE_wsdd__ProbeType +#define SOAP_TYPE_wsdd__ProbeType (46) +/* complex XML schema type 'wsdd:ProbeType': */ +struct SOAP_CMAC wsdd__ProbeType { + public: + /** Optional element 'wsdd:Types' of XML schema type 'xsd:QName' */ + char *Types; + /** Optional element 'wsdd:Scopes' of XML schema type 'wsdd:ScopesType' */ + struct wsdd__ScopesType *Scopes; + public: + /** Return unique type id SOAP_TYPE_wsdd__ProbeType */ + long soap_type() const { return SOAP_TYPE_wsdd__ProbeType; } + /** Constructor with member initializations */ + wsdd__ProbeType() : Types(), Scopes() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ProbeType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:70 */ +#ifndef SOAP_TYPE_wsdd__ProbeMatchesType +#define SOAP_TYPE_wsdd__ProbeMatchesType (47) +/* complex XML schema type 'wsdd:ProbeMatchesType': */ +struct SOAP_CMAC wsdd__ProbeMatchesType { + public: + /** Sequence of elements 'wsdd:ProbeMatch' of XML schema type 'wsdd:ProbeMatchType' stored in dynamic array ProbeMatch of length __sizeProbeMatch */ + int __sizeProbeMatch; + struct wsdd__ProbeMatchType *ProbeMatch; + public: + /** Return unique type id SOAP_TYPE_wsdd__ProbeMatchesType */ + long soap_type() const { return SOAP_TYPE_wsdd__ProbeMatchesType; } + /** Constructor with member initializations */ + wsdd__ProbeMatchesType() : __sizeProbeMatch(), ProbeMatch() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ProbeMatchesType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeMatchesType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:72 */ +#ifndef SOAP_TYPE_wsdd__ProbeMatchType +#define SOAP_TYPE_wsdd__ProbeMatchType (48) +/* complex XML schema type 'wsdd:ProbeMatchType': */ +struct SOAP_CMAC wsdd__ProbeMatchType { + public: + /** Required element 'wsa:EndpointReference' of XML schema type 'wsa:EndpointReference' */ + struct wsa__EndpointReferenceType wsa__EndpointReference; + /** Optional element 'wsdd:Types' of XML schema type 'xsd:QName' */ + char *Types; + /** Optional element 'wsdd:Scopes' of XML schema type 'wsdd:ScopesType' */ + struct wsdd__ScopesType *Scopes; + /** Optional element 'wsdd:XAddrs' of XML schema type 'wsdd:UriListType' */ + char *XAddrs; + /** Required element 'wsdd:MetadataVersion' of XML schema type 'xsd:unsignedInt' */ + unsigned int MetadataVersion; + public: + /** Return unique type id SOAP_TYPE_wsdd__ProbeMatchType */ + long soap_type() const { return SOAP_TYPE_wsdd__ProbeMatchType; } + /** Constructor with member initializations */ + wsdd__ProbeMatchType() : wsa__EndpointReference(), Types(), Scopes(), XAddrs(), MetadataVersion() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ProbeMatchType * SOAP_FMAC2 soap_instantiate_wsdd__ProbeMatchType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:74 */ +#ifndef SOAP_TYPE_wsdd__ResolveType +#define SOAP_TYPE_wsdd__ResolveType (49) +/* complex XML schema type 'wsdd:ResolveType': */ +struct SOAP_CMAC wsdd__ResolveType { + public: + /** Required element 'wsa:EndpointReference' of XML schema type 'wsa:EndpointReference' */ + struct wsa__EndpointReferenceType wsa__EndpointReference; + public: + /** Return unique type id SOAP_TYPE_wsdd__ResolveType */ + long soap_type() const { return SOAP_TYPE_wsdd__ResolveType; } + /** Constructor with member initializations */ + wsdd__ResolveType() : wsa__EndpointReference() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ResolveType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:76 */ +#ifndef SOAP_TYPE_wsdd__ResolveMatchesType +#define SOAP_TYPE_wsdd__ResolveMatchesType (50) +/* complex XML schema type 'wsdd:ResolveMatchesType': */ +struct SOAP_CMAC wsdd__ResolveMatchesType { + public: + /** Optional element 'wsdd:ResolveMatch' of XML schema type 'wsdd:ResolveMatchType' */ + struct wsdd__ResolveMatchType *ResolveMatch; + public: + /** Return unique type id SOAP_TYPE_wsdd__ResolveMatchesType */ + long soap_type() const { return SOAP_TYPE_wsdd__ResolveMatchesType; } + /** Constructor with member initializations */ + wsdd__ResolveMatchesType() : ResolveMatch() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ResolveMatchesType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveMatchesType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:78 */ +#ifndef SOAP_TYPE_wsdd__ResolveMatchType +#define SOAP_TYPE_wsdd__ResolveMatchType (51) +/* complex XML schema type 'wsdd:ResolveMatchType': */ +struct SOAP_CMAC wsdd__ResolveMatchType { + public: + /** Required element 'wsa:EndpointReference' of XML schema type 'wsa:EndpointReference' */ + struct wsa__EndpointReferenceType wsa__EndpointReference; + /** Optional element 'wsdd:Types' of XML schema type 'xsd:QName' */ + char *Types; + /** Optional element 'wsdd:Scopes' of XML schema type 'wsdd:ScopesType' */ + struct wsdd__ScopesType *Scopes; + /** Optional element 'wsdd:XAddrs' of XML schema type 'wsdd:UriListType' */ + char *XAddrs; + /** Required element 'wsdd:MetadataVersion' of XML schema type 'xsd:unsignedInt' */ + unsigned int MetadataVersion; + public: + /** Return unique type id SOAP_TYPE_wsdd__ResolveMatchType */ + long soap_type() const { return SOAP_TYPE_wsdd__ResolveMatchType; } + /** Constructor with member initializations */ + wsdd__ResolveMatchType() : wsa__EndpointReference(), Types(), Scopes(), XAddrs(), MetadataVersion() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ResolveMatchType * SOAP_FMAC2 soap_instantiate_wsdd__ResolveMatchType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:82 */ +#ifndef SOAP_TYPE_wsdd__SecurityType +#define SOAP_TYPE_wsdd__SecurityType (53) +/* complex XML schema type 'wsdd:SecurityType': */ +struct SOAP_CMAC wsdd__SecurityType { + public: + /** Optional element 'wsdd:Sig' of XML schema type 'wsdd:SigType' */ + struct wsdd__SigType *Sig; + public: + /** Return unique type id SOAP_TYPE_wsdd__SecurityType */ + long soap_type() const { return SOAP_TYPE_wsdd__SecurityType; } + /** Constructor with member initializations */ + wsdd__SecurityType() : Sig() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__SecurityType * SOAP_FMAC2 soap_instantiate_wsdd__SecurityType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:84 */ +#ifndef SOAP_TYPE_wsdd__SigType +#define SOAP_TYPE_wsdd__SigType (54) +/* complex XML schema type 'wsdd:SigType': */ +struct SOAP_CMAC wsdd__SigType { + public: + /** Required attribute 'Scheme' of XML schema type 'xsd:string' */ + char *Scheme; + /** Optional attribute 'KeyId' of XML schema type 'xsd:string' */ + char *KeyId; + /** Required attribute 'Refs' of XML schema type 'xsd:string' */ + char *Refs; + /** Required attribute 'Sig' of XML schema type 'xsd:string' */ + char *Sig; + public: + /** Return unique type id SOAP_TYPE_wsdd__SigType */ + long soap_type() const { return SOAP_TYPE_wsdd__SigType; } + /** Constructor with member initializations */ + wsdd__SigType() : Scheme(), KeyId(), Refs(), Sig() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__SigType * SOAP_FMAC2 soap_instantiate_wsdd__SigType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:80 */ +#ifndef SOAP_TYPE_wsdd__ScopesType +#define SOAP_TYPE_wsdd__ScopesType (52) +/* simple XML schema type 'wsdd:ScopesType': */ +struct SOAP_CMAC wsdd__ScopesType { + public: + /** Simple content of XML schema type 'wsdd:UriListType' wrapped by this struct */ + char *__item; + /** Optional attribute 'MatchBy' of XML schema type 'xsd:string' */ + char *MatchBy; + public: + /** Return unique type id SOAP_TYPE_wsdd__ScopesType */ + long soap_type() const { return SOAP_TYPE_wsdd__ScopesType; } + /** Constructor with member initializations */ + wsdd__ScopesType() : __item(), MatchBy() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__ScopesType * SOAP_FMAC2 soap_instantiate_wsdd__ScopesType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdd10.h:86 */ +#ifndef SOAP_TYPE_wsdd__AppSequenceType +#define SOAP_TYPE_wsdd__AppSequenceType (55) +/* complex XML schema type 'wsdd:AppSequenceType': */ +struct SOAP_CMAC wsdd__AppSequenceType { + public: + /** Required attribute 'InstanceId' of XML schema type 'xsd:unsignedInt' */ + unsigned int InstanceId; + /** Optional attribute 'SequenceId' of XML schema type 'xsd:string' */ + char *SequenceId; + /** Required attribute 'MessageNumber' of XML schema type 'xsd:unsignedInt' */ + unsigned int MessageNumber; + public: + /** Return unique type id SOAP_TYPE_wsdd__AppSequenceType */ + long soap_type() const { return SOAP_TYPE_wsdd__AppSequenceType; } + /** Constructor with member initializations */ + wsdd__AppSequenceType() : InstanceId(), SequenceId(), MessageNumber() { } + /** Friend allocator */ + friend SOAP_FMAC1 wsdd__AppSequenceType * SOAP_FMAC2 soap_instantiate_wsdd__AppSequenceType(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdx.h:67 */ +#ifndef SOAP_TYPE___wsdd__Hello +#define SOAP_TYPE___wsdd__Hello (83) +/* Wrapper: */ +struct SOAP_CMAC __wsdd__Hello { + public: + /** Optional element 'wsdd:Hello' of XML schema type 'wsdd:HelloType' */ + struct wsdd__HelloType *wsdd__Hello; + public: + /** Return unique type id SOAP_TYPE___wsdd__Hello */ + long soap_type() const { return SOAP_TYPE___wsdd__Hello; } + /** Constructor with member initializations */ + __wsdd__Hello() : wsdd__Hello() { } + /** Friend allocator */ + friend SOAP_FMAC1 __wsdd__Hello * SOAP_FMAC2 soap_instantiate___wsdd__Hello(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdx.h:76 */ +#ifndef SOAP_TYPE___wsdd__Bye +#define SOAP_TYPE___wsdd__Bye (86) +/* Wrapper: */ +struct SOAP_CMAC __wsdd__Bye { + public: + /** Optional element 'wsdd:Bye' of XML schema type 'wsdd:ByeType' */ + struct wsdd__ByeType *wsdd__Bye; + public: + /** Return unique type id SOAP_TYPE___wsdd__Bye */ + long soap_type() const { return SOAP_TYPE___wsdd__Bye; } + /** Constructor with member initializations */ + __wsdd__Bye() : wsdd__Bye() { } + /** Friend allocator */ + friend SOAP_FMAC1 __wsdd__Bye * SOAP_FMAC2 soap_instantiate___wsdd__Bye(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdx.h:85 */ +#ifndef SOAP_TYPE___wsdd__Probe +#define SOAP_TYPE___wsdd__Probe (89) +/* Wrapper: */ +struct SOAP_CMAC __wsdd__Probe { + public: + /** Optional element 'wsdd:Probe' of XML schema type 'wsdd:ProbeType' */ + struct wsdd__ProbeType *wsdd__Probe; + public: + /** Return unique type id SOAP_TYPE___wsdd__Probe */ + long soap_type() const { return SOAP_TYPE___wsdd__Probe; } + /** Constructor with member initializations */ + __wsdd__Probe() : wsdd__Probe() { } + /** Friend allocator */ + friend SOAP_FMAC1 __wsdd__Probe * SOAP_FMAC2 soap_instantiate___wsdd__Probe(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdx.h:94 */ +#ifndef SOAP_TYPE___wsdd__ProbeMatches +#define SOAP_TYPE___wsdd__ProbeMatches (92) +/* Wrapper: */ +struct SOAP_CMAC __wsdd__ProbeMatches { + public: + /** Optional element 'wsdd:ProbeMatches' of XML schema type 'wsdd:ProbeMatchesType' */ + struct wsdd__ProbeMatchesType *wsdd__ProbeMatches; + public: + /** Return unique type id SOAP_TYPE___wsdd__ProbeMatches */ + long soap_type() const { return SOAP_TYPE___wsdd__ProbeMatches; } + /** Constructor with member initializations */ + __wsdd__ProbeMatches() : wsdd__ProbeMatches() { } + /** Friend allocator */ + friend SOAP_FMAC1 __wsdd__ProbeMatches * SOAP_FMAC2 soap_instantiate___wsdd__ProbeMatches(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdx.h:103 */ +#ifndef SOAP_TYPE___wsdd__Resolve +#define SOAP_TYPE___wsdd__Resolve (95) +/* Wrapper: */ +struct SOAP_CMAC __wsdd__Resolve { + public: + /** Optional element 'wsdd:Resolve' of XML schema type 'wsdd:ResolveType' */ + struct wsdd__ResolveType *wsdd__Resolve; + public: + /** Return unique type id SOAP_TYPE___wsdd__Resolve */ + long soap_type() const { return SOAP_TYPE___wsdd__Resolve; } + /** Constructor with member initializations */ + __wsdd__Resolve() : wsdd__Resolve() { } + /** Friend allocator */ + friend SOAP_FMAC1 __wsdd__Resolve * SOAP_FMAC2 soap_instantiate___wsdd__Resolve(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* wsdx.h:112 */ +#ifndef SOAP_TYPE___wsdd__ResolveMatches +#define SOAP_TYPE___wsdd__ResolveMatches (98) +/* Wrapper: */ +struct SOAP_CMAC __wsdd__ResolveMatches { + public: + /** Optional element 'wsdd:ResolveMatches' of XML schema type 'wsdd:ResolveMatchesType' */ + struct wsdd__ResolveMatchesType *wsdd__ResolveMatches; + public: + /** Return unique type id SOAP_TYPE___wsdd__ResolveMatches */ + long soap_type() const { return SOAP_TYPE___wsdd__ResolveMatches; } + /** Constructor with member initializations */ + __wsdd__ResolveMatches() : wsdd__ResolveMatches() { } + /** Friend allocator */ + friend SOAP_FMAC1 __wsdd__ResolveMatches * SOAP_FMAC2 soap_instantiate___wsdd__ResolveMatches(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* ../onvif_head/onvif.h:335 */ +#ifndef SOAP_TYPE___tdn__Hello +#define SOAP_TYPE___tdn__Hello (101) +/* Wrapper: */ +struct SOAP_CMAC __tdn__Hello { + public: + /** Required element 'tdn:Hello' of XML schema type 'wsdd:HelloType' */ + struct wsdd__HelloType tdn__Hello; + public: + /** Return unique type id SOAP_TYPE___tdn__Hello */ + long soap_type() const { return SOAP_TYPE___tdn__Hello; } + /** Constructor with member initializations */ + __tdn__Hello() : tdn__Hello() { } + /** Friend allocator */ + friend SOAP_FMAC1 __tdn__Hello * SOAP_FMAC2 soap_instantiate___tdn__Hello(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* ../onvif_head/onvif.h:402 */ +#ifndef SOAP_TYPE___tdn__Bye +#define SOAP_TYPE___tdn__Bye (103) +/* Wrapper: */ +struct SOAP_CMAC __tdn__Bye { + public: + /** Required element 'tdn:Bye' of XML schema type 'wsdd:ByeType' */ + struct wsdd__ByeType tdn__Bye; + public: + /** Return unique type id SOAP_TYPE___tdn__Bye */ + long soap_type() const { return SOAP_TYPE___tdn__Bye; } + /** Constructor with member initializations */ + __tdn__Bye() : tdn__Bye() { } + /** Friend allocator */ + friend SOAP_FMAC1 __tdn__Bye * SOAP_FMAC2 soap_instantiate___tdn__Bye(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/* ../onvif_head/onvif.h:469 */ +#ifndef SOAP_TYPE___tdn__Probe +#define SOAP_TYPE___tdn__Probe (106) +/* Wrapper: */ +struct SOAP_CMAC __tdn__Probe { + public: + /** Required element 'tdn:Probe' of XML schema type 'wsdd:ProbeType' */ + struct wsdd__ProbeType tdn__Probe; + public: + /** Return unique type id SOAP_TYPE___tdn__Probe */ + long soap_type() const { return SOAP_TYPE___tdn__Probe; } + /** Constructor with member initializations */ + __tdn__Probe() : tdn__Probe() { } + /** Friend allocator */ + friend SOAP_FMAC1 __tdn__Probe * SOAP_FMAC2 soap_instantiate___tdn__Probe(struct soap*, int, const char*, const char*, size_t*); +}; +#endif + +/******************************************************************************\ + * * + * Typedefs * + * * +\******************************************************************************/ + + +/* (built-in):0 */ +#ifndef SOAP_TYPE__XML +#define SOAP_TYPE__XML (5) +typedef char *_XML; +#endif + +/* (built-in):0 */ +#ifndef SOAP_TYPE__QName +#define SOAP_TYPE__QName (6) +typedef char *_QName; +#endif + +/* wsa.h:225 */ +#ifndef SOAP_TYPE__wsa__EndpointReference +#define SOAP_TYPE__wsa__EndpointReference (20) +typedef struct wsa__EndpointReferenceType _wsa__EndpointReference; +#endif + +/* wsa.h:228 */ +#ifndef SOAP_TYPE__wsa__MessageID +#define SOAP_TYPE__wsa__MessageID (21) +typedef char *_wsa__MessageID; +#endif + +/* wsa.h:231 */ +#ifndef SOAP_TYPE__wsa__RelatesTo +#define SOAP_TYPE__wsa__RelatesTo (22) +typedef struct wsa__Relationship _wsa__RelatesTo; +#endif + +/* wsa.h:234 */ +#ifndef SOAP_TYPE__wsa__To +#define SOAP_TYPE__wsa__To (23) +typedef char *_wsa__To; +#endif + +/* wsa.h:237 */ +#ifndef SOAP_TYPE__wsa__Action +#define SOAP_TYPE__wsa__Action (24) +typedef char *_wsa__Action; +#endif + +/* wsa.h:240 */ +#ifndef SOAP_TYPE__wsa__From +#define SOAP_TYPE__wsa__From (25) +typedef struct wsa__EndpointReferenceType _wsa__From; +#endif + +/* wsa.h:243 */ +#ifndef SOAP_TYPE__wsa__ReplyTo +#define SOAP_TYPE__wsa__ReplyTo (26) +typedef struct wsa__EndpointReferenceType _wsa__ReplyTo; +#endif + +/* wsa.h:246 */ +#ifndef SOAP_TYPE__wsa__FaultTo +#define SOAP_TYPE__wsa__FaultTo (27) +typedef struct wsa__EndpointReferenceType _wsa__FaultTo; +#endif + +/* wsa.h:249 */ +#ifndef SOAP_TYPE__wsa__ReplyAfter +#define SOAP_TYPE__wsa__ReplyAfter (29) +typedef unsigned int _wsa__ReplyAfter; +#endif + +/* wsdd10.h:97 */ +#ifndef SOAP_TYPE_wsdd__QNameListType +#define SOAP_TYPE_wsdd__QNameListType (56) +typedef _QName wsdd__QNameListType; +#endif + +/* wsdd10.h:101 */ +#ifndef SOAP_TYPE_wsdd__UriListType +#define SOAP_TYPE_wsdd__UriListType (57) +typedef char *wsdd__UriListType; +#endif + +/* wsdd10.h:104 */ +#ifndef SOAP_TYPE_wsdd__FaultCodeOpenType +#define SOAP_TYPE_wsdd__FaultCodeOpenType (58) +typedef char *wsdd__FaultCodeOpenType; +#endif + +/* wsdd10.h:474 */ +#ifndef SOAP_TYPE__wsdd__Hello +#define SOAP_TYPE__wsdd__Hello (65) +typedef struct wsdd__HelloType _wsdd__Hello; +#endif + +/* wsdd10.h:477 */ +#ifndef SOAP_TYPE__wsdd__Bye +#define SOAP_TYPE__wsdd__Bye (66) +typedef struct wsdd__ByeType _wsdd__Bye; +#endif + +/* wsdd10.h:480 */ +#ifndef SOAP_TYPE__wsdd__Probe +#define SOAP_TYPE__wsdd__Probe (67) +typedef struct wsdd__ProbeType _wsdd__Probe; +#endif + +/* wsdd10.h:483 */ +#ifndef SOAP_TYPE__wsdd__ProbeMatches +#define SOAP_TYPE__wsdd__ProbeMatches (68) +typedef struct wsdd__ProbeMatchesType _wsdd__ProbeMatches; +#endif + +/* wsdd10.h:486 */ +#ifndef SOAP_TYPE__wsdd__Resolve +#define SOAP_TYPE__wsdd__Resolve (69) +typedef struct wsdd__ResolveType _wsdd__Resolve; +#endif + +/* wsdd10.h:489 */ +#ifndef SOAP_TYPE__wsdd__ResolveMatches +#define SOAP_TYPE__wsdd__ResolveMatches (70) +typedef struct wsdd__ResolveMatchesType _wsdd__ResolveMatches; +#endif + +/* wsdd10.h:492 */ +#ifndef SOAP_TYPE__wsdd__Types +#define SOAP_TYPE__wsdd__Types (71) +typedef wsdd__QNameListType _wsdd__Types; +#endif + +/* wsdd10.h:495 */ +#ifndef SOAP_TYPE__wsdd__Scopes +#define SOAP_TYPE__wsdd__Scopes (72) +typedef struct wsdd__ScopesType _wsdd__Scopes; +#endif + +/* wsdd10.h:498 */ +#ifndef SOAP_TYPE__wsdd__XAddrs +#define SOAP_TYPE__wsdd__XAddrs (73) +typedef wsdd__UriListType _wsdd__XAddrs; +#endif + +/* wsdd10.h:501 */ +#ifndef SOAP_TYPE__wsdd__MetadataVersion +#define SOAP_TYPE__wsdd__MetadataVersion (74) +typedef unsigned int _wsdd__MetadataVersion; +#endif + +/* wsdd10.h:504 */ +#ifndef SOAP_TYPE__wsdd__SupportedMatchingRules +#define SOAP_TYPE__wsdd__SupportedMatchingRules (75) +typedef wsdd__UriListType _wsdd__SupportedMatchingRules; +#endif + +/* wsdd10.h:507 */ +#ifndef SOAP_TYPE__wsdd__Security +#define SOAP_TYPE__wsdd__Security (76) +typedef struct wsdd__SecurityType _wsdd__Security; +#endif + +/* wsdd10.h:510 */ +#ifndef SOAP_TYPE__wsdd__Sig +#define SOAP_TYPE__wsdd__Sig (77) +typedef struct wsdd__SigType _wsdd__Sig; +#endif + +/* wsdd10.h:513 */ +#ifndef SOAP_TYPE__wsdd__AppSequence +#define SOAP_TYPE__wsdd__AppSequence (78) +typedef struct wsdd__AppSequenceType _wsdd__AppSequence; +#endif + +/* wsdd10.h:524 */ +#ifndef SOAP_TYPE__wsdd__Id +#define SOAP_TYPE__wsdd__Id (79) +typedef char *_wsdd__Id; +#endif + +/******************************************************************************\ + * * + * Serializable Types * + * * +\******************************************************************************/ + + +/* char has binding name 'byte' for type 'xsd:byte' */ +#ifndef SOAP_TYPE_byte +#define SOAP_TYPE_byte (3) +#endif + +/* int has binding name 'int' for type 'xsd:int' */ +#ifndef SOAP_TYPE_int +#define SOAP_TYPE_int (1) +#endif + +/* _wsdd__MetadataVersion has binding name '_wsdd__MetadataVersion' for type '' */ +#ifndef SOAP_TYPE__wsdd__MetadataVersion +#define SOAP_TYPE__wsdd__MetadataVersion (74) +#endif + +/* _wsa__ReplyAfter has binding name '_wsa__ReplyAfter' for type '' */ +#ifndef SOAP_TYPE__wsa__ReplyAfter +#define SOAP_TYPE__wsa__ReplyAfter (29) +#endif + +/* unsigned int has binding name 'unsignedInt' for type 'xsd:unsignedInt' */ +#ifndef SOAP_TYPE_unsignedInt +#define SOAP_TYPE_unsignedInt (28) +#endif + +/* enum wsdd__FaultCodeType has binding name 'wsdd__FaultCodeType' for type 'wsdd:FaultCodeType' */ +#ifndef SOAP_TYPE_wsdd__FaultCodeType +#define SOAP_TYPE_wsdd__FaultCodeType (59) +#endif + +/* enum wsa__FaultSubcodeValues has binding name 'wsa__FaultSubcodeValues' for type 'wsa:FaultSubcodeValues' */ +#ifndef SOAP_TYPE_wsa__FaultSubcodeValues +#define SOAP_TYPE_wsa__FaultSubcodeValues (14) +#endif + +/* enum wsa__RelationshipTypeValues has binding name 'wsa__RelationshipTypeValues' for type 'wsa:RelationshipTypeValues' */ +#ifndef SOAP_TYPE_wsa__RelationshipTypeValues +#define SOAP_TYPE_wsa__RelationshipTypeValues (13) +#endif + +/* _wsdd__AppSequence has binding name '_wsdd__AppSequence' for type '' */ +#ifndef SOAP_TYPE__wsdd__AppSequence +#define SOAP_TYPE__wsdd__AppSequence (78) +#endif + +/* _wsdd__Sig has binding name '_wsdd__Sig' for type '' */ +#ifndef SOAP_TYPE__wsdd__Sig +#define SOAP_TYPE__wsdd__Sig (77) +#endif + +/* _wsdd__Security has binding name '_wsdd__Security' for type '' */ +#ifndef SOAP_TYPE__wsdd__Security +#define SOAP_TYPE__wsdd__Security (76) +#endif + +/* _wsdd__Scopes has binding name '_wsdd__Scopes' for type '' */ +#ifndef SOAP_TYPE__wsdd__Scopes +#define SOAP_TYPE__wsdd__Scopes (72) +#endif + +/* _wsdd__ResolveMatches has binding name '_wsdd__ResolveMatches' for type '' */ +#ifndef SOAP_TYPE__wsdd__ResolveMatches +#define SOAP_TYPE__wsdd__ResolveMatches (70) +#endif + +/* _wsdd__Resolve has binding name '_wsdd__Resolve' for type '' */ +#ifndef SOAP_TYPE__wsdd__Resolve +#define SOAP_TYPE__wsdd__Resolve (69) +#endif + +/* _wsdd__ProbeMatches has binding name '_wsdd__ProbeMatches' for type '' */ +#ifndef SOAP_TYPE__wsdd__ProbeMatches +#define SOAP_TYPE__wsdd__ProbeMatches (68) +#endif + +/* _wsdd__Probe has binding name '_wsdd__Probe' for type '' */ +#ifndef SOAP_TYPE__wsdd__Probe +#define SOAP_TYPE__wsdd__Probe (67) +#endif + +/* _wsdd__Bye has binding name '_wsdd__Bye' for type '' */ +#ifndef SOAP_TYPE__wsdd__Bye +#define SOAP_TYPE__wsdd__Bye (66) +#endif + +/* _wsdd__Hello has binding name '_wsdd__Hello' for type '' */ +#ifndef SOAP_TYPE__wsdd__Hello +#define SOAP_TYPE__wsdd__Hello (65) +#endif + +/* struct wsdd__AppSequenceType has binding name 'wsdd__AppSequenceType' for type 'wsdd:AppSequenceType' */ +#ifndef SOAP_TYPE_wsdd__AppSequenceType +#define SOAP_TYPE_wsdd__AppSequenceType (55) +#endif + +/* struct wsdd__SigType has binding name 'wsdd__SigType' for type 'wsdd:SigType' */ +#ifndef SOAP_TYPE_wsdd__SigType +#define SOAP_TYPE_wsdd__SigType (54) +#endif + +/* struct wsdd__SecurityType has binding name 'wsdd__SecurityType' for type 'wsdd:SecurityType' */ +#ifndef SOAP_TYPE_wsdd__SecurityType +#define SOAP_TYPE_wsdd__SecurityType (53) +#endif + +/* struct wsdd__ScopesType has binding name 'wsdd__ScopesType' for type 'wsdd:ScopesType' */ +#ifndef SOAP_TYPE_wsdd__ScopesType +#define SOAP_TYPE_wsdd__ScopesType (52) +#endif + +/* struct wsdd__ResolveMatchType has binding name 'wsdd__ResolveMatchType' for type 'wsdd:ResolveMatchType' */ +#ifndef SOAP_TYPE_wsdd__ResolveMatchType +#define SOAP_TYPE_wsdd__ResolveMatchType (51) +#endif + +/* struct wsdd__ResolveMatchesType has binding name 'wsdd__ResolveMatchesType' for type 'wsdd:ResolveMatchesType' */ +#ifndef SOAP_TYPE_wsdd__ResolveMatchesType +#define SOAP_TYPE_wsdd__ResolveMatchesType (50) +#endif + +/* struct wsdd__ResolveType has binding name 'wsdd__ResolveType' for type 'wsdd:ResolveType' */ +#ifndef SOAP_TYPE_wsdd__ResolveType +#define SOAP_TYPE_wsdd__ResolveType (49) +#endif + +/* struct wsdd__ProbeMatchType has binding name 'wsdd__ProbeMatchType' for type 'wsdd:ProbeMatchType' */ +#ifndef SOAP_TYPE_wsdd__ProbeMatchType +#define SOAP_TYPE_wsdd__ProbeMatchType (48) +#endif + +/* struct wsdd__ProbeMatchesType has binding name 'wsdd__ProbeMatchesType' for type 'wsdd:ProbeMatchesType' */ +#ifndef SOAP_TYPE_wsdd__ProbeMatchesType +#define SOAP_TYPE_wsdd__ProbeMatchesType (47) +#endif + +/* struct wsdd__ProbeType has binding name 'wsdd__ProbeType' for type 'wsdd:ProbeType' */ +#ifndef SOAP_TYPE_wsdd__ProbeType +#define SOAP_TYPE_wsdd__ProbeType (46) +#endif + +/* struct wsdd__ByeType has binding name 'wsdd__ByeType' for type 'wsdd:ByeType' */ +#ifndef SOAP_TYPE_wsdd__ByeType +#define SOAP_TYPE_wsdd__ByeType (45) +#endif + +/* struct wsdd__HelloType has binding name 'wsdd__HelloType' for type 'wsdd:HelloType' */ +#ifndef SOAP_TYPE_wsdd__HelloType +#define SOAP_TYPE_wsdd__HelloType (44) +#endif + +/* struct SOAP_ENV__Fault has binding name 'SOAP_ENV__Fault' for type '' */ +#ifndef SOAP_TYPE_SOAP_ENV__Fault +#define SOAP_TYPE_SOAP_ENV__Fault (43) +#endif + +/* struct SOAP_ENV__Reason has binding name 'SOAP_ENV__Reason' for type '' */ +#ifndef SOAP_TYPE_SOAP_ENV__Reason +#define SOAP_TYPE_SOAP_ENV__Reason (39) +#endif + +/* struct SOAP_ENV__Code has binding name 'SOAP_ENV__Code' for type '' */ +#ifndef SOAP_TYPE_SOAP_ENV__Code +#define SOAP_TYPE_SOAP_ENV__Code (37) +#endif + +/* struct SOAP_ENV__Detail has binding name 'SOAP_ENV__Detail' for type '' */ +#ifndef SOAP_TYPE_SOAP_ENV__Detail +#define SOAP_TYPE_SOAP_ENV__Detail (35) +#endif + +/* struct SOAP_ENV__Header has binding name 'SOAP_ENV__Header' for type '' */ +#ifndef SOAP_TYPE_SOAP_ENV__Header +#define SOAP_TYPE_SOAP_ENV__Header (30) +#endif + +/* _wsa__FaultTo has binding name '_wsa__FaultTo' for type '' */ +#ifndef SOAP_TYPE__wsa__FaultTo +#define SOAP_TYPE__wsa__FaultTo (27) +#endif + +/* _wsa__ReplyTo has binding name '_wsa__ReplyTo' for type '' */ +#ifndef SOAP_TYPE__wsa__ReplyTo +#define SOAP_TYPE__wsa__ReplyTo (26) +#endif + +/* _wsa__From has binding name '_wsa__From' for type '' */ +#ifndef SOAP_TYPE__wsa__From +#define SOAP_TYPE__wsa__From (25) +#endif + +/* _wsa__RelatesTo has binding name '_wsa__RelatesTo' for type '' */ +#ifndef SOAP_TYPE__wsa__RelatesTo +#define SOAP_TYPE__wsa__RelatesTo (22) +#endif + +/* _wsa__EndpointReference has binding name '_wsa__EndpointReference' for type '' */ +#ifndef SOAP_TYPE__wsa__EndpointReference +#define SOAP_TYPE__wsa__EndpointReference (20) +#endif + +/* struct wsa__Relationship has binding name 'wsa__Relationship' for type 'wsa:Relationship' */ +#ifndef SOAP_TYPE_wsa__Relationship +#define SOAP_TYPE_wsa__Relationship (12) +#endif + +/* struct wsa__ServiceNameType has binding name 'wsa__ServiceNameType' for type 'wsa:ServiceNameType' */ +#ifndef SOAP_TYPE_wsa__ServiceNameType +#define SOAP_TYPE_wsa__ServiceNameType (11) +#endif + +/* struct wsa__ReferenceParametersType has binding name 'wsa__ReferenceParametersType' for type 'wsa:ReferenceParametersType' */ +#ifndef SOAP_TYPE_wsa__ReferenceParametersType +#define SOAP_TYPE_wsa__ReferenceParametersType (10) +#endif + +/* struct wsa__ReferencePropertiesType has binding name 'wsa__ReferencePropertiesType' for type 'wsa:ReferencePropertiesType' */ +#ifndef SOAP_TYPE_wsa__ReferencePropertiesType +#define SOAP_TYPE_wsa__ReferencePropertiesType (9) +#endif + +/* struct wsa__EndpointReferenceType has binding name 'wsa__EndpointReferenceType' for type 'wsa:EndpointReferenceType' */ +#ifndef SOAP_TYPE_wsa__EndpointReferenceType +#define SOAP_TYPE_wsa__EndpointReferenceType (8) +#endif + +/* struct wsdd__ResolveMatchesType * has binding name 'PointerTowsdd__ResolveMatchesType' for type 'wsdd:ResolveMatchesType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ResolveMatchesType +#define SOAP_TYPE_PointerTowsdd__ResolveMatchesType (96) +#endif + +/* struct wsdd__ResolveType * has binding name 'PointerTowsdd__ResolveType' for type 'wsdd:ResolveType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ResolveType +#define SOAP_TYPE_PointerTowsdd__ResolveType (93) +#endif + +/* struct wsdd__ProbeMatchesType * has binding name 'PointerTowsdd__ProbeMatchesType' for type 'wsdd:ProbeMatchesType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ProbeMatchesType +#define SOAP_TYPE_PointerTowsdd__ProbeMatchesType (90) +#endif + +/* struct wsdd__ProbeType * has binding name 'PointerTowsdd__ProbeType' for type 'wsdd:ProbeType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ProbeType +#define SOAP_TYPE_PointerTowsdd__ProbeType (87) +#endif + +/* struct wsdd__ByeType * has binding name 'PointerTowsdd__ByeType' for type 'wsdd:ByeType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ByeType +#define SOAP_TYPE_PointerTowsdd__ByeType (84) +#endif + +/* struct wsdd__HelloType * has binding name 'PointerTowsdd__HelloType' for type 'wsdd:HelloType' */ +#ifndef SOAP_TYPE_PointerTowsdd__HelloType +#define SOAP_TYPE_PointerTowsdd__HelloType (81) +#endif + +/* struct wsdd__AppSequenceType * has binding name 'PointerTowsdd__AppSequenceType' for type 'wsdd:AppSequenceType' */ +#ifndef SOAP_TYPE_PointerTowsdd__AppSequenceType +#define SOAP_TYPE_PointerTowsdd__AppSequenceType (80) +#endif + +/* _wsdd__Id has binding name '_wsdd__Id' for type '' */ +#ifndef SOAP_TYPE__wsdd__Id +#define SOAP_TYPE__wsdd__Id (79) +#endif + +/* _wsdd__SupportedMatchingRules has binding name '_wsdd__SupportedMatchingRules' for type '' */ +#ifndef SOAP_TYPE__wsdd__SupportedMatchingRules +#define SOAP_TYPE__wsdd__SupportedMatchingRules (75) +#endif + +/* _wsdd__XAddrs has binding name '_wsdd__XAddrs' for type '' */ +#ifndef SOAP_TYPE__wsdd__XAddrs +#define SOAP_TYPE__wsdd__XAddrs (73) +#endif + +/* _wsdd__Types has binding name '_wsdd__Types' for type 'xsd:QName' */ +#ifndef SOAP_TYPE__wsdd__Types +#define SOAP_TYPE__wsdd__Types (71) +#endif + +/* struct wsdd__SigType * has binding name 'PointerTowsdd__SigType' for type 'wsdd:SigType' */ +#ifndef SOAP_TYPE_PointerTowsdd__SigType +#define SOAP_TYPE_PointerTowsdd__SigType (64) +#endif + +/* struct wsdd__ResolveMatchType * has binding name 'PointerTowsdd__ResolveMatchType' for type 'wsdd:ResolveMatchType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ResolveMatchType +#define SOAP_TYPE_PointerTowsdd__ResolveMatchType (63) +#endif + +/* struct wsdd__ProbeMatchType * has binding name 'PointerTowsdd__ProbeMatchType' for type 'wsdd:ProbeMatchType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ProbeMatchType +#define SOAP_TYPE_PointerTowsdd__ProbeMatchType (62) +#endif + +/* unsigned int * has binding name 'PointerTounsignedInt' for type 'xsd:unsignedInt' */ +#ifndef SOAP_TYPE_PointerTounsignedInt +#define SOAP_TYPE_PointerTounsignedInt (61) +#endif + +/* struct wsdd__ScopesType * has binding name 'PointerTowsdd__ScopesType' for type 'wsdd:ScopesType' */ +#ifndef SOAP_TYPE_PointerTowsdd__ScopesType +#define SOAP_TYPE_PointerTowsdd__ScopesType (60) +#endif + +/* wsdd__FaultCodeOpenType has binding name 'wsdd__FaultCodeOpenType' for type 'wsdd:FaultCodeOpenType' */ +#ifndef SOAP_TYPE_wsdd__FaultCodeOpenType +#define SOAP_TYPE_wsdd__FaultCodeOpenType (58) +#endif + +/* wsdd__UriListType has binding name 'wsdd__UriListType' for type 'wsdd:UriListType' */ +#ifndef SOAP_TYPE_wsdd__UriListType +#define SOAP_TYPE_wsdd__UriListType (57) +#endif + +/* wsdd__QNameListType has binding name 'wsdd__QNameListType' for type 'xsd:QName' */ +#ifndef SOAP_TYPE_wsdd__QNameListType +#define SOAP_TYPE_wsdd__QNameListType (56) +#endif + +/* struct SOAP_ENV__Reason * has binding name 'PointerToSOAP_ENV__Reason' for type '' */ +#ifndef SOAP_TYPE_PointerToSOAP_ENV__Reason +#define SOAP_TYPE_PointerToSOAP_ENV__Reason (40) +#endif + +/* struct SOAP_ENV__Code * has binding name 'PointerToSOAP_ENV__Code' for type '' */ +#ifndef SOAP_TYPE_PointerToSOAP_ENV__Code +#define SOAP_TYPE_PointerToSOAP_ENV__Code (38) +#endif + +/* struct SOAP_ENV__Detail * has binding name 'PointerToSOAP_ENV__Detail' for type '' */ +#ifndef SOAP_TYPE_PointerToSOAP_ENV__Detail +#define SOAP_TYPE_PointerToSOAP_ENV__Detail (36) +#endif + +/* struct wsa__EndpointReferenceType * has binding name 'PointerTo_wsa__FaultTo' for type '' */ +#ifndef SOAP_TYPE_PointerTo_wsa__FaultTo +#define SOAP_TYPE_PointerTo_wsa__FaultTo (34) +#endif + +/* struct wsa__EndpointReferenceType * has binding name 'PointerTo_wsa__ReplyTo' for type '' */ +#ifndef SOAP_TYPE_PointerTo_wsa__ReplyTo +#define SOAP_TYPE_PointerTo_wsa__ReplyTo (33) +#endif + +/* struct wsa__EndpointReferenceType * has binding name 'PointerTo_wsa__From' for type '' */ +#ifndef SOAP_TYPE_PointerTo_wsa__From +#define SOAP_TYPE_PointerTo_wsa__From (32) +#endif + +/* struct wsa__Relationship * has binding name 'PointerTo_wsa__RelatesTo' for type '' */ +#ifndef SOAP_TYPE_PointerTo_wsa__RelatesTo +#define SOAP_TYPE_PointerTo_wsa__RelatesTo (31) +#endif + +/* _wsa__Action has binding name '_wsa__Action' for type '' */ +#ifndef SOAP_TYPE__wsa__Action +#define SOAP_TYPE__wsa__Action (24) +#endif + +/* _wsa__To has binding name '_wsa__To' for type '' */ +#ifndef SOAP_TYPE__wsa__To +#define SOAP_TYPE__wsa__To (23) +#endif + +/* _wsa__MessageID has binding name '_wsa__MessageID' for type '' */ +#ifndef SOAP_TYPE__wsa__MessageID +#define SOAP_TYPE__wsa__MessageID (21) +#endif + +/* char ** has binding name 'PointerTo_XML' for type '' */ +#ifndef SOAP_TYPE_PointerTo_XML +#define SOAP_TYPE_PointerTo_XML (19) +#endif + +/* struct wsa__ServiceNameType * has binding name 'PointerTowsa__ServiceNameType' for type 'wsa:ServiceNameType' */ +#ifndef SOAP_TYPE_PointerTowsa__ServiceNameType +#define SOAP_TYPE_PointerTowsa__ServiceNameType (18) +#endif + +/* char ** has binding name 'PointerTo_QName' for type '' */ +#ifndef SOAP_TYPE_PointerTo_QName +#define SOAP_TYPE_PointerTo_QName (17) +#endif + +/* struct wsa__ReferenceParametersType * has binding name 'PointerTowsa__ReferenceParametersType' for type 'wsa:ReferenceParametersType' */ +#ifndef SOAP_TYPE_PointerTowsa__ReferenceParametersType +#define SOAP_TYPE_PointerTowsa__ReferenceParametersType (16) +#endif + +/* struct wsa__ReferencePropertiesType * has binding name 'PointerTowsa__ReferencePropertiesType' for type 'wsa:ReferencePropertiesType' */ +#ifndef SOAP_TYPE_PointerTowsa__ReferencePropertiesType +#define SOAP_TYPE_PointerTowsa__ReferencePropertiesType (15) +#endif + +/* _QName has binding name '_QName' for type 'xsd:QName' */ +#ifndef SOAP_TYPE__QName +#define SOAP_TYPE__QName (6) +#endif + +/* _XML has binding name '_XML' for type '' */ +#ifndef SOAP_TYPE__XML +#define SOAP_TYPE__XML (5) +#endif + +/* char * has binding name 'string' for type 'xsd:string' */ +#ifndef SOAP_TYPE_string +#define SOAP_TYPE_string (4) +#endif + +/******************************************************************************\ + * * + * Externals * + * * +\******************************************************************************/ + + +/******************************************************************************\ + * * + * Client-Side Call Stub Functions * + * * +\******************************************************************************/ + + /** Web service one-way asynchronous operation 'soap_send_SOAP_ENV__Fault' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send_SOAP_ENV__Fault(struct soap *soap, const char *soap_endpoint, const char *soap_action, 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); + /** Web service one-way asynchronous operation 'soap_recv_SOAP_ENV__Fault' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *_param_1); + /** Web service one-way asynchronous operation 'soap_send___wsdd__Hello' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Hello(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__HelloType *wsdd__Hello); + /** Web service one-way asynchronous operation 'soap_recv___wsdd__Hello' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Hello(struct soap *soap, struct __wsdd__Hello *_param_1); + /** Web service one-way asynchronous operation 'soap_send___wsdd__Bye' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Bye(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ByeType *wsdd__Bye); + /** Web service one-way asynchronous operation 'soap_recv___wsdd__Bye' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Bye(struct soap *soap, struct __wsdd__Bye *_param_1); + /** Web service one-way asynchronous operation 'soap_send___wsdd__Probe' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Probe(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ProbeType *wsdd__Probe); + /** Web service one-way asynchronous operation 'soap_recv___wsdd__Probe' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Probe(struct soap *soap, struct __wsdd__Probe *_param_1); + /** Web service one-way asynchronous operation 'soap_send___wsdd__ProbeMatches' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__ProbeMatches(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ProbeMatchesType *wsdd__ProbeMatches); + /** Web service one-way asynchronous operation 'soap_recv___wsdd__ProbeMatches' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__ProbeMatches(struct soap *soap, struct __wsdd__ProbeMatches *_param_1); + /** Web service one-way asynchronous operation 'soap_send___wsdd__Resolve' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__Resolve(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ResolveType *wsdd__Resolve); + /** Web service one-way asynchronous operation 'soap_recv___wsdd__Resolve' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__Resolve(struct soap *soap, struct __wsdd__Resolve *_param_1); + /** Web service one-way asynchronous operation 'soap_send___wsdd__ResolveMatches' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___wsdd__ResolveMatches(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct wsdd__ResolveMatchesType *wsdd__ResolveMatches); + /** Web service one-way asynchronous operation 'soap_recv___wsdd__ResolveMatches' */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___wsdd__ResolveMatches(struct soap *soap, struct __wsdd__ResolveMatches *_param_1); + + /** Web service synchronous operation 'soap_call___tdn__Hello' to the specified endpoint and SOAP Action header, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_call___tdn__Hello(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__HelloType& tdn__Hello, struct wsdd__ResolveType &tdn__HelloResponse); + /** Web service asynchronous operation 'soap_send___tdn__Hello' to send a request message to the specified endpoint and SOAP Action header, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___tdn__Hello(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__HelloType& tdn__Hello); + /** Web service asynchronous operation 'soap_recv___tdn__Hello' to receive a response message from the connected endpoint, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___tdn__Hello(struct soap *soap, struct wsdd__ResolveType &tdn__HelloResponse); + + /** Web service synchronous operation 'soap_call___tdn__Bye' to the specified endpoint and SOAP Action header, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_call___tdn__Bye(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ByeType& tdn__Bye, struct wsdd__ResolveType &tdn__ByeResponse); + /** Web service asynchronous operation 'soap_send___tdn__Bye' to send a request message to the specified endpoint and SOAP Action header, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___tdn__Bye(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ByeType& tdn__Bye); + /** Web service asynchronous operation 'soap_recv___tdn__Bye' to receive a response message from the connected endpoint, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___tdn__Bye(struct soap *soap, struct wsdd__ResolveType &tdn__ByeResponse); + + /** Web service synchronous operation 'soap_call___tdn__Probe' to the specified endpoint and SOAP Action header, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_call___tdn__Probe(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ProbeType& tdn__Probe, struct wsdd__ProbeMatchesType &tdn__ProbeResponse); + /** Web service asynchronous operation 'soap_send___tdn__Probe' to send a request message to the specified endpoint and SOAP Action header, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_send___tdn__Probe(struct soap *soap, const char *soap_endpoint, const char *soap_action, const struct wsdd__ProbeType& tdn__Probe); + /** Web service asynchronous operation 'soap_recv___tdn__Probe' to receive a response message from the connected endpoint, returns SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 soap_recv___tdn__Probe(struct soap *soap, struct wsdd__ProbeMatchesType &tdn__ProbeResponse); + +/******************************************************************************\ + * * + * Server-Side Operations * + * * +\******************************************************************************/ + + /** Web service one-way operation 'SOAP_ENV__Fault' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ + SOAP_FMAC5 int SOAP_FMAC6 SOAP_ENV__Fault(struct 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); + /** Web service one-way operation '__wsdd__Hello' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ + SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Hello(struct soap*, struct wsdd__HelloType *wsdd__Hello); + /** Web service one-way operation '__wsdd__Bye' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ + SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Bye(struct soap*, struct wsdd__ByeType *wsdd__Bye); + /** Web service one-way operation '__wsdd__Probe' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ + SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Probe(struct soap*, struct wsdd__ProbeType *wsdd__Probe); + /** Web service one-way operation '__wsdd__ProbeMatches' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ + SOAP_FMAC5 int SOAP_FMAC6 __wsdd__ProbeMatches(struct soap*, struct wsdd__ProbeMatchesType *wsdd__ProbeMatches); + /** Web service one-way operation '__wsdd__Resolve' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ + SOAP_FMAC5 int SOAP_FMAC6 __wsdd__Resolve(struct soap*, struct wsdd__ResolveType *wsdd__Resolve); + /** Web service one-way operation '__wsdd__ResolveMatches' implementation, should return value of soap_send_empty_response() to send HTTP Accept acknowledgment, or return an error code, or return SOAP_OK to immediately return without sending an HTTP response message */ + SOAP_FMAC5 int SOAP_FMAC6 __wsdd__ResolveMatches(struct soap*, struct wsdd__ResolveMatchesType *wsdd__ResolveMatches); + /** Web service operation '__tdn__Hello' implementation, should return SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 __tdn__Hello(struct soap*, struct wsdd__HelloType tdn__Hello, struct wsdd__ResolveType &tdn__HelloResponse); + /** Web service operation '__tdn__Bye' implementation, should return SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 __tdn__Bye(struct soap*, struct wsdd__ByeType tdn__Bye, struct wsdd__ResolveType &tdn__ByeResponse); + /** Web service operation '__tdn__Probe' implementation, should return SOAP_OK or error code */ + SOAP_FMAC5 int SOAP_FMAC6 __tdn__Probe(struct soap*, struct wsdd__ProbeType tdn__Probe, struct wsdd__ProbeMatchesType &tdn__ProbeResponse); + +/******************************************************************************\ + * * + * Server-Side Skeletons to Invoke Service Operations * + * * +\******************************************************************************/ + +extern "C" SOAP_FMAC5 int SOAP_FMAC6 soap_serve(struct soap*); + +extern "C" SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve_SOAP_ENV__Fault(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Hello(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Bye(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Probe(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__ProbeMatches(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__Resolve(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___wsdd__ResolveMatches(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___tdn__Hello(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___tdn__Bye(struct soap*); + +SOAP_FMAC5 int SOAP_FMAC6 soap_serve___tdn__Probe(struct soap*); + +#endif + +/* End of soapStub.h */ diff --git a/unit_test/test/onvif/onvif-discover/stdsoap2.cpp b/unit_test/test/onvif/onvif-discover/stdsoap2.cpp new file mode 100644 index 0000000..e45b866 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/stdsoap2.cpp @@ -0,0 +1,23713 @@ +/* + stdsoap2.c[pp] 2.8.135 + + gSOAP runtime engine + +gSOAP XML Web services tools +Copyright (C) 2000,2024, 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. +-------------------------------------------------------------------------------- +Contributors: + +Wind River Systems, Inc., for the following addition licensed under the gSOAP +public license: + - vxWorks compatible, enabled with compiler option -DVXWORKS +-------------------------------------------------------------------------------- +gSOAP public license. + +The contents of this file are subject to the gSOAP Public License Version 1.3 +(the "License"); you may not use this file except in compliance with the +License. You may obtain a copy of the License at +http://www.cs.fsu.edu/~engelen/soaplicense.html +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +for the specific language governing rights and limitations under the License. + +The Initial Developer of the Original Code is Robert A. van Engelen. +Copyright (C) 2000,2024, Robert van Engelen, Genivia Inc., All Rights Reserved. +-------------------------------------------------------------------------------- +GPL license. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +Author contact information: +engelen@genivia.com / engelen@acm.org + +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia, Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#define GSOAP_LIB_VERSION 208135 + +/* silence GNU's warnings on format nonliteral strings and truncation (snprintf truncates on purpose for safety) */ +#ifdef __GNUC__ +# define GCC_VERSION_AT_LEAST(major, minor, patch) (GCC_VERSION >= (major * 10000 + minor * 100 + patch)) +# pragma GCC diagnostic ignored "-Wformat-nonliteral" +# if GCC_VERSION_AT_LEAST(7, 0, 0) +# pragma GCC diagnostic ignored "-Wformat-truncation" +# endif +#endif + +/* convert EBCDIC to ASCII */ +#ifdef AS400 +# pragma convert(819) +#endif + +#if defined(__gnu_linux__) && !defined(_GNU_SOURCE) +# define _GNU_SOURCE 1 +#endif + +#include "stdsoap2.h" + +#if GSOAP_VERSION != GSOAP_LIB_VERSION +# error "GSOAP VERSION MISMATCH IN LIBRARY: PLEASE REINSTALL PACKAGE" +#endif + +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) +# include /* vxWorks compatible */ +#endif + +#ifdef __BORLANDC__ +# pragma warn -8060 +#else +# ifdef WIN32 +# ifdef UNDER_CE +# pragma comment(lib, "ws2.lib") /* WinCE */ +# else +# pragma comment(lib, "Ws2_32.lib") +# endif +# pragma warning(disable : 4996) /* disable visual studio POSIX deprecation warnings */ +# endif +#endif + +#ifdef __cplusplus +SOAP_SOURCE_STAMP("@(#) stdsoap2.cpp ver 2.8.135 2024-07-01 00:00:00 GMT") +extern "C" { +#else +SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.8.135 2024-07-01 00:00:00 GMT") +#endif + +/* 8bit character representing unknown character entity or multibyte data */ +#ifndef SOAP_UNKNOWN_CHAR +# define SOAP_UNKNOWN_CHAR (0x7F) +#endif + +/* unicode character representing unknown characters outside the XML 1.0 UTF8 unicode space */ +#ifdef WITH_REPLACE_ILLEGAL_UTF8 +# ifndef SOAP_UNKNOWN_UNICODE_CHAR +# define SOAP_UNKNOWN_UNICODE_CHAR (0xFFFD) +# endif +#endif + +/* EOF=-1 */ +#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_coblank(c) ((c)+1 > 0 && (c) <= 32) + +#if defined(WIN32) && !defined(UNDER_CE) +#define soap_hash_ptr(p) ((size_t)((PtrToUlong(p) >> 3) & (SOAP_PTRHASH - 1))) +#else +#define soap_hash_ptr(p) ((size_t)(((unsigned long)(p) >> 3) & (SOAP_PTRHASH-1))) +#endif + +#ifdef SOAP_DEBUG +static void soap_init_logs(struct soap*); +static void soap_close_logfile(struct soap*, int); +static void soap_set_logfile(struct soap*, int, const char*); +#endif + +#ifdef SOAP_MEM_DEBUG +static void soap_init_mht(struct soap*); +static void soap_free_mht(struct soap*); +static void soap_track_unlink(struct soap*, const void*); +#endif + +static int soap_set_error(struct soap*, const char*, const char*, const char*, const char*, int); +static int soap_copy_fault(struct soap*, const char*, const char*, const char*, const char*); +static int soap_getattrval(struct soap*, char*, size_t*, soap_wchar); +static void soap_version(struct soap*); +static void soap_free_ns(struct soap*); +static soap_wchar soap_char(struct soap*); +static soap_wchar soap_getpi(struct soap*); +static int soap_isxdigit(int); +static void *fplugin(struct soap*, const char*); +static ULONG64 soap_count_attachments(struct soap*); +static int soap_try_connect_command(struct soap*, int http_command, const char *endpoint, const char *action); +static int soap_init_send(struct soap*); + +#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 int soap_has_copies(struct soap*, const char*, const char*); +static int soap_type_punned(struct soap*, const struct soap_ilist*); +static int soap_is_shaky(struct soap*, void*); +static void soap_init_iht(struct soap*); +static void soap_free_iht(struct soap*); +#endif +static void soap_init_pht(struct soap*); +static void soap_free_pht(struct soap*); + +#ifndef WITH_LEAN +static const char *soap_set_validation_fault(struct soap*, const char*, const char*); +static int soap_isnumeric(struct soap*, const char*); +static struct soap_nlist *soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized, short isearly); +static void soap_utilize_ns(struct soap *soap, const char *tag, short isearly); +static const wchar_t* soap_wstring(struct soap *soap, const char *s, int flag, long minlen, long maxlen, const char *pattern); +static wchar_t* soap_wcollapse(struct soap *soap, wchar_t *s, int flag, int insitu); +#endif + +static const char* soap_string(struct soap *soap, const char *s, int flag, long minlen, long maxlen, const char *pattern); +static char* soap_collapse(struct soap *soap, char *s, int flag, int insitu); +static const char* soap_QName(struct soap *soap, const char *s, long minlen, long maxlen, const char *pattern); + +#ifndef WITH_LEANER +static int soap_begin_attachments(struct soap*); +static int soap_end_attachments(struct soap *soap); +static struct soap_multipart *soap_alloc_multipart(struct soap*, struct soap_multipart**, struct soap_multipart**, const char*, size_t); +static int soap_putdimefield(struct soap*, const char*, size_t); +static char *soap_getdimefield(struct soap*, size_t); +static void soap_select_mime_boundary(struct soap*); +static int soap_valid_mime_boundary(struct soap*); +static void soap_resolve_attachment(struct soap*, struct soap_multipart*); +#endif + +#ifdef WITH_GZIP +static int soap_getgziphdr(struct soap*); +#endif + +#ifdef WITH_OPENSSL +# ifndef SOAP_SSL_RSA_BITS +# define SOAP_SSL_RSA_BITS 2048 +# endif +static int soap_ssl_init_done = 0; +static int ssl_auth_init(struct soap*); +static int ssl_verify_callback(int, X509_STORE_CTX*); +static int ssl_verify_callback_allow_expired_certificate(int, X509_STORE_CTX*); +static int ssl_password(char*, int, int, void*); +#endif + +#ifdef WITH_GNUTLS +# ifndef SOAP_SSL_RSA_BITS +# define SOAP_SSL_RSA_BITS 2048 +# endif +static int soap_ssl_init_done = 0; +static int ssl_auth_init(struct soap*); +static const char *ssl_verify(struct soap *soap, const char *host); +# if GNUTLS_VERSION_NUMBER < 0x020b00 +# if defined(HAVE_PTHREAD_H) +# include + /* make GNUTLS thread safe with pthreads */ + GCRY_THREAD_OPTION_PTHREAD_IMPL; +# elif defined(HAVE_PTH_H) + #include + /* make GNUTLS thread safe with PTH */ + GCRY_THREAD_OPTION_PTH_IMPL; +# endif +# endif +#endif + +#ifdef WITH_WOLFSSL +static int soap_ssl_init_done = 0; +static int ssl_auth_init(struct soap*); +static int ssl_verify_callback(int, WOLFSSL_X509_STORE_CTX*); +static int ssl_verify_callback_allow_expired_certificate(int, WOLFSSL_X509_STORE_CTX*); +static int ssl_password(char*, int, int, void*); +#endif + +#ifdef WITH_SYSTEMSSL +static int soap_ssl_init_done = 0; +static int ssl_auth_init(struct soap*); +static int ssl_recv(int sk, void *s, int n, char *user); +static int ssl_send(int sk, void *s, int n, char *user); +#endif + +#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER) +static const char * soap_decode(char*, size_t, const char*, const char*); +#endif + +#ifndef WITH_NOHTTP +static soap_wchar soap_getchunkchar(struct soap*); +static const char *http_error(struct soap*, int); +static int http_get(struct soap*); +static int http_put(struct soap*); +static int http_patch(struct soap*); +static int http_del(struct soap*); +static int http_200(struct soap*); +static int http_post(struct soap*, const char*, const char*, int, const char*, const char*, ULONG64); +static int http_send_header(struct soap*, const char*); +static int http_post_header(struct soap*, const char*, const char*); +static int http_response(struct soap*, int, ULONG64); +static int http_parse(struct soap*); +static int http_parse_header(struct soap*, const char*, const char*); +#endif + +#ifndef WITH_NOIO + +static int fsend(struct soap*, const char*, size_t); +static size_t frecv(struct soap*, char*, size_t); +static int tcp_init(struct soap*); +static const char *tcp_error(struct soap*); + +#if !defined(WITH_IPV6) +static int tcp_gethost(struct soap*, const char *addr, struct in_addr *inaddr); +#endif +#if !defined(WITH_IPV6) || defined(WITH_COOKIES) +static int tcp_gethostbyname(struct soap*, const char *addr, struct hostent *hostent, struct in_addr *inaddr); +#endif + +static SOAP_SOCKET tcp_connect(struct soap*, const char *endpoint, const char *host, int port); +static SOAP_SOCKET tcp_accept(struct soap*, SOAP_SOCKET, struct sockaddr*, int*); +static int tcp_select(struct soap*, SOAP_SOCKET, int, int); +static int tcp_disconnect(struct soap*); +static int tcp_closesocket(struct soap*, SOAP_SOCKET); +static int tcp_shutdownsocket(struct soap*, SOAP_SOCKET, int); +static const char *soap_strerror(struct soap*); + +#define SOAP_TCP_SELECT_RCV 0x1 +#define SOAP_TCP_SELECT_SND 0x2 +#define SOAP_TCP_SELECT_ERR 0x4 +#define SOAP_TCP_SELECT_ALL 0x7 +#define SOAP_TCP_SELECT_PIP 0x8 + +#if defined(WIN32) + #define SOAP_SOCKBLOCK(fd) \ + { \ + u_long blocking = 0; \ + ioctlsocket(fd, FIONBIO, &blocking); \ + } + #define SOAP_SOCKNONBLOCK(fd) \ + { \ + u_long nonblocking = 1; \ + ioctlsocket(fd, FIONBIO, &nonblocking); \ + } +#elif defined(VXWORKS) + #define SOAP_SOCKBLOCK(fd) \ + { \ + u_long blocking = 0; \ + ioctl(fd, FIONBIO, (void*)(&blocking)); \ + } + #define SOAP_SOCKNONBLOCK(fd) \ + { \ + u_long nonblocking = 1; \ + ioctl(fd, FIONBIO, (void*)(&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(SYMBIAN) + #define SOAP_SOCKBLOCK(fd) \ + { \ + long blocking = 0; \ + ioctl(fd, 0/*FIONBIO*/, &blocking); \ + } + #define SOAP_SOCKNONBLOCK(fd) \ + { \ + long nonblocking = 1; \ + ioctl(fd, 0/*FIONBIO*/, &nonblocking); \ + } +#else + #define SOAP_SOCKBLOCK(fd) (void)fcntl(fd, F_SETFL, fcntl(fd, F_GETFL)&~O_NONBLOCK); + #define SOAP_SOCKNONBLOCK(fd) (void)fcntl(fd, F_SETFL, fcntl(fd, F_GETFL)|O_NONBLOCK); +#endif + +#endif + +static const char soap_env1[42] = "http://schemas.xmlsoap.org/soap/envelope/"; +static const char soap_enc1[42] = "http://schemas.xmlsoap.org/soap/encoding/"; +static const char soap_env2[40] = "http://www.w3.org/2003/05/soap-envelope"; +static const char soap_enc2[40] = "http://www.w3.org/2003/05/soap-encoding"; +static const char soap_rpc[35] = "http://www.w3.org/2003/05/soap-rpc"; + +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"; + +#ifndef WITH_LEAN +static const char soap_indent[21] = "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; +/* Alternative indentation form for SOAP_XML_INDENT with spaces instead of tabs: +static const char soap_indent[41] = "\n "; +*/ +#endif + +#ifndef SOAP_CANARY +# define SOAP_CANARY (0xC0DE) +#endif + +static const char soap_padding[4] = "\0\0\0"; +#define SOAP_STR_PADDING (soap_padding) +#define SOAP_STR_EOS (soap_padding) +#define SOAP_NON_NULL (soap_padding) + +#ifndef WITH_LEAN +static const struct soap_code_map html_entity_codes[] = /* entities for XHTML parsing */ +{ + { 160, "nbsp" }, + { 161, "iexcl" }, + { 162, "cent" }, + { 163, "pound" }, + { 164, "curren" }, + { 165, "yen" }, + { 166, "brvbar" }, + { 167, "sect" }, + { 168, "uml" }, + { 169, "copy" }, + { 170, "ordf" }, + { 171, "laquo" }, + { 172, "not" }, + { 173, "shy" }, + { 174, "reg" }, + { 175, "macr" }, + { 176, "deg" }, + { 177, "plusmn" }, + { 178, "sup2" }, + { 179, "sup3" }, + { 180, "acute" }, + { 181, "micro" }, + { 182, "para" }, + { 183, "middot" }, + { 184, "cedil" }, + { 185, "sup1" }, + { 186, "ordm" }, + { 187, "raquo" }, + { 188, "frac14" }, + { 189, "frac12" }, + { 190, "frac34" }, + { 191, "iquest" }, + { 192, "Agrave" }, + { 193, "Aacute" }, + { 194, "Acirc" }, + { 195, "Atilde" }, + { 196, "Auml" }, + { 197, "Aring" }, + { 198, "AElig" }, + { 199, "Ccedil" }, + { 200, "Egrave" }, + { 201, "Eacute" }, + { 202, "Ecirc" }, + { 203, "Euml" }, + { 204, "Igrave" }, + { 205, "Iacute" }, + { 206, "Icirc" }, + { 207, "Iuml" }, + { 208, "ETH" }, + { 209, "Ntilde" }, + { 210, "Ograve" }, + { 211, "Oacute" }, + { 212, "Ocirc" }, + { 213, "Otilde" }, + { 214, "Ouml" }, + { 215, "times" }, + { 216, "Oslash" }, + { 217, "Ugrave" }, + { 218, "Uacute" }, + { 219, "Ucirc" }, + { 220, "Uuml" }, + { 221, "Yacute" }, + { 222, "THORN" }, + { 223, "szlig" }, + { 224, "agrave" }, + { 225, "aacute" }, + { 226, "acirc" }, + { 227, "atilde" }, + { 228, "auml" }, + { 229, "aring" }, + { 230, "aelig" }, + { 231, "ccedil" }, + { 232, "egrave" }, + { 233, "eacute" }, + { 234, "ecirc" }, + { 235, "euml" }, + { 236, "igrave" }, + { 237, "iacute" }, + { 238, "icirc" }, + { 239, "iuml" }, + { 240, "eth" }, + { 241, "ntilde" }, + { 242, "ograve" }, + { 243, "oacute" }, + { 244, "ocirc" }, + { 245, "otilde" }, + { 246, "ouml" }, + { 247, "divide" }, + { 248, "oslash" }, + { 249, "ugrave" }, + { 250, "uacute" }, + { 251, "ucirc" }, + { 252, "uuml" }, + { 253, "yacute" }, + { 254, "thorn" }, + { 255, "yuml" }, + { 0, NULL } +}; +#endif + +#ifndef WITH_NOIO +#ifndef WITH_LEAN +static const struct soap_code_map h_error_codes[] = +{ +#ifdef HOST_NOT_FOUND + { HOST_NOT_FOUND, "Host not found" }, +#endif +#ifdef TRY_AGAIN + { TRY_AGAIN, "Try Again" }, +#endif +#ifdef NO_RECOVERY + { NO_RECOVERY, "No Recovery" }, +#endif +#ifdef NO_DATA + { NO_DATA, "No Data" }, +#endif +#ifdef NO_ADDRESS + { NO_ADDRESS, "No Address" }, +#endif + { 0, NULL } +}; +#endif +#endif + +#ifndef WITH_NOHTTP +#ifndef WITH_LEAN +static const struct soap_code_map h_http_error_codes[] = +{ + { 100, "Continue" }, + { 101, "Switching Protocols" }, + { 200, "OK" }, + { 201, "Created" }, + { 202, "Accepted" }, + { 203, "Non-Authoritative Information" }, + { 204, "No Content" }, + { 205, "Reset Content" }, + { 206, "Partial Content" }, + { 300, "Multiple Choices" }, + { 301, "Moved Permanently" }, + { 302, "Found" }, + { 303, "See Other" }, + { 304, "Not Modified" }, + { 305, "Use Proxy" }, + { 307, "Temporary Redirect" }, + { 400, "Bad Request" }, + { 401, "Unauthorized" }, + { 402, "Payment Required" }, + { 403, "Forbidden" }, + { 404, "Not Found" }, + { 405, "Method Not Allowed" }, + { 406, "Not Acceptable" }, + { 407, "Proxy Authentication Required" }, + { 408, "Request Time-out" }, + { 409, "Conflict" }, + { 410, "Gone" }, + { 411, "Length Required" }, + { 412, "Precondition Failed" }, + { 413, "Request Entity Too Large" }, + { 414, "Request-URI Too Large" }, + { 415, "Unsupported Media Type" }, + { 416, "Requested range not satisfiable" }, + { 417, "Expectation Failed" }, + { 422, "Unprocessable Entity" }, + { 426, "Upgrade Required" }, + { 428, "Precondition Required" }, + { 429, "Too Many Requests" }, + { 431, "Request Header Fields Too Large" }, + { 500, "Internal Server Error" }, + { 501, "Not Implemented" }, + { 502, "Bad Gateway" }, + { 503, "Service Unavailable" }, + { 504, "Gateway Time-out" }, + { 505, "HTTP Version not supported" }, + { 511, "Network Authentication Required" }, + { 0, NULL } +}; +#endif +#endif + +#ifdef WITH_OPENSSL +static const struct soap_code_map h_ssl_error_codes[] = +{ +#define _SSL_ERROR(e) { e, #e } + _SSL_ERROR(SSL_ERROR_SSL), + _SSL_ERROR(SSL_ERROR_ZERO_RETURN), + _SSL_ERROR(SSL_ERROR_WANT_READ), + _SSL_ERROR(SSL_ERROR_WANT_WRITE), + _SSL_ERROR(SSL_ERROR_WANT_CONNECT), + _SSL_ERROR(SSL_ERROR_WANT_X509_LOOKUP), + _SSL_ERROR(SSL_ERROR_SYSCALL), + { 0, NULL } +}; +#endif + +#ifndef WITH_LEANER +static const struct soap_code_map mime_codes[] = +{ + { SOAP_MIME_7BIT, "7bit" }, + { SOAP_MIME_8BIT, "8bit" }, + { SOAP_MIME_BINARY, "binary" }, + { SOAP_MIME_QUOTED_PRINTABLE, "quoted-printable" }, + { SOAP_MIME_BASE64, "base64" }, + { SOAP_MIME_IETF_TOKEN, "ietf-token" }, + { SOAP_MIME_X_TOKEN, "x-token" }, + { 0, NULL } +}; +#endif + +#ifdef WIN32 +static int tcp_done = 0; +#endif + +#if (defined(_AIX43) || defined(TRU64) || defined(HP_UX)) && defined(HAVE_GETHOSTBYNAME_R) +#ifndef h_errno +extern int h_errno; +#endif +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static int +fsend(struct soap *soap, const char *s, size_t n) +{ + int nwritten, err; + SOAP_SOCKET sk; + soap->errnum = 0; +#if defined(__cplusplus) && !defined(WITH_COMPAT) + if (soap->os) + { + soap->os->write(s, (std::streamsize)n); + if (soap->os->good()) + return SOAP_OK; + return SOAP_EOF; + } +#endif + sk = soap->sendsk; + if (!soap_valid_socket(sk)) + sk = soap->socket; + while (n) + { + if (soap_valid_socket(sk)) + { + if (soap->send_timeout) + { + for (;;) + { + int r; +#ifdef WITH_SELF_PIPE +#ifdef WITH_OPENSSL + if (soap->ssl) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL | SOAP_TCP_SELECT_PIP, soap->send_timeout); + else +#endif +#ifdef WITH_GNUTLS + if (soap->session) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL | SOAP_TCP_SELECT_PIP, soap->send_timeout); + else +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL | SOAP_TCP_SELECT_PIP, soap->send_timeout); + else +#endif +#ifdef WITH_SYSTEMSSL + if (soap->ssl) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL | SOAP_TCP_SELECT_PIP, soap->send_timeout); + else +#endif + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR | SOAP_TCP_SELECT_PIP, soap->send_timeout); + if ((r & SOAP_TCP_SELECT_PIP)) /* abort if data is pending on pipe */ + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connection closed by self pipe\n")); + return SOAP_EOF; + } +#else +#ifdef WITH_OPENSSL + if (soap->ssl) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL, soap->send_timeout); + else +#endif +#ifdef WITH_GNUTLS + if (soap->session) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL, soap->send_timeout); + else +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL, soap->send_timeout); + else +#endif +#ifdef WITH_SYSTEMSSL + if (soap->ssl) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_ALL, soap->send_timeout); + else +#endif + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->send_timeout); +#endif + if (r > 0) + break; + if (!r) + return SOAP_EOF; + err = soap->errnum; + if (!err) + return soap->error; + if (err != SOAP_EAGAIN && err != SOAP_EWOULDBLOCK) + return SOAP_EOF; + } + } +#ifndef WITH_LEAN + if (soap->transfer_timeout) + { + time_t now = time(NULL); + if ((soap->transfer_timeout > 0 && difftime(now, (time_t)soap->start) > (double)soap->transfer_timeout) + || (soap->transfer_timeout < 0 && difftime(now, (time_t)soap->start) > -1000000.0 * (double)soap->transfer_timeout)) + return SOAP_EOF; + } +#endif +#ifdef WITH_OPENSSL + if (soap->ssl) + nwritten = SSL_write(soap->ssl, s, (int)n); + else if (soap->bio) + nwritten = BIO_write(soap->bio, s, (int)n); + else +#endif +#ifdef WITH_GNUTLS + if (soap->session) + nwritten = gnutls_record_send(soap->session, s, n); + else +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl) + nwritten = wolfSSL_write(soap->ssl, s, n); + else +#endif +#ifdef WITH_SYSTEMSSL + if (soap->ssl) + { + err = gsk_secure_socket_write(soap->ssl, (char*)s, n, &nwritten); + if (err != GSK_OK) + nwritten = 0; + } + else +#endif +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + { + if (soap->peerlen) + nwritten = sendto(sk, (char*)s, (SOAP_WINSOCKINT)n, soap->socket_flags, &soap->peer.addr, (SOAP_WINSOCKINT)soap->peerlen); + else + 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 = 2; /* SOAP-over-UDP MULTICAST_UDP_REPEAT - 1 */ + else + udp_repeat = 1; /* SOAP-over-UDP UNICAST_UDP_REPEAT - 1 */ + udp_delay = ((unsigned int)soap_random % 201) + 50; /* UDP_MIN_DELAY .. UDP_MAX_DELAY */ + do + { + tcp_select(soap, sk, SOAP_TCP_SELECT_ERR, -1000 * udp_delay); + if (soap->peerlen) + nwritten = sendto(sk, (char*)s, (SOAP_WINSOCKINT)n, soap->socket_flags, &soap->peer.addr, (SOAP_WINSOCKINT)soap->peerlen); + else + 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-- > 1); + } + if (nwritten < 0) + { + err = soap_socket_errno; + if (err && err != SOAP_EINTR) + { + soap->errnum = err; + return SOAP_EOF; + } + nwritten = 0; /* and call write() again */ + } + } + else +#endif +#if !defined(AS400) + nwritten = send(sk, s, (int)n, soap->socket_flags); +#else + nwritten = send(sk, (void*)s, n, soap->socket_flags); +#endif + if (nwritten <= 0) + { + int r = 0; + err = soap_socket_errno; +#ifdef WITH_OPENSSL + if (soap->ssl && (r = SSL_get_error(soap->ssl, nwritten)) != SSL_ERROR_NONE && r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) + { + soap->errnum = err; + return SOAP_EOF; + } +#endif +#ifdef WITH_GNUTLS + if (soap->session) + { + if (nwritten == GNUTLS_E_INTERRUPTED) + err = SOAP_EINTR; + else if (nwritten == GNUTLS_E_AGAIN) + err = SOAP_EAGAIN; + } +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl && (r = wolfSSL_get_error(soap->ssl, nwritten)) != SSL_ERROR_NONE && r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) + { + soap->errnum = err; + return SOAP_EOF; + } +#endif + if (err == SOAP_EWOULDBLOCK || err == SOAP_EAGAIN) + { +#ifdef WITH_OPENSSL + if (soap->ssl && r == SSL_ERROR_WANT_READ) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000); + else +#endif +#ifdef WITH_GNUTLS + if (soap->session && !gnutls_record_get_direction(soap->session)) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000); + else +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl && r == SSL_ERROR_WANT_READ) + 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, 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) + return SOAP_EOF; + } + else if (err && err != SOAP_EINTR) + { + soap->errnum = err; + return SOAP_EOF; + } + nwritten = 0; /* and call write() again */ + } + } + else + { +#ifdef WITH_FASTCGI + nwritten = fwrite((void*)s, 1, n, stdout); + fflush(stdout); +#else +#ifdef UNDER_CE + nwritten = fwrite(s, 1, n, soap->sendfd); +#else +#ifdef WMW_RPM_IO + /* vxWorks compatible */ + if (soap->rpmreqid) + nwritten = (httpBlockPut(soap->rpmreqid, (char*)s, n) == 0) ? n : -1; + else +#endif +#ifdef WIN32 + nwritten = _write(soap->sendfd, s, (unsigned int)n); +#else + nwritten = write(soap->sendfd, s, (unsigned int)n); +#endif +#endif +#endif + if (nwritten <= 0) + { +#ifndef WITH_FASTCGI + err = soap_errno; +#else + err = EOF; +#endif + if (err && err != SOAP_EINTR && err != SOAP_EWOULDBLOCK && err != SOAP_EAGAIN) + { + soap->errnum = err; + return SOAP_EOF; + } + nwritten = 0; /* and call write() again */ + } + } + n -= nwritten; + s += nwritten; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_send_raw(struct soap *soap, const char *s, size_t n) +{ + if (!s || !n) + return SOAP_OK; +#ifndef WITH_LEANER + if (soap->fpreparesend && (soap->mode & SOAP_IO) != SOAP_IO_STORE && (soap->mode & SOAP_IO_LENGTH) && (soap->error = soap->fpreparesend(soap, s, n)) != SOAP_OK) + return soap->error; + if (soap->ffiltersend && (soap->error = soap->ffiltersend(soap, &s, &n)) != SOAP_OK) + return soap->error; +#endif + if ((soap->mode & SOAP_IO_LENGTH)) + { + soap->count += n; + } + else if ((soap->mode & SOAP_IO)) + { + size_t i = sizeof(soap->buf) - soap->bufidx; + while (n >= i) + { + (void)soap_memcpy((void*)(soap->buf + soap->bufidx), i, (const void*)s, i); + soap->bufidx = sizeof(soap->buf); + if (soap_flush(soap)) + return soap->error; + s += i; + n -= i; + i = sizeof(soap->buf); + } + (void)soap_memcpy((void*)(soap->buf + soap->bufidx), sizeof(soap->buf) - soap->bufidx, (const void*)s, n); + soap->bufidx += n; + } + else + { + return soap_flush_raw(soap, s, n); + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_flush(struct soap *soap) +{ + size_t n = soap->bufidx; + if (!n) + return soap->error = soap->fsend(soap, SOAP_STR_EOS, 0); /* force a zero send for HTTP GET and DELETE */ +#ifndef WITH_LEANER + if ((soap->mode & SOAP_IO) == SOAP_IO_STORE) + { + int r; + if (soap->fpreparesend && (r = soap->fpreparesend(soap, soap->buf, n)) != SOAP_OK) + return soap->error = r; + } +#endif + soap->bufidx = 0; +#ifdef WITH_ZLIB + if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream) + { + soap->d_stream->next_in = (Byte*)soap->buf; + soap->d_stream->avail_in = (unsigned int)n; +#ifdef WITH_GZIP + soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)n); +#endif + do + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating %u bytes\n", soap->d_stream->avail_in)); + if (deflate(soap->d_stream, Z_NO_FLUSH) != Z_OK) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to deflate: %s\n", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS)); + return soap->error = SOAP_ZLIB_ERROR; + } + if (!soap->d_stream->avail_out) + { + if (soap_flush_raw(soap, soap->z_buf, sizeof(soap->buf))) + return soap->error; + soap->d_stream->next_out = (Byte*)soap->z_buf; + soap->d_stream->avail_out = sizeof(soap->buf); + } + } while (soap->d_stream->avail_in); + return SOAP_OK; + } +#endif + return soap_flush_raw(soap, soap->buf, n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_flush_raw(struct soap *soap, const char *s, size_t n) +{ + if ((soap->mode & SOAP_IO) == SOAP_IO_STORE) + { + void *t; + t = soap_push_block(soap, NULL, n); + if (!t) + return soap->error = SOAP_EOM; + (void)soap_memcpy(t, n, (const void*)s, n); + return SOAP_OK; + } +#ifndef WITH_LEANER + if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) + { + char t[24]; /* note: actually the value of n <= SOAP_BUFLEN, which is 65536 or smaller */ + (SOAP_SNPRINTF(t, sizeof(t), 20), &"\r\n%lX\r\n"[soap->chunksize ? 0 : 2], (unsigned long)n); + DBGMSG(SENT, t, strlen(t)); + soap->error = soap->fsend(soap, t, strlen(t)); + if (soap->error) + return soap->error; + soap->chunksize += n; + } + DBGMSG(SENT, s, n); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send %lu bytes to socket=%d/fd=%d\n", (unsigned long)n, (int)soap->socket, soap->sendfd)); +#endif + return soap->error = soap->fsend(soap, s, n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_send(struct soap *soap, const char *s) +{ + if (!s) + return SOAP_OK; + return soap_send_raw(soap, s, strlen(s)); +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_send2(struct soap *soap, const char *s1, const char *s2) +{ + if (soap_send(soap, s1)) + return soap->error; + return soap_send(soap, s2); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_send3(struct soap *soap, const char *s1, const char *s2, const char *s3) +{ + if (soap_send(soap, s1) + || soap_send(soap, s2)) + return soap->error; + return soap_send(soap, s3); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_query_send_key(struct soap *soap, const char *s) +{ + if (!s) + return SOAP_OK; + if (!soap->body && soap_send_raw(soap, "&", 1)) + return soap->error; + soap->body = 0; + (void)soap_encode_url(s, soap->msgbuf, (int)sizeof(soap->msgbuf)); /* msgbuf length is max SOAP_TMPLEN or just 1024 bytes */ + return soap_send(soap, soap->msgbuf); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_query_send_val(struct soap *soap, const char *s) +{ + if (!s) + return SOAP_OK; + if (soap_send_raw(soap, "=", 1)) + return soap->error; + (void)soap_encode_url(s, soap->msgbuf, (int)sizeof(soap->msgbuf)); /* msgbuf length is max SOAP_TMPLEN or just 1024 bytes */ + return soap_send(soap, soap->msgbuf); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_query(struct soap *soap) +{ + return strchr(soap->path, '?'); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_query_key(struct soap *soap, char **s) +{ + char *t = *s; + (void)soap; + if (t && *t) + { + *s = (char*)soap_query_decode(t, strlen(t), t + 1); + return t; + } + return *s = NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_query_val(struct soap *soap, char **s) +{ + char *t = *s; + (void)soap; + if (t && *t == '=') + { + *s = (char*)soap_query_decode(t, strlen(t), t + 1); + return t; + } + return NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_query_decode(char *buf, size_t len, const char *val) +{ + const char *s; + char *t; + for (s = val; *s; s++) + if (*s != ' ' && *s != '=') + break; + if (*s == '"') + { + t = buf; + s++; + while (*s && *s != '"' && len-- > 1) + *t++ = *s++; + *t = '\0'; + do s++; + while (*s && *s != '&' && *s != '='); + } + else + { + t = buf; + while (*s && *s != '&' && *s != '=' && len-- > 1) + { + switch (*s) + { + case '+': + *t++ = ' '; + s++; + break; + case '\t': + case '\n': + case '\r': + case ' ': + s++; + break; + case '%': + *t++ = ((s[1] >= 'A' ? (s[1]&0x7) + 9 : s[1] - '0') << 4) + (s[2] >= 'A' ? (s[2]&0x7) + 9 : s[2] - '0'); + s += 3; + break; + default: + *t++ = *s++; + } + } + *t = '\0'; + } + return s; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static size_t +frecv(struct soap *soap, char *s, size_t n) +{ + int r; + int retries = 100; /* max 100 retries with non-blocking sockets */ + SOAP_SOCKET sk; + soap->errnum = 0; +#if defined(__cplusplus) && !defined(WITH_COMPAT) + if (soap->is) /* recv from C++ stream */ + { + if (soap->is->good()) + return (size_t)soap->is->read(s, (std::streamsize)n).gcount(); /* downcast to std::streamsize is OK: gcount() returns how much we got in s[] */ + return 0; + } +#else + if (soap->is) /* recv from C buffer until NUL */ + { + size_t l = strlen(soap->is); + if (l > n) + l = n; + (void)soap_memcpy((void*)s, n, soap->is, l); + soap->is += l; + return l; + } +#endif + sk = soap->recvsk; + if (!soap_valid_socket(sk)) + sk = soap->socket; + if (soap_valid_socket(sk)) + { + for (;;) + { +#if defined(WITH_OPENSSL) || defined(WITH_SYSTEMSSL) + int err = 0; +#endif +#ifdef WITH_OPENSSL + if (soap->recv_timeout && !soap->ssl) /* OpenSSL: sockets are nonblocking so go ahead to read */ +#else + if (soap->recv_timeout) +#endif + { + for (;;) + { +#ifdef WITH_SELF_PIPE + r = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR | SOAP_TCP_SELECT_PIP, soap->recv_timeout); + if ((r & SOAP_TCP_SELECT_PIP)) /* abort if data is pending on pipe */ + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connection closed by self pipe\n")); + return 0; + } +#else + r = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->recv_timeout); +#endif + if (r > 0) + break; + if (!r) + return 0; + r = soap->errnum; + if (r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK) + return 0; + } + } +#ifndef WITH_LEAN + if (soap->transfer_timeout) + { + time_t now = time(NULL); + if ((soap->transfer_timeout > 0 && difftime(now, (time_t)soap->start) > (double)soap->transfer_timeout) + || (soap->transfer_timeout < 0 && difftime(now, (time_t)soap->start) > -1000000.0 * (double)soap->transfer_timeout)) + return 0; + } +#endif +#ifdef WITH_OPENSSL + if (soap->ssl) + { + r = SSL_read(soap->ssl, s, (int)n); + if (r > 0) + return (size_t)r; + err = SSL_get_error(soap->ssl, r); + if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE) + return 0; + } + else if (soap->bio) + { + r = BIO_read(soap->bio, s, (int)n); + if (r > 0) + return (size_t)r; + return 0; + } + else +#endif +#ifdef WITH_GNUTLS + if (soap->session) + { + r = (int)gnutls_record_recv(soap->session, s, n); + if (r >= 0) + return (size_t)r; + } + else +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl) + { + r = wolfSSL_read(soap->ssl, s, n); + if (r >= 0) + return (size_t)r; + } + else +#endif +#ifdef WITH_SYSTEMSSL + if (soap->ssl) + { + err = gsk_secure_socket_read(soap->ssl, s, n, &r); + if (err == GSK_OK && r > 0) + return (size_t)r; + if (err != GSK_OK && err != GSK_WOULD_BLOCK && err != GSK_WOULD_BLOCK_WRITE) + return 0; + } + else +#endif + { +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + { + SOAP_SOCKLEN_T k = (SOAP_SOCKLEN_T)sizeof(soap->peer.addr); + memset((void*)&soap->peer, 0, sizeof(soap->peer)); + r = recvfrom(sk, s, (SOAP_WINSOCKINT)n, soap->socket_flags, &soap->peer.addr, &k); /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h, SOAP_WINSOCKINT cast is safe due to limited range of n in the engine (64K) */ + soap->peerlen = (size_t)k; +#ifdef WITH_IPV6 + soap->ip = 0; + soap->ip6[0] = 0; + soap->ip6[1] = 0; + soap->ip6[2] = 0; + soap->ip6[3] = 0; +#else + soap->ip = ntohl(soap->peer.in.sin_addr.s_addr); + soap->ip6[0] = 0; + soap->ip6[1] = 0; + soap->ip6[2] = 0xFFFF; + soap->ip6[3] = soap->ip; +#endif + } + else +#endif + r = recv(sk, s, (SOAP_WINSOCKINT)n, soap->socket_flags); /* SOAP_WINSOCKINT cast is safe due to limited range of n in the engine (64K) */ + if (r >= 0) + return (size_t)r; + r = soap_socket_errno; + if (r != SOAP_EINTR && r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK) + { + soap->errnum = r; + return 0; + } + } +#if defined(WITH_OPENSSL) + if (soap->ssl && err == SSL_ERROR_WANT_WRITE) + 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, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5); + else +#ifdef WITH_WOLFSSL + if (soap->ssl && err == SSL_ERROR_WANT_WRITE) + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5); + else +#endif +#elif defined(WITH_SYSTEMSSL) + if (soap->ssl && err == GSK_WOULD_BLOCK_WRITE) + 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, 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_EAGAIN && r != SOAP_EWOULDBLOCK) + return 0; + } + if (retries-- <= 0) + return 0; + } + } +#ifdef WITH_FASTCGI + return fread(s, 1, n, stdin); +#else +#ifdef UNDER_CE + return fread(s, 1, n, soap->recvfd); +#else +#ifdef WMW_RPM_IO + if (soap->rpmreqid) + r = httpBlockRead(soap->rpmreqid, s, n); + else +#endif +#ifdef WIN32 + r = _read(soap->recvfd, s, (unsigned int)n); +#else + r = read(soap->recvfd, s, n); +#endif + if (r >= 0) + return (size_t)r; + soap->errnum = soap_errno; + return 0; +#endif +#endif +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static soap_wchar +soap_getchunkchar(struct soap *soap) +{ + if (soap->bufidx < soap->buflen) + return soap->buf[soap->bufidx++]; + soap->bufidx = 0; + soap->buflen = soap->chunkbuflen = soap->frecv(soap, soap->buf, sizeof(soap->buf)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket=%d/fd=%d\n", (unsigned int)soap->buflen, (int)soap->socket, soap->recvfd)); + DBGMSG(RECV, soap->buf, soap->buflen); + if (soap->buflen) + return soap->buf[soap->bufidx++]; + return EOF; +} +#endif + +/******************************************************************************/ + +static int +soap_isxdigit(int c) +{ + return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_recv_raw(struct soap *soap) +{ + size_t ret; +#if !defined(WITH_LEANER) || defined(WITH_ZLIB) + int r; +#endif +#ifdef WITH_ZLIB + if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream) + { + 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 = sizeof(soap->buf); + r = inflate(soap->d_stream, Z_NO_FLUSH); + if (r == Z_NEED_DICT && soap->z_dict) + r = inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len); + if (r == Z_OK || r == Z_STREAM_END) + { + soap->bufidx = 0; + ret = soap->buflen = sizeof(soap->buf) - soap->d_stream->avail_out; + if (soap->zlib_in == SOAP_ZLIB_GZIP) + soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)ret); + if (r == Z_STREAM_END) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out)); + soap->d_stream->next_out = Z_NULL; + } + if (ret || r == Z_STREAM_END) + { + if (soap->count + ret < soap->count) + return soap->error = SOAP_EOF; + soap->count += ret; + if (soap->recv_maxlength && soap->count > soap->recv_maxlength) + return soap->error = SOAP_EOF; + soap->z_ratio_in = (float)soap->d_stream->total_in / (float)soap->d_stream->total_out; + if (soap->count > SOAP_MAXINFLATESIZE && soap->z_ratio_in < SOAP_MINDEFLATERATIO) + { + soap->d_stream->msg = (char*)"caught SOAP_MINDEFLATERATIO explosive decompression guard (remedy: increase SOAP_MAXINFLATESIZE and/or decrease SOAP_MINDEFLATERATIO)"; + return soap->error = SOAP_ZLIB_ERROR; + } + DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n")); + DBGMSG(RECV, soap->buf, ret); + DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n----\n")); +#ifndef WITH_LEANER + if (soap->fpreparerecv && (r = soap->fpreparerecv(soap, soap->buf, ret)) != SOAP_OK) + return soap->error = r; +#endif + return SOAP_OK; + } + } + else if (r != Z_BUF_ERROR) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate error: %s\n", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS)); + soap->d_stream->next_out = Z_NULL; + return soap->error = SOAP_ZLIB_ERROR; + } + } +zlib_again: + if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK && !soap->chunksize) + { + (void)soap_memcpy((void*)soap->buf, sizeof(soap->buf), (const void*)soap->z_buf, sizeof(soap->buf)); + soap->buflen = soap->z_buflen; + } + DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- compressed ----\n")); + } +#endif +#ifndef WITH_NOHTTP + if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) /* read HTTP chunked transfer */ + { + for (;;) + { + soap_wchar c; + char *t, tmp[17]; + unsigned long chunksize; + if (soap->chunksize) + { + soap->buflen = ret = soap->frecv(soap, soap->buf, soap->chunksize > sizeof(soap->buf) ? sizeof(soap->buf) : soap->chunksize); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk: read %u bytes\n", (unsigned int)ret)); + DBGMSG(RECV, soap->buf, ret); + soap->bufidx = 0; + if (!ret) + { + soap->ahead = EOF; + return EOF; + } + soap->chunksize -= ret; + break; + } + if (!soap->chunkbuflen) + { + soap->chunkbuflen = ret = soap->frecv(soap, soap->buf, sizeof(soap->buf)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes (chunked) from socket=%d\n", (unsigned int)ret, (int)soap->socket)); + DBGMSG(RECV, soap->buf, ret); + soap->bufidx = 0; + if (!ret) + { + soap->ahead = EOF; + return EOF; + } + } + else + { + soap->bufidx = soap->buflen; + } + soap->buflen = soap->chunkbuflen; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk size (idx=%u len=%u)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen)); + while (!soap_isxdigit((int)(c = soap_getchunkchar(soap)))) + { + if ((int)c == EOF) + { + soap->ahead = EOF; + return EOF; + } + } + t = tmp; + do + { + *t++ = (char)c; + } 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) + { + soap->ahead = EOF; + return EOF; + } + *t = '\0'; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunk size = %s (hex)\n", tmp)); + chunksize = soap_strtoul(tmp, &t, 16); + if (*t || chunksize > SOAP_MAXHTTPCHUNK || (soap->recv_maxlength && chunksize > soap->recv_maxlength)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunk size %lu exceeds max\n", chunksize)); + return soap->error = SOAP_HTTP_ERROR; + } + soap->chunksize = (size_t)chunksize; + soap->buflen = soap->bufidx + soap->chunksize; + if (soap->buflen <= soap->bufidx) + { + soap->bufidx = soap->buflen = soap->chunkbuflen = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of chunked message\n")); + ret = 0; + soap->ahead = EOF; + break; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving buf len to idx=%u len=%u (%s)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen, tmp)); + if (soap->buflen > soap->chunkbuflen) + { + soap->buflen = soap->chunkbuflen; + soap->chunksize -= soap->buflen - soap->bufidx; + soap->chunkbuflen = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Passed end of buffer for chunked HTTP (%u bytes left)\n", (unsigned int)(soap->buflen - soap->bufidx))); + } + else if (soap->chunkbuflen) + { + soap->chunksize = 0; + } + ret = soap->buflen - soap->bufidx; + if (ret) + break; + } + } + else +#endif + { + soap->bufidx = 0; + soap->buflen = ret = soap->frecv(soap, soap->buf, sizeof(soap->buf)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket=%d/fd=%d\n", (unsigned int)ret, (int)soap->socket, soap->recvfd)); + DBGMSG(RECV, soap->buf, ret); + } +#ifdef WITH_ZLIB + if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream) + { + (void)soap_memcpy((void*)soap->z_buf, sizeof(soap->buf), (const void*)soap->buf, sizeof(soap->buf)); + soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx); + soap->d_stream->avail_in = (unsigned int)ret; + soap->d_stream->next_out = (Byte*)soap->buf; + soap->d_stream->avail_out = sizeof(soap->buf); + r = inflate(soap->d_stream, Z_NO_FLUSH); + if (r == Z_NEED_DICT && soap->z_dict) + r = inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len); + if (r == Z_OK || r == Z_STREAM_END) + { + soap->bufidx = 0; + soap->z_buflen = soap->buflen; + soap->buflen = sizeof(soap->buf) - soap->d_stream->avail_out; + if (soap->zlib_in == SOAP_ZLIB_GZIP) + soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %u bytes\n", (unsigned int)soap->buflen)); + if (ret && !soap->buflen && r != Z_STREAM_END) + goto zlib_again; + ret = soap->buflen; + if (r == Z_STREAM_END) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated total %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out)); + soap->d_stream->next_out = Z_NULL; + } + soap->z_ratio_in = (float)soap->d_stream->total_in / (float)soap->d_stream->total_out; + if (soap->count + ret > SOAP_MAXINFLATESIZE && soap->z_ratio_in < SOAP_MINDEFLATERATIO) + { + soap->d_stream->msg = (char*)"caught SOAP_MINDEFLATERATIO explosive decompression guard (remedy: increase SOAP_MAXINFLATESIZE and/or decrease SOAP_MINDEFLATERATIO)"; + return soap->error = SOAP_ZLIB_ERROR; + } + DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n")); + DBGMSG(RECV, soap->buf, ret); +#ifndef WITH_LEANER + if (soap->fpreparerecv && (r = soap->fpreparerecv(soap, soap->buf, ret)) != SOAP_OK) + return soap->error = r; +#endif + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to inflate: (%d) %s\n", r, soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS)); + soap->d_stream->next_out = Z_NULL; + return soap->error = SOAP_ZLIB_ERROR; + } + } +#endif +#ifndef WITH_LEANER + if (soap->fpreparerecv +#ifdef WITH_ZLIB + && soap->zlib_in == SOAP_ZLIB_NONE +#endif + && (r = soap->fpreparerecv(soap, soap->buf + soap->bufidx, ret))) + return soap->error = r; +#endif + if (ret) + { + if (soap->count + ret < soap->count) + return EOF; + soap->count += ret; + if (soap->recv_maxlength && soap->count > soap->recv_maxlength) + return EOF; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read count=" SOAP_ULONG_FORMAT " (+%lu)\n", soap->count, (unsigned long)ret)); + return SOAP_OK; + } + return EOF; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_recv(struct soap *soap) +{ +#ifndef WITH_LEANER + if ((soap->mode & SOAP_ENC_DIME)) + { + if (soap->dime.buflen) + { + char *s; + int i; + unsigned char tmp[12]; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME hdr for chunked SOAP in DIME is in buffer\n")); + soap->buflen = soap->dime.buflen; + soap->dime.buflen = 0; + soap->dime.chunksize = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip padding (%ld bytes)\n", -(long)soap->dime.size&3)); + for (i = -(long)soap->dime.size&3; i > 0; i--) + { + soap->bufidx++; + if (soap->bufidx >= soap->buflen) + if (soap_recv_raw(soap)) + return EOF; + } + if (!(soap->dime.flags & SOAP_DIME_CF)) + return SOAP_OK; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME hdr for next SOAP in DIME chunk\n")); + s = (char*)tmp; + for (i = 12; i > 0; i--) + { + *s++ = soap->buf[soap->bufidx++]; + if (soap->bufidx >= soap->buflen) + if (soap_recv_raw(soap)) + return EOF; + } + if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION) + return soap->error = SOAP_DIME_MISMATCH; + soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0); + soap->dime.size = ((size_t)tmp[8] << 24) | ((size_t)tmp[9] << 16) | ((size_t)tmp[10] << 8) | ((size_t)tmp[11]); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get SOAP in DIME chunk (%u bytes)\n", (unsigned int)soap->dime.size)); + soap->dime.chunksize = soap->dime.size; + if (soap->buflen - soap->bufidx >= soap->dime.size) + { + if ((soap->dime.flags & SOAP_DIME_ME)) + { + soap->mode &= ~SOAP_ENC_DIME; + } + else + { + soap->dime.buflen = soap->buflen; + soap->buflen = soap->bufidx + soap->dime.chunksize; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes buffered)\n", (unsigned int)soap->buflen)); + } + } + else + { + soap->dime.chunksize -= soap->buflen - soap->bufidx; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes in chunk left)\n", (unsigned int)soap->dime.chunksize)); + } + return SOAP_OK; + } + if (soap->dime.chunksize) + { + if (soap_recv_raw(soap)) + return EOF; + if (soap->buflen - soap->bufidx >= soap->dime.chunksize) + { + if ((soap->dime.flags & SOAP_DIME_ME)) + { + soap->dime.chunksize = 0; + soap->mode &= ~SOAP_ENC_DIME; + } + else + { + soap->dime.buflen = soap->buflen; + soap->buflen = soap->bufidx + soap->dime.chunksize; + soap->dime.chunksize = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes buffered)\n", (unsigned int)soap->buflen)); + } + } + else + { + soap->dime.chunksize -= soap->buflen - soap->bufidx; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME (%u bytes in chunk left)\n", (unsigned int)soap->dime.chunksize)); + } + return SOAP_OK; + } + } + if (soap->ffilterrecv) + { + int err; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Filter recverror = %d bufidx = %lu buflen = %lu\n", soap->recverror, (unsigned long)soap->bufidx, (unsigned long)soap->buflen)); + if (soap->recverror) + { + soap->bufidx = soap->buflen = 0; + } + else + { + soap->bufidx = soap->buflen = 0; + err = soap->ffilterrecv(soap, soap->buf, &soap->buflen, sizeof(soap->buf)); + if (err) + { + if (err == SOAP_EOF) + return SOAP_EOF; + return soap->error = err; + } + if (soap->buflen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Filtered output continued %lu bytes\n", (unsigned long)soap->buflen)); + return SOAP_OK; + } + soap->recverror = soap_recv_raw(soap); + soap->buflen -= soap->bufidx; /* chunked may set bufidx > 0 to skip hex chunk length */ + } + while (soap->ffilterrecv) + { + err = soap->ffilterrecv(soap, soap->buf + soap->bufidx, &soap->buflen, sizeof(soap->buf) - soap->bufidx); + if (err) + { + if (err == SOAP_EOF) + return SOAP_EOF; + return soap->error = err; + } + if (soap->buflen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Filtered output %lu bytes\n", (unsigned long)soap->buflen)); + soap->buflen += soap->bufidx; + return SOAP_OK; + } + if (soap->recverror) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Returning postponed error %d\n", soap->recverror)); + return soap->recverror; + } + soap->recverror = soap_recv_raw(soap); + soap->buflen -= soap->bufidx; /* chunked may set bufidx > 0 to skip hex chunk length */ + } + } + return soap->recverror = soap_recv_raw(soap); +#else + return soap_recv_raw(soap); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +const struct soap_code_map* +SOAP_FMAC2 +soap_code(const struct soap_code_map *code_map, const char *str) +{ + if (code_map && str) + { + while (code_map->string) + { + if (!strcmp(str, code_map->string)) /* case sensitive */ + return code_map; + code_map++; + } + } + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +LONG64 +SOAP_FMAC2 +soap_code_int(const struct soap_code_map *code_map, const char *str, LONG64 other) +{ + if (code_map) + { + while (code_map->string) + { + if (!soap_tag_cmp(str, code_map->string)) /* case insensitive */ + return code_map->code; + code_map++; + } + } + return other; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_code_str(const struct soap_code_map *code_map, long code) +{ + if (!code_map) + return NULL; + while (code_map->code != code && code_map->string) + code_map++; + return code_map->string; +} + +/******************************************************************************/ + +SOAP_FMAC1 +LONG64 +SOAP_FMAC2 +soap_code_bits(const struct soap_code_map *code_map, const char *str) +{ + LONG64 bits = 0; + if (code_map) + { + while (str && *str) + { + const struct soap_code_map *p; + for (p = code_map; p->string; p++) + { + size_t n = strlen(p->string); + if (!strncmp(p->string, str, n) && soap_coblank((soap_wchar)str[n])) + { + bits |= p->code; + str += n; + while (*str > 0 && *str <= 32) + str++; + break; + } + } + if (!p->string) + return 0; + } + } + return bits; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_code_list(struct soap *soap, const struct soap_code_map *code_map, long code) +{ + char *t = soap->tmpbuf; + if (code_map) + { + while (code_map->string) + { + if ((code_map->code & code)) + { + const char *s = code_map->string; + if (t != soap->tmpbuf) + *t++ = ' '; + while (*s && t < soap->tmpbuf + sizeof(soap->tmpbuf) - 1) + *t++ = *s++; + if (t == soap->tmpbuf + sizeof(soap->tmpbuf) - 1) + break; + } + code_map++; + } + } + *t = '\0'; + return soap->tmpbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_binary_search_string(const char **a, int n, const char *s) +{ + int min = 0, max = n-1; + while (min <= max) + { + int mid = (min+max)/2; + int r = strcmp(s, a[mid]); + if (r < 0) + max = mid - 1; + else if (r > 0) + min = mid + 1; + else + return mid; + } + return -1; +} + +/******************************************************************************/ + +static soap_wchar +soap_char(struct soap *soap) +{ + char tmp[8]; + int i; + soap_wchar c; + char *s = tmp; + for (i = 0; i < (int)sizeof(tmp)-1; i++) + { + c = soap_get1(soap); + if (c == ';' || (int)c == EOF) + break; + *s++ = (char)c; + } + *s = '\0'; + if (*tmp == '#') + { + if (tmp[1] == 'x' || tmp[1] == 'X') + return (soap_wchar)soap_strtol(tmp + 2, NULL, 16); + return (soap_wchar)soap_strtol(tmp + 1, NULL, 10); + } + if (!strcmp(tmp, "lt")) + return '<'; + if (!strcmp(tmp, "gt")) + return '>'; + if (!strcmp(tmp, "amp")) + return '&'; + if (!strcmp(tmp, "quot")) + return '"'; + if (!strcmp(tmp, "apos")) + return '\''; +#ifndef WITH_LEAN + return (soap_wchar)soap_code_int(html_entity_codes, tmp, (LONG64)SOAP_UNKNOWN_CHAR); +#else + return SOAP_UNKNOWN_CHAR; /* use this to represent unknown code */ +#endif +} + +/******************************************************************************/ + +#ifdef WITH_LEAN +soap_wchar +soap_get0(struct soap *soap) +{ + return (soap->bufidx >= soap->buflen && soap_recv(soap)) ? EOF : (unsigned char)soap->buf[soap->bufidx]; +} +#endif + +/******************************************************************************/ + +#ifdef WITH_LEAN +soap_wchar +soap_get1(struct soap *soap) +{ + return (soap->bufidx >= soap->buflen && soap_recv(soap)) ? EOF : (unsigned char)soap->buf[soap->bufidx++]; +} +#endif + +/******************************************************************************/ + +#ifdef WITH_LEAN +SOAP_FMAC1 +soap_wchar +SOAP_FMAC2 +soap_getchar(struct soap *soap) +{ + soap_wchar c; + c = soap->ahead; + if (c) + { + if ((int)c != EOF) + soap->ahead = 0; + return c; + } + return soap_get1(soap); +} +#else +SOAP_FMAC1 +soap_wchar +SOAP_FMAC2 +soap_getahead(struct soap *soap) +{ + soap_wchar c = soap->ahead; + if ((int)c != EOF) + soap->ahead = 0; + return c; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +soap_wchar +SOAP_FMAC2 +soap_get(struct soap *soap) +{ + soap_wchar c; + c = soap->ahead; + if (c) + { + if ((int)c != EOF) + soap->ahead = 0; + } + else + { + c = soap_get1(soap); + } + while ((int)c != EOF) + { + if (soap->cdata) + { + if (c == ']') + { + c = soap_get1(soap); + if (c == ']') + { + c = soap_get0(soap); + if (c == '>') + { + soap->cdata = 0; + c = soap_get1(soap); + c = soap_get1(soap); + } + else + { + soap_unget(soap, ']'); + return ']'; + } + } + else + { + soap_revget1(soap); + return ']'; + } + } + else + { + return c; + } + } + switch (c) + { + case '<': + do + { + c = soap_get1(soap); + } while (soap_coblank(c)); + if (c == '!' || c == '?' || c == '%') + { + int k = 1; + if (c == '!') + { + c = soap_get1(soap); + if (c == '[') + { + do + { + c = soap_get1(soap); + } while ((int)c != EOF && c != '['); + if ((int)c == EOF) + break; + soap->cdata = 1; + c = soap_get1(soap); + continue; + } + if (c == '-' && (c = soap_get1(soap)) == '-') + { + do + { + c = soap_get1(soap); + if (c == '-' && (c = soap_get1(soap)) == '-') + break; + } while ((int)c != EOF); + } + } + else if (c == '?') + { + c = soap_getpi(soap); + } + while ((int)c != EOF) + { + if (c == '<') + { + k++; + } + else if (c == '>') + { + if (--k <= 0) + break; + } + c = soap_get1(soap); + } + if ((int)c == EOF) + break; + c = soap_get1(soap); + continue; + } + if (c == '/') + return SOAP_TT; + soap_revget1(soap); + return SOAP_LT; + case '>': + return SOAP_GT; + case '"': + return SOAP_QT; + case '\'': + return SOAP_AP; + case '&': + return soap_char(soap) | 0x80000000; + } + break; + } + return c; +} + +/******************************************************************************/ + +static soap_wchar +soap_getpi(struct soap *soap) +{ + char buf[64]; + char *s = buf; + size_t i = sizeof(buf); + soap_wchar c; + while ((int)(c = soap_getchar(soap)) != EOF && c != '?') + { + if (i > 1) + { + if (soap_coblank(c)) + c = ' '; + *s++ = (char)c; + i--; + } + } + *s = '\0'; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "XML PI \n", buf)); + if (!strncmp(buf, "xml ", 4)) + { + s = strstr(buf, " encoding="); + if (s && s[10]) + { + int err; + if (!soap_tag_cmp(s + 11, "iso-8859-*") + || !soap_tag_cmp(s + 11, "latin*")) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Switching to latin encoding\n")); + soap->mode |= SOAP_ENC_LATIN; + } + else if (!soap_tag_cmp(s + 11, "utf-8*")) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Switching to utf-8 encoding\n")); + soap->mode &= ~SOAP_ENC_LATIN; + } + else if (soap->fencoding && ((err = soap->fencoding(soap, s + 11)) != SOAP_OK)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Callback fencoding returned %d\n", err)); + soap->error = err; + c = EOF; + } + } + } + if ((int)c != EOF) + c = soap_getchar(soap); + return c; +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_move(struct soap *soap, ULONG64 n) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving " SOAP_ULONG_FORMAT " bytes forward\n", n)); + for (; n; n--) + if ((int)soap_getchar(soap) == EOF) + return SOAP_EOF; + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +ULONG64 +SOAP_FMAC2 +soap_tell(struct soap *soap) +{ + return soap->count - soap->buflen + soap->bufidx - (soap->ahead != 0); +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_pututf8(struct soap *soap, unsigned long c) +{ + char tmp[24]; + if ((c < 0x7F && c > 0x1F)) + { + *tmp = (char)c; + return soap_send_raw(soap, tmp, 1); + } +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + if (!(c == 0x09 || c == 0x0A || c == 0x0D || (c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF))) + c = SOAP_UNKNOWN_UNICODE_CHAR; +#endif +#ifndef WITH_LEAN + if (c > 0x9F) + { + char *t = tmp; + if (c < 0x0800) + { + *t++ = (char)(0xC0 | ((c >> 6) & 0x1F)); + } + else + { + if (c < 0x010000) + { + *t++ = (char)(0xE0 | ((c >> 12) & 0x0F)); + } + else + { + if (c < 0x200000) + { + *t++ = (char)(0xF0 | ((c >> 18) & 0x07)); + } + else + { + if (c < 0x04000000) + { + *t++ = (char)(0xF8 | ((c >> 24) & 0x03)); + } + else + { + *t++ = (char)(0xFC | ((c >> 30) & 0x01)); + *t++ = (char)(0x80 | ((c >> 24) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 18) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 12) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 6) & 0x3F)); + } + *t++ = (char)(0x80 | (c & 0x3F)); + *t = '\0'; + } + else +#endif + (SOAP_SNPRINTF(tmp, sizeof(tmp), 20), "&#x%lX;", c); + return soap_send(soap, tmp); +} + +/******************************************************************************/ + +SOAP_FMAC1 +soap_wchar +SOAP_FMAC2 +soap_getutf8(struct soap *soap) +{ +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + soap_wchar c, c1, c2, c3; +#else + soap_wchar c, c1, c2, c3, c4; +#endif + c = soap->ahead; + if (c >= 0x80) + soap->ahead = 0; + else + c = (soap_wchar)soap_get(soap); + if (c < 0x80 || c > 0xFF || (soap->mode & SOAP_ENC_LATIN)) + return c; +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + c1 = (soap_wchar)soap_get1(soap); + if (c <= 0xC1 || (c1 & 0xC0) != 0x80) + { + soap_revget1(soap); + return SOAP_UNKNOWN_UNICODE_CHAR; + } + c1 &= 0x3F; + if (c < 0xE0) + return (((c & 0x1F) << 6) | c1); + c2 = (soap_wchar)soap_get1(soap); + if ((c == 0xE0 && c1 < 0x20) || (c2 & 0xC0) != 0x80) + { + soap_revget1(soap); + return SOAP_UNKNOWN_UNICODE_CHAR; + } + c2 &= 0x3F; + if (c < 0xF0) + return (((c & 0x0F) << 12) | (c1 << 6) | c2); + c3 = (soap_wchar)soap_get1(soap); + if ((c == 0xF0 && c1 < 0x10) || (c == 0xF4 && c1 >= 0x10) || c >= 0xF5 || (c3 & 0xC0) != 0x80) + { + soap_revget1(soap); + return SOAP_UNKNOWN_UNICODE_CHAR; + } + return (((c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | (c3 & 0x3F)); +#else + c1 = (soap_wchar)soap_get1(soap); + if (c < 0xC0 || (c1 & 0xC0) != 0x80) + { + soap_revget1(soap); + /* doesn't look like this is UTF-8, try continue as if ISO-8859-1 */ + return c; + } + c1 &= 0x3F; + if (c < 0xE0) + return ((soap_wchar)(c & 0x1F) << 6) | c1; + c2 = (soap_wchar)soap_get1(soap) & 0x3F; + if (c < 0xF0) + return ((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2; + c3 = (soap_wchar)soap_get1(soap) & 0x3F; + if (c < 0xF8) + return ((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3; + c4 = (soap_wchar)soap_get1(soap) & 0x3F; + if (c < 0xFC) + return ((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4; + return ((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(soap_get1(soap) & 0x3F); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +size_t +SOAP_FMAC2 +soap_utf8len(const char *s) +{ + size_t l = 0; + while (*s) + if ((*s++ & 0xC0) != 0x80) + l++; + return l; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_puthex(struct soap *soap, const unsigned char *s, int n) +{ + char d[2 * SOAP_BINARY_BUFLEN], *p = d; +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + soap->dom->text = soap_s2hex(soap, s, NULL, n); + if (!soap->dom->text) + return soap->error; + return SOAP_OK; + } +#endif + for (; n > 0; n--) + { + int m = *s++; + p[0] = (char)((m >> 4) + (m > 159 ? '7' : '0')); + m &= 0x0F; + p[1] = (char)(m + (m > 9 ? '7' : '0')); + p += 2; + if (p - d == sizeof(d)) + { + if (soap_send_raw(soap, d, sizeof(d))) + return soap->error; + p = d; + } + } + if (p != d && soap_send_raw(soap, d, p - d)) + return soap->error; + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +unsigned char* +SOAP_FMAC2 +soap_gethex(struct soap *soap, int *n) +{ + size_t l = 0; +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + soap->dom->text = soap_string_in(soap, 1, -1, -1, NULL); + return (unsigned char*)soap_hex2s(soap, soap->dom->text, NULL, 0, n); + } +#endif +#ifdef WITH_FAST + soap->labidx = 0; + for (;;) + { + char *s; + size_t i, k; + if (soap_append_lab(soap, NULL, 0)) + return NULL; + s = soap->labbuf + soap->labidx; + k = soap->lablen - soap->labidx; + soap->labidx = soap->lablen; + for (i = 0; i < k; i++) + { + char d1, d2; + soap_wchar c; + c = soap_get(soap); + if (soap_isxdigit(c)) + { + d1 = (char)c; + c = soap_get(soap); + if (soap_isxdigit(c)) + { + d2 = (char)c; + } + else + { + soap->error = SOAP_TYPE; + return NULL; + } + } + else + { + unsigned char *p = NULL; + l = soap->lablen + i - k; + soap_unget(soap, c); + if (n) + *n = (int)l; + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + { + soap->error = SOAP_LENGTH; + } + else + { + p = (unsigned char*)soap_malloc(soap, l); + if (p) + (void)soap_memcpy((void*)p, l, (const void*)soap->labbuf, l); + } + return p; + } + *s++ = (char)(((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0')); + } + l = soap->lablen; + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + { + soap->error = SOAP_LENGTH; + return NULL; + } + } +#else + if (soap_alloc_block(soap) == NULL) + return NULL; + for (;;) + { + int i; + char *s = (char*)soap_push_block(soap, NULL, SOAP_BLKLEN); + if (!s) + { + soap_end_block(soap, NULL); + return NULL; + } + for (i = 0; i < SOAP_BLKLEN; i++) + { + char d1, d2; + soap_wchar c = soap_get(soap); + if (soap_isxdigit(c)) + { + d1 = (char)c; + c = soap_get(soap); + if (soap_isxdigit(c)) + d2 = (char)c; + else + { + soap_end_block(soap, NULL); + soap->error = SOAP_TYPE; + return NULL; + } + } + else + { + unsigned char *p; + soap_unget(soap, c); + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + { + soap->error = SOAP_LENGTH; + soap_end_block(soap, NULL); + return NULL; + } + if (n) + *n = (int)soap_size_block(soap, NULL, i); + p = (unsigned char*)soap_save_block(soap, NULL, NULL, 0); + return p; + } + *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0'); + l++; + } + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + { + soap->error = SOAP_LENGTH; + soap_end_block(soap, NULL); + return NULL; + } + } +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_putbase64(struct soap *soap, const unsigned char *s, int n) +{ + char d[4 * SOAP_BINARY_BUFLEN], *p = d; + if (!s) + return SOAP_OK; +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + soap->dom->text = soap_s2base64(soap, s, NULL, n); + if (!soap->dom->text) + return soap->error; + return SOAP_OK; + } +#endif + for (; n > 2; n -= 3, s += 3) + { + p[0] = soap_base64o[(s[0] & 0xFC) >> 2]; + p[1] = soap_base64o[((s[0] & 0x03) << 4) | ((s[1] & 0xF0) >> 4)]; + p[2] = soap_base64o[((s[1] & 0x0F) << 2) | ((s[2] & 0xC0) >> 6)]; + p[3] = soap_base64o[s[2] & 0x3F]; + p += 4; + if (p - d == sizeof(d)) + { + if (soap_send_raw(soap, d, sizeof(d))) + return soap->error; + p = d; + } + } + if (n == 2) + { + p[0] = soap_base64o[(s[0] & 0xFC) >> 2]; + p[1] = soap_base64o[((s[0] & 0x03) << 4) | ((s[1] & 0xF0) >> 4)]; + p[2] = soap_base64o[(s[1] & 0x0F) << 2]; + p[3] = '='; + p += 4; + } + else if (n == 1) + { + p[0] = soap_base64o[(s[0] & 0xFC) >> 2]; + p[1] = soap_base64o[(s[0] & 0x03) << 4]; + p[2] = '='; + p[3] = '='; + p += 4; + } + if (p != d && soap_send_raw(soap, d, p - d)) + return soap->error; + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +unsigned char* +SOAP_FMAC2 +soap_getbase64(struct soap *soap, int *n, int malloc_flag) +{ + size_t l = 0; + (void)malloc_flag; +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + soap->dom->text = soap_string_in(soap, 1, -1, -1, NULL); + return (unsigned char*)soap_base642s(soap, soap->dom->text, NULL, 0, n); + } +#endif +#ifdef WITH_FAST + soap->labidx = 0; + for (;;) + { + size_t i, k; + char *s; + if (soap_append_lab(soap, NULL, 2)) + return NULL; + s = soap->labbuf + soap->labidx; + k = soap->lablen - soap->labidx; + soap->labidx = 3 * (soap->lablen / 3); + if (k > 2) + { + for (i = 0; i < k - 2; i += 3) + { + unsigned long m = 0; + int j = 0; + do + { + soap_wchar c = soap_get(soap); + if (c < SOAP_AP) + c &= 0x7FFFFFFF; + if (c == '=' || c < 0) + { + unsigned char *p = NULL; + switch (j) + { + case 2: + *s++ = (char)((m >> 4) & 0xFF); + i++; + break; + case 3: + *s++ = (char)((m >> 10) & 0xFF); + *s++ = (char)((m >> 2) & 0xFF); + i += 2; + } + l = soap->lablen + i - k; + if (n) + *n = (int)l; + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + soap->error = SOAP_LENGTH; + else + { + p = (unsigned char*)soap_malloc(soap, l); + if (p) + (void)soap_memcpy((void*)p, l, (const void*)soap->labbuf, l); + } + if (c >= 0) + { + while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT) + continue; + } + soap_unget(soap, c); + return p; + } + c -= '+'; + if (c >= 0 && c <= 79) + { + int b = soap_base64i[c]; + if (b >= 64) + { + soap->error = SOAP_TYPE; + return NULL; + } + m = (m << 6) + b; + j++; + } + else if (!soap_coblank(c + '+')) + { + soap->error = SOAP_TYPE; + return NULL; + } + } while (j < 4); + *s++ = (char)((m >> 16) & 0xFF); + *s++ = (char)((m >> 8) & 0xFF); + *s++ = (char)(m & 0xFF); + } + l = soap->lablen; + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + { + soap->error = SOAP_LENGTH; + return NULL; + } + } + } +#else + if (soap_alloc_block(soap) == NULL) + return NULL; + for (;;) + { + int i; + char *s = (char*)soap_push_block(soap, NULL, 3 * SOAP_BLKLEN); /* must be multiple of 3 */ + if (!s) + { + soap_end_block(soap, NULL); + return NULL; + } + for (i = 0; i < SOAP_BLKLEN; i++) + { + unsigned long m = 0; + int j = 0; + do + { + soap_wchar c = soap_get(soap); + if (c < SOAP_AP) + c &= 0x7FFFFFFF; + if (c == '=' || c < 0) + { + unsigned char *p; + i *= 3; + switch (j) + { + case 2: + *s++ = (char)((m >> 4) & 0xFF); + i++; + l++; + break; + case 3: + *s++ = (char)((m >> 10) & 0xFF); + *s++ = (char)((m >> 2) & 0xFF); + l += 2; + i += 2; + } + if (n) + *n = (int)soap_size_block(soap, NULL, i); + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + { + soap->error = SOAP_LENGTH; + soap_end_block(soap, NULL); + return NULL; + } + p = (unsigned char*)soap_save_block(soap, NULL, NULL, 0); + if (c >= 0) + { + while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT) + continue; + } + soap_unget(soap, c); + return p; + } + c -= '+'; + if (c >= 0 && c <= 79) + { + int b = soap_base64i[c]; + if (b >= 64) + { + soap->error = SOAP_TYPE; + return NULL; + } + m = (m << 6) + b; + j++; + } + else if (!soap_coblank(c + '+')) + { + soap->error = SOAP_TYPE; + return NULL; + } + } while (j < 4); + *s++ = (char)((m >> 16) & 0xFF); + *s++ = (char)((m >> 8) & 0xFF); + *s++ = (char)(m & 0xFF); + l += 3; + } + if (soap->maxlength > 0 && l > (size_t)soap->maxlength) + { + soap->error = SOAP_LENGTH; + soap_end_block(soap, NULL); + return NULL; + } + } +#endif +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_xop_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options) +{ + /* Check MTOM xop:Include element (within hex/base64Binary) */ + /* TODO: this code to be obsoleted with new import/xop.h conventions */ + short body = soap->body; /* should save type too? */ + if (!soap_peek_element(soap)) + { + if (!soap_element_begin_in(soap, ":Include", 0, NULL)) + { + if (soap_attachment_forward(soap, ptr, size, id, type, options) + || (soap->body && soap_element_end_in(soap, ":Include"))) + return soap->error; + } + else if (soap->error == SOAP_TAG_MISMATCH) + soap_retry(soap); + else + return soap->error; + } + soap->body = body; + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_attachment_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options) +{ + struct soap_xlist *xp; + *ptr = NULL; + *size = 0; + *id = NULL; + *type = NULL; + *options = NULL; + if (!*soap->href) + return SOAP_OK; + *id = soap_strdup(soap, soap->href); + xp = (struct soap_xlist*)SOAP_MALLOC(soap, sizeof(struct soap_xlist)); + if (!xp) + return soap->error = SOAP_EOM; + xp->next = soap->xlist; + xp->ptr = ptr; + xp->size = size; + xp->id = *id; + xp->type = type; + xp->options = options; + soap->xlist = xp; + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +void * +SOAP_FMAC2 +soap_memdup(struct soap *soap, const void *s, size_t n) +{ + void *t = NULL; + if (s) + { + t = soap_malloc(soap, n); + if (t) + (void)soap_memcpy(t, n, s, n); + } + return t; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_strdup(struct soap *soap, const char *s) +{ + char *t = NULL; + if (s) + { + size_t n = strlen(s) + 1; + if (n > 0) + { + t = (char*)soap_malloc(soap, n); + if (t) + { + (void)soap_memcpy((void*)t, n, (const void*)s, n); + t[n - 1] = '\0'; + } + } + } + return t; +} + +/******************************************************************************/ + +SOAP_FMAC1 +wchar_t * +SOAP_FMAC2 +soap_wstrdup(struct soap *soap, const wchar_t *s) +{ + wchar_t *t = NULL; + if (s) + { + size_t n = 0, m; + while (s[n]) + n++; + n++; + m = sizeof(wchar_t) * n; + if (n > 0) + { + t = (wchar_t*)soap_malloc(soap, m); + if (t) + { + (void)soap_memcpy((void*)t, m, (const void*)s, m); + t[n - 1] = L'\0'; + } + } + } + return t; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_strtrim(struct soap *soap, char *s) +{ + (void)soap; + if (s) + { + char *t; + while ((*s >= 9 && *s <= 13) || *s == 32) + s++; + t = s; + while (*t) + t++; + while (--t > s && ((*t >= 9 && *t <= 13) || *t == 32)) + continue; + t[1] = '\0'; + } + return s; +} + +/******************************************************************************/ + +SOAP_FMAC1 +wchar_t * +SOAP_FMAC2 +soap_wstrtrim(struct soap *soap, wchar_t *s) +{ + (void)soap; + if (s) + { + wchar_t *t; + while ((*s >= 9 && *s <= 13) || *s == 32) + s++; + t = s; + while (*t) + t++; + while (--t > s && ((*t >= 9 && *t <= 13) || *t == 32)) + continue; + t[1] = L'\0'; + } + return s; +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap_blist* +SOAP_FMAC2 +soap_alloc_block(struct soap *soap) +{ + struct soap_blist *p; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New block sequence (prev=%p)\n", (void*)soap->blist)); + p = (struct soap_blist*)SOAP_MALLOC(soap, sizeof(struct soap_blist)); + if (!p) + { + soap->error = SOAP_EOM; + return NULL; + } + p->next = soap->blist; + p->head = NULL; + p->size = 0; + p->item = 0; + soap->blist = p; + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_push_block(struct soap *soap, struct soap_blist *b, size_t n) +{ + struct soap_bhead *p; + if (!b) + b = soap->blist; + if (!b + || b->size + n < b->size + || sizeof(struct soap_bhead) + n < n + || (SOAP_MAXALLOCSIZE > 0 && sizeof(struct soap_bhead) + n > SOAP_MAXALLOCSIZE)) + { + soap->error = SOAP_EOM; + return NULL; + } + p = (struct soap_bhead*)SOAP_MALLOC(soap, sizeof(struct soap_bhead) + n); + if (!p) + { + soap->error = SOAP_EOM; + return NULL; + } + p->next = b->head; + b->head = p; + p->size = n; + b->size += n; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push block %p of %u bytes on %lu previous blocks (%lu bytes total)\n", (void*)p, (unsigned int)n, (unsigned long)b->item, (unsigned long)b->size)); + b->item++; + return (void*)(p + 1); /* skip block header and point to n allocated bytes */ +} + +/******************************************************************************/ + +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_push_block_max(struct soap *soap, struct soap_blist *b, size_t n) +{ + if (b && b->item >= soap->maxoccurs) /* restrict block array length */ + { + soap->error = SOAP_OCCURS; + return NULL; + } + return soap_push_block(soap, b, n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_pop_block(struct soap *soap, struct soap_blist *b) +{ + struct soap_bhead *p; + if (!b) + b = soap->blist; + if (!b || !b->head) + return; + p = b->head; + b->size -= p->size; + b->head = p->next; + b->item--; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop block %p (%lu items of %lu bytes total)\n", (void*)p, (unsigned long)b->item, (unsigned long)b->size)); + SOAP_FREE(soap, p); +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_update_pointers(struct soap *soap, const char *dst, const char *src, size_t len) +{ + const void *start = src, *end = src + len; +#ifndef WITH_LEANER + struct soap_xlist *xp; +#endif +#ifndef WITH_NOIDREF + if ((soap->version && !(soap->imode & SOAP_XML_TREE)) || (soap->mode & SOAP_XML_GRAPH)) + { + int i; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update pointers %p (%lu bytes) -> %p\n", (void*)src, (unsigned long)len, (void*)dst)); + for (i = 0; i < SOAP_IDHASH; i++) + { + struct soap_ilist *ip; + for (ip = soap->iht[i]; ip; ip = ip->next) + { + struct soap_flist *fp; + void *p, **q; + if (ip->shaky) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update shaky id='%s'\n", ip->id)); + if (ip->ptr && ip->ptr >= start && ip->ptr < end) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update ptr %p -> %p\n", ip->ptr, (void*)((const char*)ip->ptr + (dst-src)))); + ip->ptr = (void*)((const char*)ip->ptr + (dst-src)); + } + for (q = &ip->link; q; q = (void**)p) + { + p = *q; + if (p && p >= start && p < end) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Link update id='%s' %p -> %p\n", ip->id, p, (void*)((const char*)p + (dst-src)))); + *q = (void*)((const char*)p + (dst-src)); + } + } + for (q = &ip->copy; q; q = (void**)p) + { + p = *q; + if (p && p >= start && p < end) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy chain update id='%s' %p -> %p\n", ip->id, p, (void*)((const char*)p + (dst-src)))); + *q = (void*)((const char*)p + (dst-src)); + } + } + for (fp = ip->flist; fp; fp = fp->next) + { + if (fp->ptr >= start && fp->ptr < end) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy list update id='%s' target type=%d %p -> %p\n", ip->id, fp->type, fp->ptr, (void*)((char*)fp->ptr + (dst-src)))); + fp->ptr = (void*)((const char*)fp->ptr + (dst-src)); + } + } + if (ip->smart && ip->smart >= start && ip->smart < end) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Smart shared pointer update %p -> %p\n", ip->smart, (void*)((const char*)ip->smart + (dst-src)))); + ip->smart = (void*)((const char*)ip->smart + (dst-src)); + } + } + } + } + } +#else + (void)soap; (void)start; (void)end; (void)dst; (void)src; +#endif +#ifndef WITH_LEANER + for (xp = soap->xlist; xp; xp = xp->next) + { + if (xp->ptr && (void*)xp->ptr >= start && (void*)xp->ptr < end) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update attachment id='%s' %p -> %p\n", xp->id ? xp->id : SOAP_STR_EOS, (void*)xp->ptr, (void*)((char*)xp->ptr + (dst-src)))); + xp->ptr = (unsigned char**)((char*)xp->ptr + (dst-src)); + xp->size = (int*)((char*)xp->size + (dst-src)); + xp->type = (char**)((char*)xp->type + (dst-src)); + xp->options = (char**)((char*)xp->options + (dst-src)); + } + } +#endif +} + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +static int +soap_has_copies(struct soap *soap, const char *start, const char *end) +{ + int i; + struct soap_ilist *ip = NULL; + struct soap_flist *fp = NULL; + const char *p; + for (i = 0; i < SOAP_IDHASH; i++) + { + for (ip = soap->iht[i]; ip; ip = ip->next) + { + for (p = (const char*)ip->copy; p; p = *(const char**)p) + if (p >= start && p < end) + return SOAP_ERR; + for (fp = ip->flist; fp; fp = fp->next) + if (fp->type == ip->type && (const char*)fp->ptr >= start && (const char*)fp->ptr < end) + return SOAP_ERR; + } + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_resolve(struct soap *soap) +{ + int i; + short flag; + const char *id; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded refs\n")); + for (i = 0; i < SOAP_IDHASH; i++) + { + struct soap_ilist *ip; + for (ip = soap->iht[i]; ip; ip = ip->next) + { + if (ip->ptr) + { + void **q; + struct soap_flist *fp, **fpp = &ip->flist; + if (ip->spine) + ip->spine[0] = ip->ptr; + q = (void**)ip->link; + ip->link = NULL; + DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s' type=%d\n", ip->id, ip->type)); + while (q) + { + void *p = *q; + *q = ip->ptr; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... link %p -> %p\n", (void*)q, ip->ptr)); + q = (void**)p; + } + while ((fp = *fpp)) + { + if (fp->level > 0 && fp->finsert) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... insert type=%d link %p -> %p\n", fp->type, fp->ptr, ip->ptr)); + if (ip->spine && fp->level <= SOAP_MAXPTRS) + fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, &ip->spine[fp->level - 1], &ip->smart); + else if (fp->level == 1) + fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, &ip->ptr, &ip->smart); + else if (fp->level <= SOAP_MAXPTRS) + { + int i; + ip->spine = (void**)soap_malloc(soap, SOAP_MAXPTRS * sizeof(void*)); + if (!ip->spine) + return soap->error = SOAP_EOM; + ip->spine[0] = ip->ptr; + for (i = 1; i < SOAP_MAXPTRS; i++) + ip->spine[i] = &ip->spine[i - 1]; + fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, &ip->spine[fp->level - 1], &ip->smart); + } + *fpp = fp->next; + SOAP_FREE(soap, fp); + } + else + fpp = &fp->next; + } + } + else if (*ip->id == '#') + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Missing id='%s'\n", ip->id)); + soap_strcpy(soap->id, sizeof(soap->id), ip->id + 1); + return soap->error = SOAP_MISSING_ID; + } + } + } + do + { + flag = 0; + id = NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution phase\n")); + for (i = 0; i < SOAP_IDHASH; i++) + { + struct soap_ilist *ip; + for (ip = soap->iht[i]; ip; ip = ip->next) + { + if (ip->copy || ip->flist) + { + if (ip->ptr && !soap_has_copies(soap, (const char*)ip->ptr, (const char*)ip->ptr + ip->size)) + { + struct soap_flist *fp; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving id='%s' type=%d ptr=%p size=%lu ...\n", ip->id, ip->type, ip->ptr, (unsigned long)ip->size)); + if (ip->copy) + { + void *p, **q = (void**)ip->copy; + DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing copy chain to resolve id='%s'\n", ip->id)); + ip->copy = NULL; + do + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%u bytes)\n", ip->ptr, (void*)q, (unsigned int)ip->size)); + p = *q; + (void)soap_memcpy((void*)q, ip->size, (const void*)ip->ptr, ip->size); + q = (void**)p; + } while (q); + flag = 1; + } + while ((fp = ip->flist)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data type=%d target type=%d location=%p level=%u id='%s'\n", ip->type, fp->type, ip->ptr, fp->level, ip->id)); + if (fp->level == 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%lu bytes)\n", ip->ptr, fp->ptr, (unsigned long)ip->size)); + if (fp->finsert) + fp->finsert(soap, ip->type, fp->type, fp->ptr, fp->index, ip->ptr, &ip->smart); + else + (void)soap_memcpy((void*)fp->ptr, ip->size, (const void*)ip->ptr, ip->size); + } + ip->flist = fp->next; + SOAP_FREE(soap, fp); + flag = 1; + } + } + else if (*ip->id == '#') + id = ip->id; + } + } + } + } while (flag); + if (id) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution error: forwarded data for id='%s' could not be propagated, please report this problem to the gSOAP developers\n", id)); + return soap_id_nullify(soap, id); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution done\n")); + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +size_t +SOAP_FMAC2 +soap_size_block(struct soap *soap, struct soap_blist *b, size_t n) +{ + if (!b) + b = soap->blist; + if (b->head) + { + b->size -= b->head->size - n; + b->head->size = n; + } + return b->size; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char* +SOAP_FMAC2 +soap_first_block(struct soap *soap, struct soap_blist *b) +{ + struct soap_bhead *p, *q, *r; + if (!b) + b = soap->blist; + p = b->head; + if (!p) + return NULL; + r = NULL; + do + { + q = p->next; + p->next = r; + r = p; + p = q; + } while (p); + b->head = r; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "First block %p\n", (void*)(r + 1))); + return (char*)(r + 1); +} + +/******************************************************************************/ + +SOAP_FMAC1 +char* +SOAP_FMAC2 +soap_next_block(struct soap *soap, struct soap_blist *b) +{ + struct soap_bhead *p; + if (!b) + b = soap->blist; + p = b->head; + if (p) + { + b->head = p->next; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Next block %p, deleting current block\n", (void*)(b->head ? b->head + 1 : NULL))); + SOAP_FREE(soap, p); + if (b->head) + return (char*)(b->head + 1); + } + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +size_t +SOAP_FMAC2 +soap_block_size(struct soap *soap, struct soap_blist *b) +{ + if (!b) + b = soap->blist; + return b->head->size; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_end_block(struct soap *soap, struct soap_blist *b) +{ + struct soap_bhead *p, *q; + if (!b) + b = soap->blist; + if (b) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of block sequence, free all remaining blocks\n")); + for (p = b->head; p; p = q) + { + q = p->next; + SOAP_FREE(soap, p); + } + if (soap->blist == b) + soap->blist = b->next; + else + { + struct soap_blist *bp; + for (bp = soap->blist; bp; bp = bp->next) + { + if (bp->next == b) + { + bp->next = b->next; + break; + } + } + } + SOAP_FREE(soap, b); + } + DBGLOG(TEST, if (soap->blist) SOAP_MESSAGE(fdebug, "Restored previous block sequence\n")); +#ifndef WITH_NOIDREF + if (!soap->blist && ((soap->version && !(soap->imode & SOAP_XML_TREE)) || (soap->mode & SOAP_XML_GRAPH))) + { + int i; + struct soap_ilist *ip = NULL; + for (i = 0; i < SOAP_IDHASH; i++) + for (ip = soap->iht[i]; ip; ip = ip->next) + ip->shaky = 0; + } +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_save_block(struct soap *soap, struct soap_blist *b, char *p, int flag) +{ + size_t n; + char *q, *s; + if (!b) + b = soap->blist; + if (b->size) + { + if (!p) + p = (char*)soap_malloc(soap, b->size); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Save all %lu blocks in contiguous memory space of %u bytes (%p->%p)\n", (unsigned long)b->item, (unsigned int)b->size, (void*)b->head, (void*)p)); + if (p) + { + s = p; + for (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, (void*)q, (void*)s)); + if (flag) + soap_update_pointers(soap, s, q, n); + (void)soap_memcpy((void*)s, n, (const void*)q, n); + s += n; + } + } + else + soap->error = SOAP_EOM; + } + soap_end_block(soap, b); + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_putsizesoffsets(struct soap *soap, const char *type, const int *size, const int *offset, int dim) +{ + int i; + const char *t = ",%d"; + if (!type) + return NULL; + if (soap->version == 2) + t = " %d"; + if (soap->version != 2 && offset) + { + (SOAP_SNPRINTF(soap->type, sizeof(soap->type) - 1, strlen(type) + 20), "%s[%d", type, size[0] + offset[0]); + for (i = 1; i < dim; i++) + { + size_t l = strlen(soap->type); + (SOAP_SNPRINTF(soap->type + l, sizeof(soap->type) - l - 1, 20), t, size[i] + offset[i]); + } + } + else + { + (SOAP_SNPRINTF(soap->type, sizeof(soap->type) - 1, strlen(type) + 20), "%s[%d", type, size[0]); + for (i = 1; i < dim; i++) + { + size_t l = strlen(soap->type); + (SOAP_SNPRINTF(soap->type + l, sizeof(soap->type) - l - 1, 20), t, size[i]); + } + } + soap_strcat(soap->type, sizeof(soap->type), "]"); + return soap->type; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_putoffsets(struct soap *soap, const int *offset, int dim) +{ + int i; + soap->arrayOffset[0] = '\0'; + if (soap->version == 1) + { + (SOAP_SNPRINTF(soap->arrayOffset, sizeof(soap->arrayOffset) - 1, 20), "[%d", offset[0]); + for (i = 1; i < dim; i++) + { + size_t l = strlen(soap->arrayOffset); + (SOAP_SNPRINTF(soap->arrayOffset + l, sizeof(soap->arrayOffset) - l - 1, 20), ",%d", offset[i]); + } + soap_strcat(soap->arrayOffset, sizeof(soap->arrayOffset), "]"); + } + return soap->arrayOffset; +} + +/******************************************************************************/ + +SOAP_FMAC1 +size_t +SOAP_FMAC2 +soap_size(const int *size, int dim) +{ + int i; + size_t n = 0; + if (size[0] <= 0) + return 0; + n = (size_t)size[0]; + for (i = 1; i < dim; i++) + { + if (size[i] <= 0) + return 0; + n *= (size_t)size[i]; + } + return (size_t)n; +} + +/******************************************************************************/ + +SOAP_FMAC1 +size_t +SOAP_FMAC2 +soap_getsizes(const char *attr, int *size, int dim) +{ + size_t i, k, n; + if (!attr || !*attr || dim < 1) /* actually attr != NULL and dim is guaranteed >= 1 by soapcpp2-generated code */ + return 0; + i = strlen(attr); + n = 1; + do + { + for (; i > 0; i--) + if (attr[i - 1] == '[' || attr[i - 1] == ',' || attr[i - 1] == ' ') + break; + n *= k = (size_t)soap_strtoul(attr + i, NULL, 10); + size[--dim] = (int)k; + if (n > SOAP_MAXARRAYSIZE) + return 0; + } while (dim > 0 && i-- > 1 && attr[i] != '['); + return n; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getoffsets(const char *attr, const int *size, int *offset, int dim) +{ + int i, j = 0; + if (offset) + { + for (i = 0; i < dim && attr && *attr; i++) + { + attr++; + j *= size[i]; + j += offset[i] = (int)soap_strtol(attr, NULL, 10); + attr = strchr(attr, ','); + } + } + else + { + for (i = 0; i < dim && attr && *attr; i++) + { + attr++; + j *= size[i]; + j += (int)soap_strtol(attr, NULL, 10); + attr = strchr(attr, ','); + } + } + return j; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getposition(const char *attr, int *pos) +{ + int i, n; + if (!*attr) + return -1; + n = 0; + i = 1; + do + { + pos[n++] = (int)soap_strtol(attr + i, NULL, 10); + while (attr[i] && attr[i] != ',' && attr[i] != ']') + i++; + if (attr[i] == ',') + i++; + } while (n < SOAP_MAXDIMS && attr[i] && attr[i] != ']'); + return n; +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap_nlist * +SOAP_FMAC2 +soap_push_namespace(struct soap *soap, const char *id, const char *ns) +{ + struct soap_nlist *np = NULL; + struct Namespace *p; + short i = -1; + size_t n, k; + n = strlen(id); + k = strlen(ns) + 1; + p = soap->local_namespaces; + if (p) + { + for (i = 0; p->id; p++, i++) + { + if (p->ns && !strcmp(ns, p->ns)) + break; + if (p->out) + { + if (!strcmp(ns, p->out)) + break; + } + else if (p->in) + { + if (!soap_tag_cmp(ns, p->in)) + { + if (SOAP_MAXALLOCSIZE <= 0 || k <= SOAP_MAXALLOCSIZE) + p->out = (char*)SOAP_MALLOC(soap, k); + if (p->out) + soap_strcpy(p->out, k, ns); + break; + } + } + } + if (!p->id) + i = -1; + } + if (i >= 0) + k = 0; + if (sizeof(struct soap_nlist) + n + k > n && (SOAP_MAXALLOCSIZE <= 0 || sizeof(struct soap_nlist) + n + k <= SOAP_MAXALLOCSIZE)) + np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k); + if (!np) + { + soap->error = SOAP_EOM; + return NULL; + } + np->next = soap->nlist; + soap->nlist = np; + np->level = soap->level; + np->index = i; + soap_strcpy((char*)np->id, n + 1, id); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u,index=%hd) '%s'='%s'\n", soap->level, i, id, ns)); + if (i < 0) + { + np->ns = np->id + n + 1; + soap_strcpy((char*)np->ns, k, ns); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push NOT OK: no match found for '%s' in namespace mapping table (added to stack anyway)\n", ns)); + } + else + { + np->ns = NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push OK ('%s' matches '%s' in namespace table)\n", id, p->id)); + } + return np; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_pop_namespace(struct soap *soap) +{ + struct soap_nlist *np, *nq; + for (np = soap->nlist; np && np->level >= soap->level; np = nq) + { + nq = np->next; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop namespace binding (level=%u) '%s' level=%u\n", soap->level, np->id, np->level)); + SOAP_FREE(soap, np); + } + soap->nlist = np; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_match_namespace(struct soap *soap, const char *id1, const char *id2, size_t n1, size_t n2) +{ + struct soap_nlist *np = soap->nlist; + const char *s; + while (np && (strncmp(np->id, id1, n1) || np->id[n1])) + np = np->next; + if (np) + { + if (!(soap->mode & SOAP_XML_IGNORENS) && (n2 > 0 || !np->ns || *np->ns)) + { + if (np->index < 0 + || ((s = soap->local_namespaces[np->index].id) && (strncmp(s, id2, n2) || (s[n2] && s[n2] != '_')))) + return SOAP_NAMESPACE; + } + return SOAP_OK; + } + if (n1 == 0) + return n2 == 0 || (soap->mode & SOAP_XML_IGNORENS) ? SOAP_OK : SOAP_NAMESPACE; + if ((n1 == 3 && n1 == n2 && !strncmp(id1, "xml", 3) && !strncmp(id1, id2, 3)) + || (soap->mode & SOAP_XML_IGNORENS)) + return SOAP_OK; + return soap->error = SOAP_SYNTAX_ERROR; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_current_namespace_tag(struct soap *soap, const char *tag) +{ + struct soap_nlist *np; + const char *s; + if (!tag || !strncmp(tag, "xml", 3)) + return NULL; + np = soap->nlist; + s = strchr(tag, ':'); + if (!s) + { + while (np && *np->id) /* find default namespace, if present */ + np = np->next; + } + else + { + while (np && (strncmp(np->id, tag, s - tag) || np->id[s - tag])) + np = np->next; + if (!np) + soap->error = SOAP_NAMESPACE; + } + if (np) + { + if (np->index >= 0) + return soap->namespaces[np->index].ns; + if (np->ns) + { + s = np->ns; + if (*s) + return soap_strdup(soap, s); + do + np = np->next; + while (np && *np->id); /* find if there is any other default namespace */ + if (np) + return soap_strdup(soap, s); + } + } + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_current_namespace_att(struct soap *soap, const char *tag) +{ + struct soap_nlist *np; + const char *s; + if (!tag || !strncmp(tag, "xml", 3)) + return NULL; + s = strchr(tag, ':'); + if (!s) + return NULL; + np = soap->nlist; + while (np && (strncmp(np->id, tag, s - tag) || np->id[s - tag])) + np = np->next; + if (!np) + soap->error = SOAP_NAMESPACE; + if (np) + { + if (np->index >= 0) + return soap->namespaces[np->index].ns; + if (np->ns && *np->ns) + return soap_strdup(soap, np->ns); + } + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_tag_cmp(const char *s, const char *t) +{ + const char *a = NULL; + const char *b = NULL; + for (;;) + { + int c1 = *s; + int c2 = *t; + if (!c1 || c1 == '"') + break; + if (c2 != '-') + { + if (c1 < c2) + { + if (c1 >= 'A' && c1 <= 'Z') + c1 += 'a' - 'A'; + } + else if (c1 > c2) + { + if (c2 >= 'A' && c2 <= 'Z') + c2 += 'a' - 'A'; + } + if (c2 == '*') + { + c2 = *++t; + if (!c2) + return 0; + a = s; + b = t; + continue; + } + if (c1 != c2) + { + if (!a) + return 1; + s = ++a; + t = b; + continue; + } + } + s++; + t++; + } + if (*t == '*' && !t[1]) + return 0; + return *t; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_match_tag(struct soap *soap, const char *tag1, const char *tag2) +{ + const char *s, *t; + int err; + if (!tag1 || !tag2 || !*tag2) + return SOAP_OK; + s = strchr(tag1, ':'); + t = strchr(tag2, ':'); + if (t) + { + if (s) + { + if (t[1] && SOAP_STRCMP(s + 1, t + 1)) + return SOAP_TAG_MISMATCH; + if (t != tag2 && !(soap->mode & SOAP_XML_IGNORENS)) + { + err = soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2); + if (err) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2)); + if (err == SOAP_NAMESPACE) + return SOAP_TAG_MISMATCH; + return err; + } + } + } + else if (!t[1]) + { + if ((soap->mode & SOAP_XML_IGNORENS) || soap_match_namespace(soap, tag1, tag2, 0, t - tag2)) + return SOAP_TAG_MISMATCH; + } + else if (SOAP_STRCMP(tag1, t + 1)) + { + return SOAP_TAG_MISMATCH; + } + else if (t != tag2) + { + err = soap_match_namespace(soap, tag1, tag2, 0, t - tag2); + if (err) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2)); + if (err == SOAP_NAMESPACE) + return SOAP_TAG_MISMATCH; + return err; + } + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags and (default) namespaces match: '%s' '%s'\n", tag1, tag2)); + return SOAP_OK; + } + if (s) + { + if (!(soap->mode & SOAP_XML_IGNORENS) || SOAP_STRCMP(s + 1, tag2)) /* always fails (except when ignoring ns) */ + return SOAP_TAG_MISMATCH; + } + else if (SOAP_STRCMP(tag1, tag2) +#ifndef WITH_NOEMPTYNAMESPACES + || ((soap->mode & SOAP_XML_STRICT) && !(soap->mode & SOAP_XML_IGNORENS) && soap_match_namespace(soap, tag1, tag2, 0, 0)) /* strict checking: default namespace must be null namespace */ +#endif + ) + { + return SOAP_TAG_MISMATCH; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags match: '%s' '%s'\n", tag1, tag2)); + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_match_att(struct soap *soap, const char *tag1, const char *tag2) +{ + const char *s, *t; + int err; + if (!tag1 || !tag2 || !*tag2) + return SOAP_OK; + s = strchr(tag1, ':'); + t = strchr(tag2, ':'); + if (t) + { + if (s) + { + if (t[1] && SOAP_STRCMP(s + 1, t + 1)) + return SOAP_TAG_MISMATCH; + if (t != tag2 && !(soap->mode & SOAP_XML_IGNORENS)) + { + err = soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2); + if (err) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Atts '%s' and '%s' match but namespaces differ\n", tag1, tag2)); + if (err == SOAP_NAMESPACE) + return SOAP_TAG_MISMATCH; + return err; + } + } + } + else if (!t[1] || t != tag2 || SOAP_STRCMP(tag1, t + 1)) + return SOAP_TAG_MISMATCH; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Atts and (default) namespaces match: '%s' '%s'\n", tag1, tag2)); + return SOAP_OK; + } + if (s) + { + if (!(soap->mode & SOAP_XML_IGNORENS) || SOAP_STRCMP(s + 1, tag2)) /* always fails (except when ignoring ns) */ + return SOAP_TAG_MISMATCH; + } + else if (SOAP_STRCMP(tag1, tag2)) + return SOAP_TAG_MISMATCH; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Atts match: '%s' '%s'\n", tag1, tag2)); + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_match_array(struct soap *soap, const char *type) +{ + if (type && *soap->arrayType) + { + if (soap->version == 1 || !strchr(type, '[')) + { + if (soap_match_tag(soap, soap->arrayType, type) + && soap_match_tag(soap, soap->arrayType, "xsd:anyType") + && soap_match_tag(soap, soap->arrayType, "xsd:ur-type")) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SOAP array type mismatch: '%s' '%s'\n", soap->arrayType, type)); + return SOAP_TAG_MISMATCH; + } + } + } + return SOAP_OK; +} + +/******************************************************************************\ + * + * SSL/TLS + * +\******************************************************************************/ + +#ifdef WITH_OPENSSL +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_rand() +{ + int r; + if (!soap_ssl_init_done) + soap_ssl_init(); +#if OPENSSL_VERSION_NUMBER < 0x10100000L + RAND_pseudo_bytes((unsigned char*)&r, sizeof(int)); +#else + RAND_bytes((unsigned char*)&r, sizeof(int)); +#endif + return r; +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +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; /* vxWorks compatible */ +#endif + soap->password = password; + soap->cafile = cafile; + soap->capath = capath; +#ifdef WITH_OPENSSL + soap->dhfile = dhfile; + soap->randfile = randfile; + if (!soap->fsslverify) + soap->fsslverify = ssl_verify_callback; +#endif + soap->ssl_flags = flags | (dhfile == NULL ? SOAP_SSL_RSA : 0); +#ifdef WITH_GNUTLS + (void)randfile; (void)sid; + if (dhfile) + { + char *s = NULL; + int n = (int)soap_strtoul(dhfile, &s, 10); + if (!soap->dh_params) + gnutls_dh_params_init(&soap->dh_params); + /* 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') + gnutls_dh_params_generate2(soap->dh_params, (unsigned int)n); + else + { + unsigned int dparams_len; + unsigned char dparams_buf[1024]; + FILE *fd = fopen(dhfile, "r"); + if (!fd) + return soap_set_receiver_error(soap, "SSL/TLS error", "Invalid DH file", SOAP_SSL_ERROR); + dparams_len = (unsigned int)fread(dparams_buf, 1, sizeof(dparams_buf), fd); + fclose(fd); + gnutls_datum_t dparams = { + dparams_buf, dparams_len }; + if (gnutls_dh_params_import_pkcs3(soap->dh_params, &dparams, GNUTLS_X509_FMT_PEM)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Invalid DH file", SOAP_SSL_ERROR); + } + } + else + { +#if GNUTLS_VERSION_NUMBER < 0x030300 + if (!soap->rsa_params) + gnutls_rsa_params_init(&soap->rsa_params); + gnutls_rsa_params_generate2(soap->rsa_params, SOAP_SSL_RSA_BITS); +#endif + } + if (soap->session) + { + gnutls_deinit(soap->session); + soap->session = NULL; + } + if (soap->xcred) + { + gnutls_certificate_free_credentials(soap->xcred); + soap->xcred = NULL; + } +#endif +#ifdef WITH_WOLFSSL + (void)randfile; (void)sid; + if (!soap->fsslverify) + soap->fsslverify = ssl_verify_callback; + if (soap->ctx) + wolfSSL_CTX_free(soap->ctx); + soap->ctx = NULL; +#endif +#ifdef WITH_SYSTEMSSL + (void)randfile; (void)sid; + if (soap->ctx) + gsk_environment_close(&soap->ctx); + soap->ctx = NULL; +#endif + err = soap->fsslauth(soap); +#ifdef WITH_OPENSSL + if (!err) + { + if (sid) + SSL_CTX_set_session_id_context(soap->ctx, (unsigned char*)sid, (unsigned int)strlen(sid)); + else + SSL_CTX_set_session_cache_mode(soap->ctx, SSL_SESS_CACHE_OFF); + } +#endif + return err; +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +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; /* vxWorks compatible */ +#endif + soap->password = password; + soap->cafile = cafile; + soap->capath = capath; + soap->ssl_flags = SOAP_SSL_CLIENT | flags; +#ifdef WITH_OPENSSL + soap->dhfile = NULL; + soap->randfile = randfile; + if (!soap->fsslverify) + soap->fsslverify = (flags & SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE) == 0 ? ssl_verify_callback : ssl_verify_callback_allow_expired_certificate; +#endif +#ifdef WITH_GNUTLS + (void)randfile; + if (soap->session) + { + gnutls_deinit(soap->session); + soap->session = NULL; + } + if (soap->xcred) + { + gnutls_certificate_free_credentials(soap->xcred); + soap->xcred = NULL; + } +#endif +#ifdef WITH_WOLFSSL + (void)randfile; + if (!soap->fsslverify) + soap->fsslverify = (flags & SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE) == 0 ? ssl_verify_callback : ssl_verify_callback_allow_expired_certificate; + if (soap->ctx) + wolfSSL_CTX_free(soap->ctx); + soap->ctx = NULL; +#endif +#ifdef WITH_SYSTEMSSL + (void)randfile; + if (soap->ctx) + gsk_environment_close(&soap->ctx); + soap->ctx = NULL; +#endif + return soap->fsslauth(soap); +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_ssl_crl(struct soap *soap, const char *crlfile) +{ +#ifdef WITH_OPENSSL + if (crlfile && soap->ctx) + { +#if OPENSSL_VERSION_NUMBER > 0x00907000L + X509_STORE *store = SSL_CTX_get_cert_store(soap->ctx); + if (*crlfile) + { + int ret; + X509_LOOKUP *lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); + if (!lookup) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't create X509_LOOKUP object", SOAP_SSL_ERROR); + ret = X509_load_crl_file(lookup, crlfile, X509_FILETYPE_PEM); + if (ret <= 0) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read CRL PEM file", SOAP_SSL_ERROR); + } + X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL); +#endif + } + else + { + soap->crlfile = crlfile; /* activate later when store is available */ + } +#endif +#ifdef WITH_GNUTLS + if (crlfile && soap->xcred) + { + if (*crlfile) + { + if (gnutls_certificate_set_x509_crl_file(soap->xcred, crlfile, GNUTLS_X509_FMT_PEM) < 0) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read CRL PEM file", SOAP_SSL_ERROR); + } + } + else + { + soap->crlfile = crlfile; /* activate later when xcred is available */ + } +#endif +#ifdef WITH_WOLFSSL + if (crlfile && soap->ctx) + { + if (*crlfile) + { +#if defined(HAVE_CRL) && !defined(NO_FILESYSTEM) + if (wolfSSL_X509_load_crl_file(soap->ctx, crlfile) != SSL_SUCCESS) +#endif + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read CRL PEM file", SOAP_SSL_ERROR); + } + } + else + { + soap->crlfile = crlfile; /* activate later when store is available */ + } +#endif + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_ssl_init() +{ + /* Note: for multi-threaded applications, the main program should call soap_ssl_init() before any threads are started */ + if (!soap_ssl_init_done) + { + soap_ssl_init_done = 1; +#ifdef WITH_OPENSSL +#if OPENSSL_VERSION_NUMBER < 0x10100000L + SSL_library_init(); + OpenSSL_add_all_algorithms(); /* we keep ciphers and digests for the program's lifetime */ +#ifndef WITH_LEAN + SSL_load_error_strings(); +#endif +#endif +#if !defined(WIN32) && !defined(CYGWIN) && !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(VXWORKS) + if (!RAND_load_file("/dev/urandom", 1024)) +#else + if (1) +#endif + { + /* if /dev/urandom does not exist we need to do at least some pertubations to seed the OpenSSL PRNG */ + char buf[1024]; + RAND_seed(buf, sizeof(buf)); +#ifdef HAVE_RANDOM + srandom((unsigned long)time(NULL)); +#else + srand((unsigned int)time(NULL)); +#endif + do + { +#ifdef HAVE_RANDOM + long r = random(); /* we actually do no use random() anywhere, except to further seed the OpenSSL PRNG */ + RAND_seed(&r, sizeof(long)); +#else + int r = rand(); /* we actually do no use rand() anywhere, except when random() is not available and to further seed the OpenSSL PRNG */ + RAND_seed(&r, sizeof(int)); +#endif + } while (!RAND_status()); + } +#endif +#ifdef WITH_GNUTLS +# if GNUTLS_VERSION_NUMBER < 0x020b00 +# if defined(HAVE_PTHREAD_H) + gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); +# elif defined(HAVE_PTH_H) + gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pth); +# endif + gcry_control(GCRYCTL_ENABLE_QUICK_RANDOM, 0); + gcry_control(GCRYCTL_DISABLE_SECMEM, 0); + gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); /* libgcrypt init done */ +# endif +# if GNUTLS_VERSION_NUMBER < 0x030300 + gnutls_global_init(); +# endif +#endif +#ifdef WITH_WOLFSSL + wolfSSL_Init(); +#endif + } +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_ssl_noinit() +{ + /* Call this first to bypass SSL init is SSL is already initialized elsewhere */ + soap_ssl_init_done = 1; +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_ssl_error(struct soap *soap, int ret, int err) +{ +#ifdef WITH_OPENSSL + const char *msg = soap_code_str(h_ssl_error_codes, err); + if (!msg) + return ERR_error_string(err, soap->msgbuf); + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(msg) + 1), "%s\n", msg); + if (ERR_peek_error()) + { + unsigned long r; + while ((r = ERR_get_error())) + { + size_t l = strlen(soap->msgbuf); + ERR_error_string_n(r, soap->msgbuf + l, sizeof(soap->msgbuf) - l); + l = strlen(soap->msgbuf); + if (l + 1 < sizeof(soap->msgbuf)) + { + soap->msgbuf[l++] = '\n'; + soap->msgbuf[l] = '\0'; + } + if (ERR_GET_REASON(r) == SSL_R_CERTIFICATE_VERIFY_FAILED && l < sizeof(soap->msgbuf)) + { + const char *s = X509_verify_cert_error_string(SSL_get_verify_result(soap->ssl)); + (SOAP_SNPRINTF(soap->msgbuf + l, sizeof(soap->msgbuf) - l, strlen(s)), "%s", s); + } + } + } + else + { + size_t l = strlen(soap->msgbuf); + switch (ret) + { + case 0: + soap_strcpy(soap->msgbuf + l, sizeof(soap->msgbuf) - l, "EOF was observed that violates the SSL/TLS protocol. The client probably provided invalid authentication information."); + break; + case -1: + { + const char *s = strerror(soap_errno); + (SOAP_SNPRINTF(soap->msgbuf + l, sizeof(soap->msgbuf) - l, strlen(s) + 42), "Error observed by underlying SSL/TLS BIO: %s", s); + } + break; + } + } + ERR_clear_error(); + return soap->msgbuf; +#endif +#ifdef WITH_GNUTLS + (void)soap; + (void)err; + return gnutls_strerror(ret); +#endif +#ifdef WITH_WOLFSSL + err = wolfSSL_get_error(soap->ssl, ret); + return wolfSSL_ERR_error_string(err, soap->msgbuf); /* msgbuf size is at least 80 bytes (>=1024) */ +#endif +} +#endif + +/******************************************************************************/ + +#ifdef WITH_SYSTEMSSL +static int +ssl_recv(int sk, void *s, int n, char *user) +{ + (void)user; + return recv(sk, s, n, 0); +} +#endif + +/******************************************************************************/ + +#ifdef WITH_SYSTEMSSL +static int +ssl_send(int sk, void *s, int n, char *user) +{ + (void)user; + return send(sk, s, n, 0); +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +static int +ssl_auth_init(struct soap *soap) +{ +#ifdef WITH_OPENSSL +#if OPENSSL_VERSION_NUMBER >= 0x10101000L + int minv = 0, maxv = 0; +#endif + long flags = SSL_OP_ALL; + int mode; +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) + EVP_PKEY* pkey; /* vxWorks compatible */ +#endif + if (!soap_ssl_init_done) + soap_ssl_init(); + ERR_clear_error(); + if (!soap->ctx) + { +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + /* TLS_method: a TLS/SSL connection established may understand the SSLv3, TLSv1, TLSv1.1, TLSv1.2 and TLSv1.3 protocols. */ + soap->ctx = SSL_CTX_new(TLS_method()); +#else + /* SSLv23_method: a TLS/SSL connection established may understand the SSLv3, TLSv1, TLSv1.1 and TLSv1.2 protocols. */ + soap->ctx = SSL_CTX_new(SSLv23_method()); +#endif + if (!soap->ctx) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't setup context", SOAP_SSL_ERROR); + /* The following alters the behavior of SSL read/write: */ +#if 0 + SSL_CTX_set_mode(soap->ctx, SSL_MODE_ENABLE_PARTIAL_WRITE | SSL_MODE_AUTO_RETRY); +#endif + } + if (soap->randfile) + { + if (!RAND_load_file(soap->randfile, -1)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't load randomness", SOAP_SSL_ERROR); + } + if (soap->cafile || soap->capath) + { + if (!SSL_CTX_load_verify_locations(soap->ctx, soap->cafile, soap->capath)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read CA PEM file", SOAP_SSL_ERROR); + if (soap->cafile && (soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION)) + SSL_CTX_set_client_CA_list(soap->ctx, SSL_load_client_CA_file(soap->cafile)); + } + if (!(soap->ssl_flags & SOAP_SSL_NO_DEFAULT_CA_PATH)) + { + if (!SSL_CTX_set_default_verify_paths(soap->ctx)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read default CA PEM file and/or directory", SOAP_SSL_ERROR); + } + if (soap->crlfile) + { + if (soap_ssl_crl(soap, soap->crlfile)) + return soap->error; + } +/* This code assumes a typical scenario with key and cert combined in one PEM file */ +#if 1 + if (soap->keyfile) + { + if (SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile) != 1) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't find or read certificate in private key PEM file", SOAP_SSL_ERROR); + if (soap->password) + { + SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password); + SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password); + } +#ifndef WM_SECURE_KEY_STORAGE + if (SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM) != 1) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read private key PEM file", SOAP_SSL_ERROR); +#endif + } +#else +/* Alternative approach to check the key file for cert only when cafile==NULL */ +#ifndef WM_SECURE_KEY_STORAGE + if (soap->password) + { + SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password); + SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password); + } +#endif + if (!soap->cafile) + { + if (soap->keyfile) + { + if (SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile) != 1) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't find or read certificate in private key PEM file", SOAP_SSL_ERROR); +#ifndef WM_SECURE_KEY_STORAGE + if (SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM) != 1) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read private key PEM file", SOAP_SSL_ERROR); +#endif + } + } + else /* use cafile for the root CA and (server) cert, and keyfile for (server) key */ + { + if (SSL_CTX_use_certificate_chain_file(soap->ctx, soap->cafile) != 1) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read CA PEM file", SOAP_SSL_ERROR); +#ifndef WM_SECURE_KEY_STORAGE + if (soap->keyfile) + if (SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM) != 1) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read private key PEM file", SOAP_SSL_ERROR); +#endif + } +#endif +#if defined(VXWORKS) && defined(WM_SECURE_KEY_STORAGE) + /* vxWorks compatible */ + pkey = ipcom_key_db_pkey_get(soap->keyid); + if (!pkey) + return soap_set_receiver_error(soap, "SSL error", "Can't find key", SOAP_SSL_ERROR); + if (!SSL_CTX_use_PrivateKey(soap->ctx, pkey)) + return soap_set_receiver_error(soap, "SSL error", "Can't read key", SOAP_SSL_ERROR); +#endif + if ((soap->ssl_flags & SOAP_SSL_RSA)) + { + /* OpenSSL v3 deprecated low-level RSA key generation: ignore SOAP_SSL_RSA flag */ +#if OPENSSL_VERSION_NUMBER < 0x30000000L +#if OPENSSL_VERSION_NUMBER >= 0x10002000L + if (SSL_CTX_need_tmp_RSA(soap->ctx)) + { + unsigned long e = RSA_F4; + BIGNUM *bne = BN_new(); + RSA *rsa = RSA_new(); + if (!bne || !rsa || !BN_set_word(bne, e) || !RSA_generate_key_ex(rsa, SOAP_SSL_RSA_BITS, bne, NULL) || !SSL_CTX_set_tmp_rsa(soap->ctx, rsa)) + { + if (bne) + BN_free(bne); + if (rsa) + RSA_free(rsa); + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't generate RSA key", SOAP_SSL_ERROR); + } + BN_free(bne); + RSA_free(rsa); + } +#else + RSA *rsa = RSA_generate_key(SOAP_SSL_RSA_BITS, RSA_F4, NULL, NULL); + if (!rsa || !SSL_CTX_set_tmp_rsa(soap->ctx, rsa)) + { + if (rsa) + RSA_free(rsa); + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't generate RSA key", SOAP_SSL_ERROR); + } + RSA_free(rsa); +#endif +#endif + } + else if (soap->dhfile) + { + char *s = (char*)soap->dhfile; + int n = (int)soap_strtoul(soap->dhfile, &s, 10); +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + /* if dhfile is numeric, set auto DH selection regardless of the value of n */ + if (n >= 1 && *s == '\0') + { + if (!SSL_CTX_set_dh_auto(soap->ctx, 1)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't generate DH parameters", SOAP_SSL_ERROR); + } + else + { + EVP_PKEY *dh; + BIO *bio = BIO_new_file(soap->dhfile, "r"); + if (!bio) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read DH PEM file", SOAP_SSL_ERROR); + dh = PEM_read_bio_Parameters(bio, NULL); + BIO_free(bio); + if (!dh || !SSL_CTX_set0_tmp_dh_pkey(soap->ctx, dh)) + { + if (dh) + EVP_PKEY_free(dh); + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't set DH parameters", SOAP_SSL_ERROR); + } + } +#else + DH *dh = NULL; + /* if dhfile is numeric, treat it as a key length to generate DH params which can take a while */ + if (n >= 512 && *s == '\0') + { +#if OPENSSL_VERSION_NUMBER >= 0x10002000L + dh = DH_new(); + if (!DH_generate_parameters_ex(dh, n, 2/*or 5*/, NULL)) + { + DH_free(dh); + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't generate DH parameters", SOAP_SSL_ERROR); + } +#elif defined(VXWORKS) + dh = DH_new(); + 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"); + if (!bio) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read DH PEM file", SOAP_SSL_ERROR); + dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL); + BIO_free(bio); + } + if (!dh || !DH_check(dh, &n) || !SSL_CTX_set_tmp_dh(soap->ctx, dh)) + { + if (dh) + DH_free(dh); + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't set DH parameters", SOAP_SSL_ERROR); + } + DH_free(dh); +#endif + } + /* enable all TSLv1 protocols and disable SSLv3 by default if no SSL/TLS flags are set */ + if ((soap->ssl_flags & SOAP_SSLv3_TLSv1) == 0) + soap->ssl_flags |= SOAP_TLSv1; +#if OPENSSL_VERSION_NUMBER >= 0x10101000L + if ((soap->ssl_flags & SOAP_SSLv3)) + minv = SSL3_VERSION; + else if ((soap->ssl_flags & SOAP_TLSv1_0)) + minv = TLS1_VERSION; + else if ((soap->ssl_flags & SOAP_TLSv1_1)) + minv = TLS1_1_VERSION; + else if ((soap->ssl_flags & SOAP_TLSv1_2)) + minv = TLS1_2_VERSION; + else if ((soap->ssl_flags & SOAP_TLSv1_3)) + minv = TLS1_3_VERSION; + if ((soap->ssl_flags & SOAP_TLSv1_3) && OpenSSL_version_num() >= 0x10101000L) + maxv = TLS1_3_VERSION; + else if ((soap->ssl_flags & SOAP_TLSv1_2)) + maxv = TLS1_2_VERSION; + else if ((soap->ssl_flags & SOAP_TLSv1_1)) + maxv = TLS1_1_VERSION; + else if ((soap->ssl_flags & SOAP_TLSv1_0)) + maxv = TLS1_VERSION; + else + maxv = SSL3_VERSION; + if (!SSL_CTX_set_min_proto_version(soap->ctx, minv) + || !SSL_CTX_set_max_proto_version(soap->ctx, maxv)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't set protocol version", SOAP_SSL_ERROR); +#else + /* disable SSL v2 by default and enable specific protos */ + flags = SSL_OP_NO_SSLv2; + if (!(soap->ssl_flags & SOAP_SSLv3)) + flags |= SSL_OP_NO_SSLv3; +#if OPENSSL_VERSION_NUMBER >= 0x10001000L + if (!(soap->ssl_flags & SOAP_TLSv1_0)) + flags |= SSL_OP_NO_TLSv1; + if (!(soap->ssl_flags & SOAP_TLSv1_1)) + flags |= SSL_OP_NO_TLSv1_1; + if (!(soap->ssl_flags & SOAP_TLSv1_2)) + flags |= SSL_OP_NO_TLSv1_2; +#endif +#endif +#ifdef SSL_OP_NO_TICKET + /* TLS extension is enabled by default in OPENSSL v0.9.8k disable it by */ + flags |= SSL_OP_NO_TICKET; +#endif + SSL_CTX_set_options(soap->ctx, flags); + if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION)) + mode = (SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT); + else if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION)) + mode = SSL_VERIFY_PEER; + else + mode = SSL_VERIFY_NONE; + SSL_CTX_set_verify(soap->ctx, mode, soap->fsslverify); +#if OPENSSL_VERSION_NUMBER < 0x00905100L + SSL_CTX_set_verify_depth(soap->ctx, 1); +#else + SSL_CTX_set_verify_depth(soap->ctx, 9); +#endif +#endif +#ifdef WITH_GNUTLS + int ret; + char priority[80]; + soap_strcpy(priority, sizeof(priority), "PERFORMANCE"); + if (!soap_ssl_init_done) + soap_ssl_init(); + if (!soap->xcred) + { + if (gnutls_certificate_allocate_credentials(&soap->xcred) != GNUTLS_E_SUCCESS) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't allocate credentials or trust", SOAP_SSL_ERROR); +#if GNUTLS_VERSION_NUMBER >= 0x030300 + gnutls_certificate_set_x509_system_trust(soap->xcred); +#endif + if (soap->cafile) + { + if (gnutls_certificate_set_x509_trust_file(soap->xcred, soap->cafile, GNUTLS_X509_FMT_PEM) < 0) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read CA PEM file", SOAP_SSL_ERROR); + } + if (soap->crlfile) + { + if (soap_ssl_crl(soap, soap->crlfile)) + return soap->error; + } + if (soap->keyfile) + { + if (gnutls_certificate_set_x509_key_file2(soap->xcred, soap->keyfile, soap->keyfile, GNUTLS_X509_FMT_PEM, soap->password, GNUTLS_PKCS_PKCS12_3DES | GNUTLS_PKCS_PKCS12_ARCFOUR | GNUTLS_PKCS_PKCS12_RC2_40 | GNUTLS_PKCS_PBES2_AES_128 | GNUTLS_PKCS_PBES2_AES_192 | GNUTLS_PKCS_PBES2_AES_256 | GNUTLS_PKCS_PBES2_DES) < 0) /* Assumes that key and cert(s) are concatenated in the keyfile and the key is encrypted with one of these algorithms */ + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read private key PEM file", SOAP_SSL_ERROR); + } + } + if ((soap->ssl_flags & SOAP_SSL_CLIENT)) + { + gnutls_init(&soap->session, GNUTLS_CLIENT); + if (soap->cafile || soap->crlfile || soap->keyfile) + { + ret = gnutls_priority_set_direct(soap->session, "PERFORMANCE", NULL); + if (ret != GNUTLS_E_SUCCESS) + return soap_set_receiver_error(soap, soap_ssl_error(soap, ret, 0), "SSL/TLS set priority error", SOAP_SSL_ERROR); + gnutls_credentials_set(soap->session, GNUTLS_CRD_CERTIFICATE, soap->xcred); + } + else + { + if (!soap->acred) + gnutls_anon_allocate_client_credentials(&soap->acred); + ret = gnutls_priority_set_direct(soap->session, "PERFORMANCE:+ANON-DH:!ARCFOUR-128", NULL); + if (ret != GNUTLS_E_SUCCESS) + return soap_set_receiver_error(soap, soap_ssl_error(soap, ret, 0), "SSL/TLS set priority error", SOAP_SSL_ERROR); + gnutls_credentials_set(soap->session, GNUTLS_CRD_ANON, soap->acred); + } + } + else if (!soap->keyfile) + { + return soap_set_receiver_error(soap, "SSL/TLS error", "No key file: anonymous server authentication not supported in this release", SOAP_SSL_ERROR); + } + else + { +#if GNUTLS_VERSION_NUMBER < 0x030300 + int protocol_priority[] = { 0, 0, 0, 0, 0 }; + int *protocol = protocol_priority; + if ((soap->ssl_flags & SOAP_SSL_RSA) && soap->rsa_params) + gnutls_certificate_set_rsa_export_params(soap->xcred, soap->rsa_params); +#endif + if (!(soap->ssl_flags & SOAP_SSL_RSA) && soap->dh_params) + gnutls_certificate_set_dh_params(soap->xcred, soap->dh_params); + if (!soap->cache) + gnutls_priority_init(&soap->cache, "NORMAL", NULL); + gnutls_init(&soap->session, GNUTLS_SERVER); + gnutls_priority_set(soap->session, soap->cache); + gnutls_credentials_set(soap->session, GNUTLS_CRD_CERTIFICATE, soap->xcred); + if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION)) + gnutls_certificate_server_set_request(soap->session, GNUTLS_CERT_REQUEST); + gnutls_session_enable_compatibility_mode(soap->session); + /* enable all TSLv1 protocols and disable SSLv3 by default if no SSL/TLS flags are set */ + if ((soap->ssl_flags & SOAP_SSLv3_TLSv1) == 0) + soap->ssl_flags |= SOAP_TLSv1; +#if GNUTLS_VERSION_NUMBER < 0x030300 + if ((soap->ssl_flags & SOAP_SSLv3)) + *protocol++ = GNUTLS_SSL3; + if ((soap->ssl_flags & SOAP_TLSv1_0)) + *protocol++ = GNUTLS_TLS1_0; + if ((soap->ssl_flags & SOAP_TLSv1_1)) + *protocol++ = GNUTLS_TLS1_1; + if ((soap->ssl_flags & SOAP_TLSv1_2)) + *protocol++ = GNUTLS_TLS1_2; + if (gnutls_protocol_set_priority(soap->session, protocol_priority) != GNUTLS_E_SUCCESS) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't set protocol", SOAP_SSL_ERROR); +#else + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), "NORMAL:+VERS-ALL"); + if (!(soap->ssl_flags & SOAP_TLSv1_0)) + soap_strcat(soap->tmpbuf, sizeof(soap->tmpbuf), ":-VERS-TLS1.0"); + if (!(soap->ssl_flags & SOAP_TLSv1_1)) + soap_strcat(soap->tmpbuf, sizeof(soap->tmpbuf), ":-VERS-TLS1.1"); + if (!(soap->ssl_flags & SOAP_TLSv1_2)) + soap_strcat(soap->tmpbuf, sizeof(soap->tmpbuf), ":-VERS-TLS1.2"); + if (gnutls_priority_set_direct(soap->session, soap->tmpbuf, NULL) != GNUTLS_E_SUCCESS) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't set protocol priority", SOAP_SSL_ERROR); +#endif + } +#endif +#ifdef WITH_WOLFSSL + WOLFSSL_METHOD *method = NULL; + int verify = WOLFSSL_VERIFY_PEER; + if (soap->ssl_flags & SOAP_SSL_CLIENT) + verify = (soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION) ? WOLFSSL_VERIFY_PEER : SSL_VERIFY_NONE; + else + verify = (soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION) ? SSL_VERIFY_PEER | WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT : SSL_VERIFY_NONE; + /* enable all TSLv1 protocols and disable SSLv3 by default if no SSL/TLS flags are set */ + if ((soap->ssl_flags & SOAP_SSLv3_TLSv1) == 0) + soap->ssl_flags |= SOAP_SSLv3_TLSv1; + if ((soap->ssl_flags & SOAP_SSL_CLIENT)) + { + if ((soap->ssl_flags & SOAP_SSLv3_TLSv1) == SOAP_SSLv3_TLSv1) + method = wolfSSLv23_client_method(); /* select all available protocols */ +#ifdef WOLFSSL_TLS13 + else if ((soap->ssl_flags & SOAP_TLSv1_3)) + method = wolfTLSv1_3_client_method(); /* TLSv1.3 only or upgrade to TLSv1.3 */ +#endif +#ifndef WOLFSSL_NO_TLS12 + else if ((soap->ssl_flags & SOAP_TLSv1_2)) + method = wolfTLSv1_2_client_method(); /* TLSv1.2 only or upgrade to TLSv1.2 */ +#endif +#ifndef NO_OLD_TLS + else if ((soap->ssl_flags & SOAP_TLSv1_1)) + method = wolfTLSv1_1_client_method(); /* TLSv1.1 only or upgrade to TLSv1.1 */ +#endif +#ifdef WOLFSSL_ALLOW_TLSV10 + else if ((soap->ssl_flags & SOAP_TLSv1_0)) + method = wolfTLSv1_client_method(); /* TLSv1.0 only or upgrade to TLSv1.0 */ +#endif +#ifdef WOLFSSL_ALLOW_SSLV3 + else if ((soap->ssl_flags & SOAP_SSLv3)) + method = wolfSSLv3_client_method(); /* SSLv3 only */ +#endif + } + else + { + if ((soap->ssl_flags & SOAP_SSLv3_TLSv1) == SOAP_SSLv3_TLSv1) + method = wolfSSLv23_server_method(); /* select all available protocols */ +#ifdef WOLFSSL_TLS13 + else if ((soap->ssl_flags & SOAP_TLSv1_3)) + method = wolfTLSv1_3_server_method(); /* TLSv1.3 only or upgrade to TLSv1.3 */ +#endif +#ifndef WOLFSSL_NO_TLS12 + else if ((soap->ssl_flags & SOAP_TLSv1_2)) + method = wolfTLSv1_2_server_method(); /* TLSv1.2 only or upgrade to TLSv1.2 */ +#endif +#ifndef NO_OLD_TLS + else if ((soap->ssl_flags & SOAP_TLSv1_1)) + method = wolfTLSv1_1_server_method(); /* TLSv1.1 only or upgrade to TLSv1.1 */ +#endif +#ifdef WOLFSSL_ALLOW_TLSV10 + else if ((soap->ssl_flags & SOAP_TLSv1_0)) + method = wolfTLSv1_server_method(); /* TLSv1.0 only or upgrade to TLSv1.0 */ +#endif +#ifdef WOLFSSL_ALLOW_SSLV3 + else if ((soap->ssl_flags & SOAP_SSLv3)) + method = wolfSSLv3_server_method(); /* SSLv3 only */ +#endif + } + if (!method) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't setup method, the specified TLS protocol is unsupported", SOAP_SSL_ERROR); + if (soap->ctx) + { + wolfSSL_CTX_free(soap->ctx); + soap->ctx = NULL; + } + soap->ctx = wolfSSL_CTX_new(method); + if (!soap->ctx) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't setup context", SOAP_SSL_ERROR); + if (soap->cafile || soap->capath) + { + if (wolfSSL_CTX_load_verify_locations(soap->ctx, soap->cafile, soap->capath) != SSL_SUCCESS) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read CA PEM file", SOAP_SSL_ERROR); + } + if (soap->keyfile) + { + if (wolfSSL_CTX_use_certificate_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM) != SSL_SUCCESS) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read server CA PEM file", SOAP_SSL_ERROR); +#ifdef WOLFSSL_ENCRYPTED_KEYS + if (soap->password) + { + wolfSSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password); + wolfSSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password); + } +#else +#warning "Encrypted private keys are not supported, define WOLFSSL_ENCRYPTED_KEYS in WolfSSL build settings to enable" +#endif + if (wolfSSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM) != SSL_SUCCESS) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't read private key PEM file", SOAP_SSL_ERROR); +#if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) + /* post handshake authentication sets a flag in the ClientHello message, which is required for post-handshake authentication, only when we are connecting as a client */ + if ((soap->ssl_flags & SOAP_TLSv1_3) && (soap->ssl_flags & SOAP_SSL_CLIENT) && wolfSSL_CTX_allow_post_handshake_auth(soap->ctx)) + return soap_set_receiver_error(soap, "SSL/TLS error", "Can't enable post-handshake authentication", SOAP_SSL_ERROR); +#endif + } + if (soap->crlfile) + { + if (soap_ssl_crl(soap, soap->crlfile)) + return soap->error; + } + wolfSSL_CTX_set_verify(soap->ctx, verify, soap->fsslverify); +#endif +#ifdef WITH_SYSTEMSSL + if (!soap->ctx) + { + int err; + err = gsk_environment_open(&soap->ctx); + if (err == GSK_OK) + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_SSLV2, GSK_PROTOCOL_SSLV2_OFF); + /* enable all TSLv1 protocols and disable SSLv3 by default if no SSL/TLS flags are set */ + if ((soap->ssl_flags & SOAP_SSLv3_TLSv1) == 0) + soap->ssl_flags |= SOAP_TLSv1; + if (err == GSK_OK) + { + if ((soap->ssl_flags & SOAP_SSLv3)) + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_SSLV3, GSK_PROTOCOL_SSLV3_ON); + else + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_SSLV3, GSK_PROTOCOL_SSLV3_OFF); + } + if (err == GSK_OK) + { + if ((soap->ssl_flags & SOAP_TLSv1_0)) + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_TLSV1, GSK_PROTOCOL_TLSV1_ON); + else + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_TLSV1, GSK_PROTOCOL_TLSV1_OFF); + } + if (err == GSK_OK) + { + if ((soap->ssl_flags & SOAP_TLSv1_1)) + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_TLSV1, GSK_PROTOCOL_TLSV1_1_ON); + else + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_TLSV1, GSK_PROTOCOL_TLSV1_1_OFF); + } + if (err == GSK_OK) + { + if ((soap->ssl_flags & SOAP_TLSv1_2)) + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_TLSV1, GSK_PROTOCOL_TLSV1_2_ON); + else + err = gsk_attribute_set_enum(soap->ctx, GSK_PROTOCOL_TLSV1, GSK_PROTOCOL_TLSV1_2_OFF); + } + if (err == GSK_OK) + err = gsk_attribute_set_buffer(soap->ctx, GSK_KEYRING_FILE, soap->keyfile, 0); /* keyfile is a keyring .kdb file */ + if (err == GSK_OK) + err = gsk_attribute_set_buffer(soap->ctx, GSK_KEYRING_PW, soap->password, 0); /* locked by password */ + if (err == GSK_OK) + err = gsk_environment_init(soap->ctx); + if (err != GSK_OK) + return soap_set_receiver_error(soap, gsk_strerror(err), "SYSTEM SSL error in ssl_auth_init()", SOAP_SSL_ERROR); + } +#endif + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_WOLFSSL) +static int +ssl_password(char *buf, int num, int rwflag, void *userdata) +{ + (void)rwflag; + if (!buf || !userdata) + return 0; + soap_strcpy(buf, (size_t)num, (char*)userdata); + return (int)strlen(buf); +} +#endif + +/******************************************************************************/ + +#ifdef WITH_OPENSSL +static int +ssl_verify_callback(int ok, X509_STORE_CTX *store) +{ + (void)store; +#ifdef SOAP_DEBUG + if (!ok) + { + int err = X509_STORE_CTX_get_error(store); + X509 *cert = X509_STORE_CTX_get_current_cert(store); + fprintf(stderr, "\nDEBUG mode TLS/SSL warnings:\nSSL verify error %d or warning with certificate at depth %d: %s\n", err, X509_STORE_CTX_get_error_depth(store), X509_verify_cert_error_string(err)); + if (cert) + { + char buf[1024]; + X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf)-1); + fprintf(stderr, " certificate issuer: %s\n", buf); + X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf)-1); + 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: + case X509_V_ERR_UNABLE_TO_GET_CRL: + case X509_V_ERR_CRL_NOT_YET_VALID: + case X509_V_ERR_CRL_HAS_EXPIRED: + X509_STORE_CTX_set_error(store, X509_V_OK); + ok = 1; + fprintf(stderr, "Initialize soap_ssl_client_context with SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE to allow this verification error to pass without DEBUG mode enabled\n"); + } + } + else + { + fprintf(stderr, " no certificate in store\n"); + } + } +#endif + /* Note: return 1 to continue, whether it is safe or not to do so is up to you to verify, or 0 to cancel the handshake */ + return ok; +} +#endif + +/******************************************************************************/ + +#ifdef WITH_OPENSSL +static int +ssl_verify_callback_allow_expired_certificate(int ok, X509_STORE_CTX *store) +{ + ok = ssl_verify_callback(ok, store); + if (!ok) + { + /* accept self signed certificates, expired certificates, and certficiates w/o CRL */ + 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: + case X509_V_ERR_UNABLE_TO_GET_CRL: + case X509_V_ERR_CRL_NOT_YET_VALID: + case X509_V_ERR_CRL_HAS_EXPIRED: + X509_STORE_CTX_set_error(store, X509_V_OK); + ok = 1; + } + } + /* Note: return 1 to continue, but unsafe progress will be terminated by SSL */ + return ok; +} +#endif + +/******************************************************************************/ + +#ifdef WITH_GNUTLS +static const char * +ssl_verify(struct soap *soap, const char *host) +{ + unsigned int status; + const char *err = NULL; + int r = gnutls_certificate_verify_peers2(soap->session, &status); + if (r < 0) + err = "Certificate verify error"; + else if ((status & GNUTLS_CERT_INVALID)) + err = "The certificate is not trusted"; + else if ((status & GNUTLS_CERT_SIGNER_NOT_FOUND)) + err = "The certificate hasn't got a known issuer"; + else if ((status & GNUTLS_CERT_REVOKED)) + err = "The certificate has been revoked"; + else if (gnutls_certificate_type_get(soap->session) == GNUTLS_CRT_X509) + { + gnutls_x509_crt_t cert; + const gnutls_datum_t *cert_list; + unsigned int cert_list_size; + if (gnutls_x509_crt_init(&cert) < 0) + err = "Could not get X509 certificates"; + else if ((cert_list = gnutls_certificate_get_peers(soap->session, &cert_list_size)) == NULL) + err = "Could not get X509 certificates"; + else if (gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER) < 0) + err = "Error parsing X509 certificate"; + else if (!(soap->ssl_flags & SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE) && gnutls_x509_crt_get_expiration_time(cert) < time(NULL)) + err = "The certificate has expired"; + else if (!(soap->ssl_flags & SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE) && gnutls_x509_crt_get_activation_time(cert) > time(NULL)) + err = "The certificate is not yet activated"; + else if (host && !(soap->ssl_flags & SOAP_SSL_SKIP_HOST_CHECK)) + { + if (!gnutls_x509_crt_check_hostname(cert, host)) + err = "Certificate host name mismatch"; + } + gnutls_x509_crt_deinit(cert); + } + return err; +} +#endif + +/******************************************************************************/ + +#ifdef WITH_WOLFSSL +static int +ssl_verify_callback(int ok, WOLFSSL_X509_STORE_CTX *store) +{ + (void)store; +#ifdef SOAP_DEBUG + if (!ok) + { + int err = store->error; +#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) + WOLFSSL_X509 *cert = store->current_cert; + fprintf(stderr, "\nDEBUG mode TLS/SSL warnings:\nSSL verify error %d or warning with certificate at depth %d: %s\n", err, store->error_depth, wolfSSL_X509_verify_cert_error_string(err)); + if (cert) + { + char buf[1024]; + wolfSSL_X509_NAME_oneline(wolfSSL_X509_get_issuer_name(cert), buf, sizeof(buf)-1); + fprintf(stderr, " certificate issuer: %s\n", buf); + wolfSSL_X509_NAME_oneline(wolfSSL_X509_get_subject_name(cert), buf, sizeof(buf)-1); + fprintf(stderr, " certificate subject: %s\n", buf); + } + else + { + fprintf(stderr, " no certificate in store\n"); + } +#else + fprintf(stderr, "\nDEBUG mode TLS/SSL warnings:\nSSL verify error %d or warning with certificate at depth %d\n", err, store->error_depth); +#endif + } +#endif + /* Note: return 1 to continue, whether it is safe or not to do so is up to you to verify, or 0 to cancel the handshake */ + return ok; +} +#endif + +/******************************************************************************/ + +#ifdef WITH_WOLFSSL +static int +ssl_verify_callback_allow_expired_certificate(int ok, WOLFSSL_X509_STORE_CTX *store) +{ + ok = ssl_verify_callback(ok, store); + if (!ok) + { + /* accept expired certificates */ + switch (store->error) + { + case ASN_BEFORE_DATE_E: + case ASN_AFTER_DATE_E: + ok = 1; + } + } + /* Note: return 1 to continue, whether it is safe or not to do so is up to you to verify, or 0 to cancel the handshake */ + return ok; +} +#endif + +/******************************************************************************/ + +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +#ifndef WITH_NOIO +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_ssl_accept(struct soap *soap) +{ + SOAP_SOCKET sk = soap->socket; +#ifdef WITH_OPENSSL + BIO *bio; + int err = SSL_ERROR_NONE; + int retries, r, s; + ERR_clear_error(); + 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)) != SOAP_OK) + return soap_closesock(soap); + if (!soap->ssl) + { + soap->ssl = SSL_new(soap->ctx); + if (!soap->ssl) + { + (void)soap_closesock(soap); + return soap_set_receiver_error(soap, "SSL/TLS error", "SSL_new() failed in soap_ssl_accept()", SOAP_SSL_ERROR); + } + } + else + { + SSL_clear(soap->ssl); + } + bio = BIO_new_socket((int)sk, BIO_NOCLOSE); + SSL_set_bio(soap->ssl, bio, bio); + /* Default timeout: 10 sec retries, 100 times 0.1 sec */ + retries = 100; + if (soap->recv_timeout || soap->send_timeout) + { + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + } + SOAP_SOCKNONBLOCK(sk) + while ((r = SSL_accept(soap->ssl)) <= 0) + { + 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, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + else + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + } + else + { + soap->errnum = soap_socket_errno; + break; + } + if (retries-- <= 0) + break; + } + if (!soap->recv_timeout && !soap->send_timeout) + SOAP_SOCKBLOCK(sk) + if (r <= 0) + { + (void)soap_set_receiver_error(soap, soap_ssl_error(soap, r, err), "SSL_accept() failed in soap_ssl_accept()", SOAP_SSL_ERROR); + return soap_closesock(soap); + } + if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION)) + { + X509 *peer; + int err; + if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK) + { + (void)soap_closesock(soap); + return soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in soap_ssl_accept()", SOAP_SSL_ERROR); + } + peer = SSL_get_peer_certificate(soap->ssl); + if (!peer) + { + (void)soap_closesock(soap); + return soap_set_sender_error(soap, "SSL/TLS error", "No SSL certificate was presented by the peer in soap_ssl_accept()", SOAP_SSL_ERROR); + } + X509_free(peer); + } +#endif +#ifdef WITH_GNUTLS + int retries, r, s; + 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_OK) + return soap_closesock(soap); + gnutls_transport_set_ptr(soap->session, (gnutls_transport_ptr_t)(long)sk); + /* default timeout: 10 sec retries, 100 times 0.1 sec */ + retries = 100; + if (soap->recv_timeout || soap->send_timeout) + { + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + } + SOAP_SOCKNONBLOCK(sk) + while ((r = gnutls_handshake(soap->session))) + { + /* GNUTLS repeat handhake when GNUTLS_E_AGAIN */ + if (r == GNUTLS_E_AGAIN || r == GNUTLS_E_INTERRUPTED) + { + if (!gnutls_record_get_direction(soap->session)) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + else + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + } + else + { + soap->errnum = soap_socket_errno; + break; + } + if (retries-- <= 0) + break; + } + if (!soap->recv_timeout && !soap->send_timeout) + SOAP_SOCKBLOCK(sk) + if (r) + { + (void)soap_set_receiver_error(soap, soap_ssl_error(soap, r, 0), "SSL/TLS handshake failed", SOAP_SSL_ERROR); + return soap_closesock(soap); + } + if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION)) + { + const char *err = ssl_verify(soap, NULL); + if (err) + { + (void)soap_closesock(soap); + return soap_set_receiver_error(soap, "SSL/TLS error", err, SOAP_SSL_ERROR); + } + } +#endif +#ifdef WITH_WOLFSSL + int err = SSL_ERROR_NONE; + int retries, r, s; + if (!soap_valid_socket(sk)) + return soap_set_receiver_error(soap, "SSL/TLS error", "No socket in soap_ssl_accept()", SOAP_SSL_ERROR); + if (!soap->ssl) + { + soap->ssl = wolfSSL_new(soap->ctx); + if (!soap->ssl) + { + (void)soap_closesock(soap); + return soap_set_receiver_error(soap, "SSL/TLS error", "wolfSSL_new() failed in soap_ssl_accept()", SOAP_SSL_ERROR); + } + } + soap->ssl_flags &= ~SOAP_SSL_CLIENT; + /* default timeout: 10 sec retries, 100 times 0.1 sec */ + retries = 100; + if (soap->recv_timeout || soap->send_timeout) + { + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + } + wolfSSL_set_fd(soap->ssl, sk); + SOAP_SOCKNONBLOCK(sk) + while ((r = wolfSSL_accept(soap->ssl)) != SSL_SUCCESS) + { + err = wolfSSL_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, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + else + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + } + else + { + soap->errnum = soap_socket_errno; + break; + } + if (retries-- <= 0) + break; + } + if (!soap->recv_timeout && !soap->send_timeout) + SOAP_SOCKBLOCK(sk) + if (r != SSL_SUCCESS) + { + (void)soap_set_receiver_error(soap, soap_ssl_error(soap, r, 0), "SSL/TLS handshake failed", SOAP_SSL_ERROR); + return soap_closesock(soap); + } +#endif +#ifdef WITH_SYSTEMSSL + gsk_iocallback local_io = { ssl_recv, ssl_send, NULL, NULL, NULL, NULL }; + int retries, r, s; + 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; + /* default timeout: 10 sec retries, 100 times 0.1 sec */ + retries = 100; + if (soap->recv_timeout || soap->send_timeout) + { + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + } + SOAP_SOCKNONBLOCK(sk) + r = gsk_secure_socket_open(soap->ctx, &soap->ssl); + if (r == GSK_OK) + r = gsk_attribute_set_numeric_value(soap->ssl, GSK_FD, sk); + if (r == GSK_OK) + r = gsk_attribute_set_buffer(soap->ssl, GSK_KEYRING_LABEL, soap->cafile, 0); + if (r == GSK_OK) + r = gsk_attribute_set_enum(soap->ssl, GSK_SESSION_TYPE, GSK_SERVER_SESSION); + if (r == GSK_OK) + r = gsk_attribute_set_buffer(soap->ssl, GSK_V3_CIPHER_SPECS_EXPANDED, "0035002F000A", 0); + if (r == GSK_OK) + r = gsk_attribute_set_enum(soap->ssl, GSK_V3_CIPHERS, GSK_V3_CIPHERS_CHAR4); + if (r == GSK_OK) + r = gsk_attribute_set_callback(soap->ssl, GSK_IO_CALLBACK, &local_io); + if (r != GSK_OK) + return soap_set_receiver_error(soap, gsk_strerror(r), "SYSTEM SSL error in soap_ssl_accept()", SOAP_SSL_ERROR); + while ((r = gsk_secure_socket_init(soap->ssl)) != GSK_OK) + { + if (r == GSK_WOULD_BLOCK_READ || r == GSK_WOULD_BLOCK_WRITE) + { + if (r == GSK_WOULD_BLOCK_READ) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + else + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + } + else + { + soap->errnum = soap_socket_errno; + break; + } + if (retries-- <= 0) + break; + } + if (!soap->recv_timeout && !soap->send_timeout) + SOAP_SOCKBLOCK(sk) + if (r != GSK_OK) + { + (void)soap_set_receiver_error(soap, gsk_strerror(r), "gsk_secure_socket_init() failed in soap_ssl_accept()", SOAP_SSL_ERROR); + return soap_closesock(soap); + } +#endif + soap->imode |= SOAP_ENC_SSL; + soap->omode |= SOAP_ENC_SSL; + return SOAP_OK; +} +#endif +#endif + +/******************************************************************************\ + * + * TCP/UDP [SSL/TLS] IPv4 and IPv6 + * +\******************************************************************************/ + +#ifndef WITH_NOIO +static int +tcp_init(struct soap *soap) +{ + soap->errmode = 1; +#ifdef WIN32 + if (tcp_done) + return 0; + else + { + WSADATA w; + if (WSAStartup(MAKEWORD(1, 1), &w)) + return -1; + tcp_done = 1; + } +#endif + return 0; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static const char* +tcp_error(struct soap *soap) +{ + const char *msg = NULL; + switch (soap->errmode) + { + case 0: + msg = soap_strerror(soap); + break; + case 1: + msg = "WSAStartup failed"; + break; + case 2: + { +#ifndef WITH_LEAN + msg = soap_code_str(h_error_codes, soap->errnum); + if (!msg) +#endif + { + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), 37), "TCP/UDP IP error %d", soap->errnum); + msg = soap->msgbuf; + } + } + } + return msg; +} +#endif + +/******************************************************************************/ + +#if !defined(WITH_IPV6) || defined(WITH_COOKIES) +#ifndef WITH_NOIO +static int +tcp_gethostbyname(struct soap *soap, const char *addr, struct hostent *hostent, struct in_addr *inaddr) +{ +#if (defined(_AIX43) || defined(TRU64) || defined(HP_UX)) && defined(HAVE_GETHOSTBYNAME_R) + struct hostent_data ht_data; +#elif (!defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && !defined(SUN_OS) && !defined(__QNX__) && !defined(QNX) && defined(HAVE_GETHOSTBYNAME_R) + int r; + char *tmpbuf = soap->tmpbuf; + size_t tmplen = sizeof(soap->tmpbuf); +#elif defined(HAVE_GETHOSTBYNAME_R) + char *tmpbuf = soap->tmpbuf; + size_t tmplen = sizeof(soap->tmpbuf); +#endif +#ifdef VXWORKS + int hostint; /* vxWorks compatible */ +#endif + if (inaddr) + { + soap_int32 iadd = -1; +#ifdef AS400 + iadd = inet_addr((void*)addr); +#else + iadd = inet_addr((char*)addr); +#endif + if (iadd != -1) + { + if (soap_memcpy((void*)inaddr, sizeof(struct in_addr), (const void*)&iadd, sizeof(iadd))) + return soap->error = SOAP_EOM; + return SOAP_OK; + } + } +#if (defined(_AIX43) || defined(TRU64) || defined(HP_UX)) && defined(HAVE_GETHOSTBYNAME_R) + memset((void*)&ht_data, 0, sizeof(ht_data)); + if (gethostbyname_r(addr, hostent, &ht_data) < 0) + { + hostent = NULL; + soap->errnum = h_errno; + } +#elif (!defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && !defined(SUN_OS) && !defined(__QNX__) && !defined(QNX) && defined(HAVE_GETHOSTBYNAME_R) + while ((r = gethostbyname_r(addr, hostent, tmpbuf, tmplen, &hostent, &soap->errnum)) < 0) + { + if (tmpbuf != soap->tmpbuf) + SOAP_FREE(soap, tmpbuf); + if (r != SOAP_ERANGE) + { + hostent = NULL; + break; + } + tmplen *= 2; + tmpbuf = (char*)SOAP_MALLOC(soap, tmplen); + if (!tmpbuf) + break; + } +#elif defined(HAVE_GETHOSTBYNAME_R) + hostent = gethostbyname_r(addr, hostent, tmpbuf, tmplen, &soap->errnum); +#elif defined(VXWORKS) + /* vxWorks compatible */ + /* If the DNS resolver library resolvLib has been configured in the vxWorks + * image, a query for the host IP address is sent to the DNS server, if the + * name was not found in the local host table. */ + hostint = hostGetByName((char*)addr); + if (hostint == ERROR) + { + hostent = NULL; + soap->errnum = soap_errno; + } +#else + { + struct hostent *temp; +#ifdef AS400 + temp = gethostbyname((void*)addr); +#else + temp = gethostbyname((char*)addr); +#endif + if (!temp) + { + soap->errnum = h_errno; + hostent = NULL; + } + else + { + *hostent = *temp; + } + } +#endif + if (!hostent) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Host name not found\n")); + return SOAP_ERR; + } + if (inaddr) + { +#ifdef VXWORKS + inaddr->s_addr = hostint; /* vxWorks compatible */ +#else + if (soap_memcpy((void*)inaddr, sizeof(struct in_addr), (const void*)hostent->h_addr, (size_t)hostent->h_length)) + { +#if (!defined(_AIX43) && !defined(TRU64) && !defined(HP_UX)) || !defined(HAVE_GETHOSTBYNAME_R) +#if (!defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && defined(HAVE_GETHOSTBYNAME_R) + if (tmpbuf && tmpbuf != soap->tmpbuf) + SOAP_FREE(soap, tmpbuf); +#endif +#endif + return soap->error = SOAP_EOM; + } +#endif + } +#if (!defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || defined(__ANDROID__) || defined(FREEBSD) || defined(__FreeBSD__)) && defined(HAVE_GETHOSTBYNAME_R) + if (tmpbuf && tmpbuf != soap->tmpbuf) + SOAP_FREE(soap, tmpbuf); +#endif + return SOAP_OK; +} +#endif +#endif + +/******************************************************************************/ + +#if !defined(WITH_IPV6) +#ifndef WITH_NOIO +static int +tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr) +{ + struct hostent hostent; + return tcp_gethostbyname(soap, addr, &hostent, inaddr); +} +#endif +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static SOAP_SOCKET +tcp_connect(struct soap *soap, const char *endpoint, const char *host, int port) +{ +#ifdef WITH_IPV6 + struct addrinfo hints, *res, *ressave; +#endif + SOAP_SOCKET sk; + int err = 0; +#ifndef WITH_LEAN + int set = 1; +#endif +#if !defined(WITH_LEAN) || defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) + int retries; +#endif + soap->errnum = 0; + soap->errmode = 0; + if (soap_valid_socket(soap->socket)) + { + if ((soap->omode & SOAP_IO_UDP) && soap->socket == soap->master) + { +#ifdef IP_MULTICAST_TTL +#ifndef WITH_IPV6 + soap->errmode = 2; + if (soap->fresolve(soap, host, &soap->peer.in.sin_addr)) + { + (void)soap_set_receiver_error(soap, tcp_error(soap), "get host by name failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, soap->socket); + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->peer.in.sin_port = htons((short)port); + soap->peer.in.sin_family = AF_INET; + soap->errmode = 0; +#else + memset((void*)&hints, 0, sizeof(hints)); + err = getaddrinfo(host, soap_int2s(soap, port), &hints, &res); + if (err || !res) + { + (void)soap_set_receiver_error(soap, SOAP_GAI_STRERROR(err), "getaddrinfo failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, soap->socket); + return soap->socket = SOAP_INVALID_SOCKET; + } + if (soap_memcpy((void*)&soap->peer.storage, sizeof(soap->peer.storage), (const void*)res->ai_addr, res->ai_addrlen)) + { + soap->error = SOAP_EOM; + (void)soap->fclosesocket(soap, soap->socket); + freeaddrinfo(res); + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->peerlen = res->ai_addrlen; + freeaddrinfo(res); +#endif + if (soap->ipv4_multicast_ttl) + { + unsigned char ttl = soap->ipv4_multicast_ttl; + if (setsockopt(soap->socket, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_TTL failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, soap->socket); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + if (soap->ipv4_multicast_if && !soap->ipv6_multicast_if) + { + if (setsockopt(soap->socket, IPPROTO_IP, IP_MULTICAST_IF, (char*)soap->ipv4_multicast_if, sizeof(struct in_addr))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_IF failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, soap->socket); + return soap->socket = SOAP_INVALID_SOCKET; + } + } +#endif + return soap->socket; + } + (void)soap->fclosesocket(soap, soap->socket); + soap->socket = SOAP_INVALID_SOCKET; + } + if (tcp_init(soap)) + { + (void)soap_set_receiver_error(soap, tcp_error(soap), "TCP init failed in tcp_connect()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + soap->errmode = 0; +#ifdef WITH_IPV6 + memset((void*)&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + hints.ai_socktype = SOCK_DGRAM; + else +#endif + hints.ai_socktype = SOCK_STREAM; + soap->errmode = 2; + if (soap->proxy_host) + err = getaddrinfo(soap->proxy_host, soap_int2s(soap, soap->proxy_port), &hints, &res); + else + err = getaddrinfo(host, soap_int2s(soap, port), &hints, &res); + if (err || !res) + { + (void)soap_set_receiver_error(soap, SOAP_GAI_STRERROR(err), "getaddrinfo failed in tcp_connect()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + ressave = res; +again: + sk = soap->socket = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + soap->error = SOAP_OK; + soap->errmode = 0; +#else +#ifndef WITH_LEAN +again: +#endif +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + sk = soap->socket = socket(AF_INET, SOCK_DGRAM, 0); + else +#endif + sk = soap->socket = socket(AF_INET, SOCK_STREAM, 0); +#endif + if (!soap_valid_socket(sk)) + { +#ifdef WITH_IPV6 + if (res->ai_next) + { + res = res->ai_next; + goto again; + } +#endif + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "socket failed in tcp_connect()", SOAP_TCP_ERROR); +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + return SOAP_INVALID_SOCKET; + } +#ifdef WITH_SOCKET_CLOSE_ON_EXIT +#ifdef WIN32 +#ifndef UNDER_CE + SetHandleInformation((HANDLE)sk, HANDLE_FLAG_INHERIT, 0); +#endif +#else + fcntl(sk, F_SETFD, 1); +#endif +#endif +#ifndef WITH_LEAN + if ((soap->connect_flags & SO_LINGER)) + { + struct linger linger; + memset((void*)&linger, 0, sizeof(linger)); + linger.l_onoff = 1; + linger.l_linger = soap->linger_time; + if (setsockopt(sk, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + return soap->socket = SOAP_INVALID_SOCKET; + } + } + if ((soap->connect_flags & ~SO_LINGER) && setsockopt(sk, SOL_SOCKET, soap->connect_flags & ~SO_LINGER, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#ifndef UNDER_CE + if ((soap->keep_alive || soap->tcp_keep_alive) && setsockopt(sk, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + if (soap->sndbuf > 0 && setsockopt(sk, SOL_SOCKET, SO_SNDBUF, (char*)&soap->sndbuf, sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + if (soap->rcvbuf > 0 && setsockopt(sk, SOL_SOCKET, SO_RCVBUF, (char*)&soap->rcvbuf, sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#ifdef TCP_KEEPIDLE + if (soap->tcp_keep_idle && setsockopt(sk, IPPROTO_TCP, TCP_KEEPIDLE, (char*)&(soap->tcp_keep_idle), sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_KEEPIDLE failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif +#ifdef TCP_KEEPINTVL + if (soap->tcp_keep_intvl && setsockopt(sk, IPPROTO_TCP, TCP_KEEPINTVL, (char*)&(soap->tcp_keep_intvl), sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_KEEPINTVL failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif +#ifdef TCP_KEEPCNT + if (soap->tcp_keep_cnt && setsockopt(sk, IPPROTO_TCP, TCP_KEEPCNT, (char*)&(soap->tcp_keep_cnt), sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_KEEPCNT failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif +#ifdef TCP_NODELAY + if (!(soap->omode & SOAP_IO_UDP) && setsockopt(sk, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif +#ifdef WITH_IPV6 + if ((soap->omode & SOAP_IO_UDP) && soap->ipv6_multicast_if) + { + struct sockaddr_in6 *in6addr = (struct sockaddr_in6*)res->ai_addr; + in6addr->sin6_scope_id = soap->ipv6_multicast_if; + } +#endif +#endif +#ifdef IP_MULTICAST_TTL + 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; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_TTL failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + if (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))) + { + soap->errnum = soap_socket_errno; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_IF failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + } +#endif +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Opening socket=%d to host='%s' port=%d\n", (int)sk, host, port)); +#ifndef WITH_IPV6 + soap->peerlen = sizeof(soap->peer.in); + memset((void*)&soap->peer.in, 0, sizeof(soap->peer.in)); + soap->peer.in.sin_family = AF_INET; +#ifndef WIN32 + if (soap->client_addr) + { + struct sockaddr_in addr; + memset((void*)&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + if (soap->client_port >= 0) + addr.sin_port = htons(soap->client_port); + if (inet_pton(AF_INET, soap->client_addr, (void*)&addr.sin_addr) != 1 || bind(sk, (struct sockaddr*)&addr, sizeof(addr))) + { + soap->errnum = soap_socket_errno; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind before connect\n")); + (void)soap_set_receiver_error(soap, tcp_error(soap), "bind failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + soap->client_addr = NULL; + soap->client_port = -1; + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->client_addr = NULL; /* disable bind before connect, so need to set it again before the next connect */ + soap->client_port = -1; /* disable bind before connect, so need to set it again before the next connect */ + } + else +#endif + if (soap->client_port >= 0) + { + struct sockaddr_in addr; + memset((void*)&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(soap->client_port); + if (bind(sk, (struct sockaddr*)&addr, sizeof(addr))) + { + soap->errnum = soap_socket_errno; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind before connect\n")); + (void)soap_set_receiver_error(soap, tcp_error(soap), "bind failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + soap->client_port = -1; + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->client_port = -1; /* disable bind before connect, so need to set it again before the next connect */ + } +#ifndef WIN32 + if (soap->client_interface) + { + if (inet_pton(AF_INET, soap->client_interface, &soap->peer.in.sin_addr) != 1) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "inet_pton() failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + soap->client_interface = NULL; + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->client_interface = NULL; /* disable client interface, so need to set it again before the next connect */ + } +#endif + soap->errmode = 2; + if (soap->proxy_host) + { + if (soap->fresolve(soap, soap->proxy_host, &soap->peer.in.sin_addr)) + { + (void)soap_set_receiver_error(soap, tcp_error(soap), "get proxy host by name failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->peer.in.sin_port = htons((short)soap->proxy_port); + } + else + { + if (soap->fresolve(soap, host, &soap->peer.in.sin_addr)) + { + (void)soap_set_receiver_error(soap, tcp_error(soap), "get host by name failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->peer.in.sin_port = htons((short)port); + } + soap->errmode = 0; +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + return sk; +#endif +#else +#ifndef WIN32 + if (soap->client_addr) + { + struct sockaddr_in6 addr; + memset((void*)&addr, 0, sizeof(addr)); + addr.sin6_family = AF_INET6; + if ((soap->client_addr_ipv6 && res->ai_family == AF_INET6 && inet_pton(AF_INET6, soap->client_addr_ipv6, (void*)&addr.sin6_addr.s6_addr) == 1) + || (!soap->client_addr_ipv6 && inet_pton(AF_INET6, soap->client_addr, (void*)&addr.sin6_addr.s6_addr) == 1) + ) + { + if (soap->client_port >= 0) + addr.sin6_port = htons(soap->client_port); + if (bind(sk, (struct sockaddr*)&addr, sizeof(addr))) + { + soap->errnum = soap_socket_errno; + freeaddrinfo(ressave); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind before connect\n")); + (void)soap_set_receiver_error(soap, tcp_error(soap), "bind failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + soap->client_addr = NULL; + soap->client_addr_ipv6 = NULL; + soap->client_port = -1; + return soap->socket = SOAP_INVALID_SOCKET; + } + } + else /* not an IPv6 address, must be IPv4 */ + { + struct sockaddr_in addr; + memset((void*)&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + if (soap->client_port >= 0) + addr.sin_port = htons(soap->client_port); + if (inet_pton(AF_INET, soap->client_addr, (void*)&addr.sin_addr) != 1 || bind(sk, (struct sockaddr*)&addr, sizeof(addr))) + { + soap->errnum = soap_socket_errno; + freeaddrinfo(ressave); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind before connect\n")); + (void)soap_set_receiver_error(soap, tcp_error(soap), "bind failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + soap->client_addr = NULL; + soap->client_addr_ipv6 = NULL; + soap->client_port = -1; + return soap->socket = SOAP_INVALID_SOCKET; + } + } + soap->client_addr = NULL; /* disable bind before connect, so need to set it again before the next connect */ + soap->client_addr_ipv6 = NULL; /* disable bind before connect, so need to set it again before the next connect */ + soap->client_port = -1; /* disable bind before connect, so need to set it again before the next connect */ + } + else +#endif + if (soap->client_port >= 0) + { + struct sockaddr_in6 addr; + memset((void*)&addr, 0, sizeof(addr)); + addr.sin6_family = AF_INET6; + addr.sin6_port = htons(soap->client_port); + if (bind(sk, (struct sockaddr*)&addr, sizeof(addr))) + { + soap->errnum = soap_socket_errno; + freeaddrinfo(ressave); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind before connect\n")); + (void)soap_set_receiver_error(soap, tcp_error(soap), "bind failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + soap->client_port = -1; + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->client_port = -1; /* disable bind before connect, so need to set it again before the next connect */ + } +#ifndef WIN32 + if (soap->client_interface) + { + if (inet_pton(AF_INET6, soap->client_interface, res->ai_addr) != 1) + { + if (inet_pton(AF_INET, soap->client_interface, res->ai_addr) != 1) + { + soap->errnum = soap_socket_errno; + freeaddrinfo(ressave); + (void)soap_set_receiver_error(soap, tcp_error(soap), "inet_pton() failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + soap->client_interface = NULL; + return soap->socket = SOAP_INVALID_SOCKET; + } + } + soap->client_interface = NULL; /* disable client interface, so need to set it again before the next connect */ + } +#endif +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + { + if (soap_memcpy((void*)&soap->peer.storage, sizeof(soap->peer.storage), (const void*)res->ai_addr, res->ai_addrlen)) + { + soap->error = SOAP_EOM; + (void)soap->fclosesocket(soap, sk); + soap->socket = sk = SOAP_INVALID_SOCKET; + } + soap->peerlen = res->ai_addrlen; + freeaddrinfo(ressave); + return sk; + } +#endif +#endif +#ifndef WITH_LEAN + if (soap->connect_timeout) + SOAP_SOCKNONBLOCK(sk) + else + SOAP_SOCKBLOCK(sk) + retries = 10; +#endif + for (;;) + { +#ifdef WITH_IPV6 + if (connect(sk, res->ai_addr, (int)res->ai_addrlen)) +#else + if (connect(sk, &soap->peer.addr, sizeof(soap->peer.in))) +#endif + { + err = soap_socket_errno; +#ifdef WITH_IPV6 + if (err == SOAP_ECONNREFUSED && res->ai_next) + { + (void)soap->fclosesocket(soap, sk); + res = res->ai_next; + goto again; + } +#endif +#ifndef WITH_LEAN + if (err == SOAP_EADDRINUSE) + { + (void)soap->fclosesocket(soap, sk); + if (retries-- > 0) + goto again; + } + else if (soap->connect_timeout && (err == SOAP_EINPROGRESS || err == SOAP_EAGAIN || err == SOAP_EWOULDBLOCK)) + { + SOAP_SOCKLEN_T k; + for (;;) + { + int r; +#ifdef WITH_SELF_PIPE + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_PIP, soap->connect_timeout); + if ((r & SOAP_TCP_SELECT_PIP)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connection closed by self pipe\n")); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#else + r = tcp_select(soap, sk, SOAP_TCP_SELECT_SND, soap->connect_timeout); +#endif + if (r > 0) + break; + if (!r) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n")); + (void)soap_set_receiver_error(soap, "Timeout", "connect failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); +#ifdef WITH_IPV6 + if (res->ai_next) + { + res = res->ai_next; + goto again; + } + freeaddrinfo(ressave); +#endif + return soap->socket = SOAP_INVALID_SOCKET; + } + r = soap->errnum = soap_socket_errno; + if (r != SOAP_EINTR) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n")); + (void)soap_set_receiver_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); +#ifdef WITH_IPV6 + if (res->ai_next) + { + res = res->ai_next; + goto again; + } + freeaddrinfo(ressave); +#endif + return soap->socket = SOAP_INVALID_SOCKET; + } + } + k = (SOAP_SOCKLEN_T)sizeof(soap->errnum); + 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; + (void)soap_set_receiver_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); +#ifdef WITH_IPV6 + if (res->ai_next) + { + res = res->ai_next; + goto again; + } + freeaddrinfo(ressave); +#endif + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif +#ifdef WITH_IPV6 + if (res->ai_next) + { + res = res->ai_next; + (void)soap->fclosesocket(soap, sk); + goto again; + } +#endif + if (err && err != SOAP_EINTR) + { + soap->errnum = err; +#ifdef WITH_IPV6 + freeaddrinfo(ressave); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n")); + (void)soap_set_receiver_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + else + { + break; + } + } +#ifdef WITH_IPV6 + soap->peerlen = 0; /* IPv6: already connected so use send() */ + freeaddrinfo(ressave); +#endif + soap->imode &= ~SOAP_ENC_SSL; + soap->omode &= ~SOAP_ENC_SSL; + if (endpoint && !soap_tag_cmp(endpoint, "https:*")) + { +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) +#ifdef WITH_OPENSSL + BIO *bio; +#endif +#ifdef WITH_SYSTEMSSL + gsk_iocallback local_io = { ssl_recv, ssl_send, NULL, NULL, NULL, NULL }; +#endif + int r; + if (soap->proxy_host) + { + soap_mode m = soap->mode; /* preserve settings */ + soap_mode om = soap->omode; /* make sure we only parse HTTP */ + ULONG64 count = soap->count; /* save the content length */ + const char *http_content = soap->http_content; /* save http_content when set */ + const char *http_extra_header = soap->http_extra_header; /* save http_extra_header when set */ + const char *bearer = soap->bearer; /* save bearer when set */ + int status = soap->status; /* save the current status/command */ + int keep_alive = soap->keep_alive; /* save the KA status */ + const char *userid, *passwd; + soap->omode &= ~SOAP_ENC; /* mask IO and ENC */ + soap->omode |= SOAP_IO_BUFFER; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connecting to %s proxy server %s for destination endpoint %s\n", soap->proxy_http_version, soap->proxy_host, endpoint)); +#ifdef WITH_NTLM + if (soap->ntlm_challenge && soap_ntlm_handshake(soap, SOAP_CONNECT, endpoint, host, port)) + { + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif + if (soap_init_send(soap)) + { + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->status = SOAP_CONNECT; + if (!soap->keep_alive) + soap->keep_alive = -1; /* must keep alive */ + soap->error = soap->fpost(soap, endpoint, host, port, NULL, NULL, 0); + if (soap->error || soap_end_send_flush(soap)) + { + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->keep_alive = keep_alive; + soap->omode = om; + om = soap->imode; /* preserve */ + soap->imode &= ~SOAP_ENC; /* mask IO and ENC */ + userid = soap->userid; /* preserve */ + passwd = soap->passwd; /* preserve */ + soap->error = soap->fparse(soap); + if (soap->error) + { + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + soap->status = status; /* restore */ + soap->userid = userid; /* restore */ + soap->passwd = passwd; /* restore */ + soap->imode = om; /* restore */ + soap->count = count; /* restore */ + soap->http_content = http_content; /* restore */ + soap->http_extra_header = http_extra_header; /* restore */ + soap->bearer = bearer; /* restore */ + if (soap_init_send(soap)) + { + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + if (endpoint) + soap_strcpy(soap->endpoint, sizeof(soap->endpoint), endpoint); /* restore */ + soap->mode = m; + } +#ifdef WITH_OPENSSL + ERR_clear_error(); + soap->ssl_flags |= SOAP_SSL_CLIENT; + if (!soap->ctx && (soap->error = soap->fsslauth(soap)) != SOAP_OK) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL required, but no ctx set\n")); + (void)soap->fclosesocket(soap, sk); + soap->error = SOAP_SSL_ERROR; + return soap->socket = SOAP_INVALID_SOCKET; + } + if (!soap->ssl) + { + soap->ssl = SSL_new(soap->ctx); + if (!soap->ssl) + { + (void)soap->fclosesocket(soap, sk); + soap->error = SOAP_SSL_ERROR; + return soap->socket = SOAP_INVALID_SOCKET; + } + } + else + { + SSL_clear(soap->ssl); + } + if (soap->session) + { + if (!strcmp(soap->session_host, host) && soap->session_port == port) + SSL_set_session(soap->ssl, soap->session); + SSL_SESSION_free(soap->session); + soap->session = NULL; + } +#if OPENSSL_VERSION_NUMBER >= 0x1000000aL + if (!(soap->ssl_flags & SOAP_SSLv3)) + { + const char *name = host; + if ((soap->ssl_flags & SOAP_SSL_SNI_HOST_CHECK)) + { + /* do not use IP address with SNI (RFC 6066), perform a host check */ + const size_t MAX_LABEL_LEN = 63; + size_t i; + size_t len = strlen(host); + size_t label_len = 0; + int ip = 1; + for (i = 0; i < len && label_len < MAX_LABEL_LEN; ++i) + { + int c = host[i]; + if (c >= '0' && c <= '9') + { + label_len += 1; + continue; + } + if (i > 0 && i < len - 1) + { + if (c == '-') + { + label_len += 1; + continue; + } + if (c == '.' && host[i + 1] != '.' && host[i - 1] != '-' && host[i + 1] != '-') + { + label_len = 0; + continue; + } + } + if (c >= '\0' && c <= '@') + { + name = NULL; + break; + } + label_len += 1; + ip = 0; + } + if (ip || label_len >= MAX_LABEL_LEN) + name = NULL; + } + if (name != NULL && !SSL_set_tlsext_host_name(soap->ssl, name)) + { + (void)soap_set_receiver_error(soap, "SSL/TLS error", "SNI failed", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } +#elif (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && defined(SSL_CTRL_SET_TLSEXT_HOSTNAME) + if (!SSL_ctrl(soap->ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, (void*)host)) + { + (void)soap_set_receiver_error(soap, "SSL/TLS error", "SNI failed", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif + bio = BIO_new_socket((int)sk, BIO_NOCLOSE); + SSL_set_bio(soap->ssl, bio, bio); + if (soap->connect_timeout || soap->recv_timeout || soap->send_timeout) + { + /* Set SSL connect timeout and set SSL sockets to non-blocking */ + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (soap->connect_timeout > 0 && t < soap->connect_timeout) + t = soap->connect_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + SOAP_SOCKNONBLOCK(sk) + } + else + { + /* Set sockets to blocking */ + retries = 1; + SOAP_SOCKBLOCK(sk) + } + err = SSL_ERROR_NONE; + /* Try connecting until success or timeout */ + do + { + if ((r = SSL_connect(soap->ssl)) <= 0) + { + err = SSL_get_error(soap->ssl, r); + if (err == SSL_ERROR_WANT_CONNECT || err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) + { + int s; + 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, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + if (s == 0 && retries-- <= 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL/TLS connect timeout\n")); + (void)soap_set_receiver_error(soap, "Timeout", "SSL_connect() failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + else + { + soap->errnum = soap_socket_errno; + break; + } + } + } while (!SSL_is_init_finished(soap->ssl)); + if (r <= 0) + { + (void)soap_set_sender_error(soap, soap_ssl_error(soap, r, err), "SSL/TLS handshake failed", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + /* Check server credentials when required */ + if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION)) + { + if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK) + { + (void)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); + (void)soap->fclosesocket(soap, sk); + return soap->socket = 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 = SSL_get_peer_certificate(soap->ssl); + if (!peer) + { + (void)soap_set_sender_error(soap, "SSL/TLS error", "No SSL/TLS certificate was presented by the peer in tcp_connect()", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#if OPENSSL_VERSION_NUMBER < 0x0090800fL + ext_count = X509_get_ext_count(peer); + if (ext_count > 0) + { + int i; + for (i = 0; i < ext_count; i++) + { + X509_EXTENSION *ext = X509_get_ext(peer, i); + const char *ext_str = OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(ext))); + if (ext_str && !strcmp(ext_str, "subjectAltName")) + { + X509V3_EXT_METHOD *meth = (X509V3_EXT_METHOD*)X509V3_EXT_get(ext); + unsigned char *data; + if (!meth) + break; + data = ext->value->data; + if (data) + { +#if OPENSSL_VERSION_NUMBER > 0x00907000L + void *ext_data; + if (meth->it) + ext_data = ASN1_item_d2i(NULL, &data, ext->value->length, ASN1_ITEM_ptr(meth->it)); + else + { +#if OPENSSL_VERSION_NUMBER > 0x0090800fL + ext_data = meth->d2i(NULL, (const unsigned char **)&data, ext->value->length); +#else + ext_data = meth->d2i(NULL, &data, ext->value->length); +#endif + } + if (ext_data) + val = meth->i2v(meth, ext_data, NULL); + 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 + 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 (val) + { + int j; + for (j = 0; j < sk_CONF_VALUE_num(val); j++) + { + CONF_VALUE *nval = sk_CONF_VALUE_value(val, j); + if (nval && nval->name && && (!strcmp(nval->name, "DNS") || !strcmp(nval->name, "IP Address")) && !soap_tag_cmp(host, nval->value)) + { + ok = 1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s match with certificate %s %s\n", host, nval->name, nval->value)); + break; + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s mismatch with certificate %s %s\n", host, nval->name, nval->value)); + } + } + sk_CONF_VALUE_pop_free(val, X509V3_conf_free); + } + } + } + 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 && nval->name && (!strcmp(nval->name, "DNS") || !strcmp(nval->name, "IP Address")) && !soap_tag_cmp(host, nval->value)) + { + ok = 1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s match with certificate %s %s\n", host, nval->name, nval->value)); + break; + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s mismatch with certificate %s %s\n", host, nval->name, nval->value)); + } + } + sk_CONF_VALUE_pop_free(val, X509V3_conf_free); + } +#endif + if (!ok && (subj = X509_get_subject_name(peer)) != 0) + { + int i = -1; + do + { + ASN1_STRING *name; + i = X509_NAME_get_index_by_NID(subj, NID_commonName, i); + if (i == -1) + break; + name = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(subj, i)); + if (name) + { +#if OPENSSL_VERSION_NUMBER < 0x10100000L + const char *tmp = (const char*)ASN1_STRING_data(name); +#else + const char *tmp = (const char*)ASN1_STRING_get0_data(name); +#endif + if (!soap_tag_cmp(host, tmp)) + { + ok = 1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s match with certificate subject %s\n", host, tmp)); + } + else + { + unsigned char *tmp = NULL; + ASN1_STRING_to_UTF8(&tmp, name); + if (tmp) + { + if (!soap_tag_cmp(host, (const char*)tmp)) + { + ok = 1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s match with certificate subject %s\n", host, tmp)); + } + else if (tmp[0] == '*') /* wildcard domain */ + { + const char *t = strchr(host, '.'); + if (t && !soap_tag_cmp(t, (const char*)tmp + 1)) + { + ok = 1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s match with certificate subject %s\n", host, tmp)); + } + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL: host name %s mismatch with certificate %s\n", host, tmp)); + } + OPENSSL_free(tmp); + } + } + } + } while (!ok); + } + X509_free(peer); + if (!ok) + { + (void)soap_set_sender_error(soap, "SSL/TLS error", "SSL/TLS certificate host name mismatch in tcp_connect()", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + } +#endif +#ifdef WITH_GNUTLS + soap->ssl_flags |= SOAP_SSL_CLIENT; + if (!soap->session && (soap->error = soap->fsslauth(soap)) != SOAP_OK) + { + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + gnutls_transport_set_ptr(soap->session, (gnutls_transport_ptr_t)(long)sk); + if (soap->connect_timeout || soap->recv_timeout || soap->send_timeout) + { + /* Set SSL connect timeout and set SSL sockets to non-blocking */ + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (soap->connect_timeout > 0 && t < soap->connect_timeout) + t = soap->connect_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + SOAP_SOCKNONBLOCK(sk) + } + else + { + /* Set sockets to blocking */ + retries = 1; + SOAP_SOCKBLOCK(sk) + } + /* Try connecting until success or timeout */ + while ((r = gnutls_handshake(soap->session))) + { + /* GNUTLS repeat handhake when GNUTLS_E_AGAIN */ + if (r == GNUTLS_E_AGAIN || r == GNUTLS_E_INTERRUPTED) + { + int s; + if (!gnutls_record_get_direction(soap->session)) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + else + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + if (s == 0 && retries-- <= 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL/TLS connect timeout\n")); + (void)soap_set_receiver_error(soap, "Timeout", "SSL_connect() failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + else + { + soap->errnum = soap_socket_errno; + break; + } + } + if (r) + { + (void)soap_set_sender_error(soap, soap_ssl_error(soap, r, 0), "SSL/TLS handshake failed", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION)) + { + const char *s = ssl_verify(soap, host); + if (s) + { + (void)soap->fclosesocket(soap, sk); + soap->error = soap_set_sender_error(soap, "SSL/TLS verify error", s, SOAP_SSL_ERROR); + return soap->socket = SOAP_INVALID_SOCKET; + } + } +#endif +#ifdef WITH_WOLFSSL + soap->ssl_flags |= SOAP_SSL_CLIENT; + if (!soap->session && (soap->error = soap->fsslauth(soap)) != SOAP_OK) + { + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + if (!soap->ssl) + { + soap->ssl = wolfSSL_new(soap->ctx); + if (!soap->ssl) + { + (void)soap->fclosesocket(soap, sk); + soap->error = SOAP_SSL_ERROR; + return soap->socket = SOAP_INVALID_SOCKET; + } +#ifdef HAVE_SECURE_RENEGOTIATION +#warning "Client-side secure renegotiation not recommended, undefine HAVE_SECURE_RENEGOTIATION to disable" + if (wolfSSL_UseSecureRenegotiation(soap->ssl) != SSL_SUCCESS) + { + (void)soap->fclosesocket(soap, sk); + (void)soap_set_receiver_error(soap, "SSL/TLS error", "failed to enable secure renegotiation in soap_ssl_accept()", SOAP_SSL_ERROR); + wolfSSL_free(soap->ssl); + soap->ssl = NULL; + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif + /* Set the expected domain name so that the peer server's can be verified when we connect. */ + if (!(soap->ssl_flags & SOAP_SSL_SKIP_HOST_CHECK)) + { + if (wolfSSL_check_domain_name(soap->ssl, host) != SSL_SUCCESS) + { + (void)soap->fclosesocket(soap, sk); + (void)soap_set_receiver_error(soap, "SSL/TLS error", "wolfSSL_check_domain_name() failed in tcp_connect()", SOAP_TCP_ERROR); + wolfSSL_free(soap->ssl); + soap->ssl = NULL; + return soap->socket = SOAP_INVALID_SOCKET; + } + } + } + wolfSSL_set_fd(soap->ssl, sk); + if (soap->connect_timeout || soap->recv_timeout || soap->send_timeout) + { + /* Set SSL connect timeout and set SSL sockets to non-blocking */ + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (soap->connect_timeout > 0 && t < soap->connect_timeout) + t = soap->connect_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + SOAP_SOCKNONBLOCK(sk) + } + else + { + /* Set sockets to blocking */ + retries = 1; + SOAP_SOCKBLOCK(sk) + } + err = SSL_ERROR_NONE; + /* Try connecting until success or timeout */ + do + { + if ((r = wolfSSL_connect(soap->ssl)) <= 0) + { + err = wolfSSL_get_error(soap->ssl, r); + if (err == SSL_ERROR_WANT_CONNECT || err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) + { + int s; + 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, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + if (s == 0 && retries-- <= 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL/TLS connect timeout\n")); + (void)soap_set_receiver_error(soap, "Timeout", "wolfSSL_connect() failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + else + { + soap->errnum = soap_socket_errno; + break; + } + } + } while (!wolfSSL_is_init_finished(soap->ssl)); + if (r != SSL_SUCCESS) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL_connect/select error in tcp_connect\n")); + (void)soap_set_receiver_error(soap, soap_ssl_error(soap, r, 0), "SSL/TLS handshake failed", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif +#ifdef WITH_SYSTEMSSL + soap->ssl_flags |= SOAP_SSL_CLIENT; + if (!soap->ctx && (soap->error = soap->fsslauth(soap)) != SOAP_OK) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL required, but no ctx set\n")); + (void)soap->fclosesocket(soap, sk); + soap->error = SOAP_SSL_ERROR; + return soap->socket = SOAP_INVALID_SOCKET; + } + if (soap->connect_timeout || soap->recv_timeout || soap->send_timeout) + { + /* Set SSL connect timeout and set SSL sockets to non-blocking */ + int t = soap->recv_timeout > soap->send_timeout ? soap->recv_timeout : soap->send_timeout; + if (soap->connect_timeout > 0 && t < soap->connect_timeout) + t = soap->connect_timeout; + if (t > 0) + retries = 10 * t; + else if (t > -100000) + retries = 1; + else + retries = t/-100000; + SOAP_SOCKNONBLOCK(sk) + } + else + { + /* Set sockets to blocking */ + retries = 1; + SOAP_SOCKBLOCK(sk) + } + r = gsk_secure_socket_open(soap->ctx, &soap->ssl); + if (r == GSK_OK) + r = gsk_attribute_set_numeric_value(soap->ssl, GSK_FD, sk); + if (r == GSK_OK) + r = gsk_attribute_set_buffer(soap->ssl, GSK_KEYRING_LABEL, soap->cafile, 0); /* Certificate label */ + if (r == GSK_OK) + r = gsk_attribute_set_enum(soap->ssl, GSK_SESSION_TYPE, GSK_CLIENT_SESSION); + if (r == GSK_OK) + r = gsk_attribute_set_buffer(soap->ssl, GSK_V3_CIPHER_SPECS_EXPANDED, "0035002F000A", 0); + if (r == GSK_OK) + r = gsk_attribute_set_enum(soap->ssl, GSK_V3_CIPHERS, GSK_V3_CIPHERS_CHAR4); + if (r == GSK_OK) + r = gsk_attribute_set_callback(soap->ssl, GSK_IO_CALLBACK, &local_io); + if (r != GSK_OK) + { + (void)soap_set_receiver_error(soap, gsk_strerror(r), "SYSTEM SSL error in tcp_connect()", SOAP_SSL_ERROR); + return soap->socket = SOAP_INVALID_SOCKET; + } + /* Try connecting until success or timeout */ + while ((r = gsk_secure_socket_init(soap->ssl)) != GSK_OK) + { + if (r == GSK_WOULD_BLOCK_READ || r == GSK_WOULD_BLOCK_WRITE) + { + int s; + if (r == GSK_WOULD_BLOCK_READ) + s = tcp_select(soap, sk, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000); + else + s = tcp_select(soap, sk, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000); + if (s < 0) + break; + if (s == 0 && retries-- <= 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL/TLS connect timeout\n")); + (void)soap_set_receiver_error(soap, "Timeout", "SSL_connect() failed in tcp_connect()", SOAP_TCP_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } + } + else + { + soap->errnum = soap_socket_errno; + break; + } + } + if (r != GSK_OK) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL_connect/select error in tcp_connect\n")); + (void)soap_set_receiver_error(soap, gsk_strerror(r), "SSL/TLS handshake failed", SOAP_SSL_ERROR); + (void)soap->fclosesocket(soap, sk); + return soap->socket = SOAP_INVALID_SOCKET; + } +#endif + soap->imode |= SOAP_ENC_SSL; + soap->omode |= SOAP_ENC_SSL; +#else + (void)soap->fclosesocket(soap, sk); + soap->error = SOAP_SSL_ERROR; + return soap->socket = SOAP_INVALID_SOCKET; +#endif + } + if (soap->recv_timeout || soap->send_timeout) + SOAP_SOCKNONBLOCK(sk) + else + SOAP_SOCKBLOCK(sk) + return sk; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static int +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; + if (!soap_valid_socket(sk)) + { + soap->error = SOAP_EOF; + return -1; + } +#ifndef WIN32 +#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 fd max set size exceeded, use poll() when available */ + if ((int)sk >= (int)FD_SETSIZE) +#endif +#ifdef HAVE_POLL + { +#ifdef WITH_SELF_PIPE + struct pollfd pollfd[2]; + pollfd[1].fd = soap->pipe_fd[0]; + pollfd[1].events = POLLIN; +#else + struct pollfd pollfd[1]; +#endif + pollfd[0].fd = (int)sk; + pollfd[0].events = 0; + if ((flags & SOAP_TCP_SELECT_RCV)) + pollfd[0].events |= POLLIN; + if ((flags & SOAP_TCP_SELECT_SND)) + pollfd[0].events |= POLLOUT; + if ((flags & SOAP_TCP_SELECT_ERR)) + pollfd[0].events |= POLLERR; + if (timeout <= 0) + timeout /= -1000; /* -usec -> ms */ + else + { + retries = timeout - 1; + timeout = 1000; + } + do + { +#ifdef WITH_SELF_PIPE + r = poll(pollfd, 2, timeout); +#else + r = poll(pollfd, 1, timeout); +#endif + if (r < 0 && (soap->errnum = soap_socket_errno) == SOAP_EINTR && eintr > 0) + { + eintr--; + r = 0; + } + else if (retries-- <= 0) + { + break; + } + } while (r == 0); + if (r > 0) + { + r = 0; + if ((flags & SOAP_TCP_SELECT_RCV) && (pollfd[0].revents & POLLIN)) + r |= SOAP_TCP_SELECT_RCV; + if ((flags & SOAP_TCP_SELECT_SND) && (pollfd[0].revents & POLLOUT)) + r |= SOAP_TCP_SELECT_SND; + if ((flags & SOAP_TCP_SELECT_ERR) && (pollfd[0].revents & POLLERR)) + r |= SOAP_TCP_SELECT_ERR; +#ifdef WITH_SELF_PIPE + if ((flags & SOAP_TCP_SELECT_PIP) && (pollfd[1].revents & POLLIN)) + { + char ch; + for (;;) + { + if (read(soap->pipe_fd[0], &ch, 1) == -1) + { + if (soap_socket_errno == SOAP_EAGAIN) + break; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Self pipe read error\n")); + return -1; + } + } + r |= SOAP_TCP_SELECT_PIP; + } +#endif + } + else if (r == 0) + { + soap->errnum = 0; + } + return r; + } +#else + { + soap->error = SOAP_FD_EXCEEDED; + return -1; + } +#endif +#endif + if (timeout > 0) + retries = timeout - 1; + do + { + rfd = sfd = efd = NULL; +#ifdef WITH_SELF_PIPE + if ((flags & SOAP_TCP_SELECT_PIP) || (flags & SOAP_TCP_SELECT_RCV)) + { + rfd = &fd[0]; + FD_ZERO(rfd); + if ((flags & SOAP_TCP_SELECT_PIP)) + FD_SET(soap->pipe_fd[0], rfd); + if ((flags & SOAP_TCP_SELECT_RCV)) + FD_SET(sk, rfd); + } +#else + if ((flags & SOAP_TCP_SELECT_RCV)) + { + rfd = &fd[0]; + FD_ZERO(rfd); + FD_SET(sk, rfd); + } +#endif + 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; + } +#ifdef WITH_SELF_PIPE + r = select((int)(sk > soap->pipe_fd[0] ? sk : soap->pipe_fd[0]) + 1, rfd, sfd, efd, &tv); +#else + r = select((int)sk + 1, rfd, sfd, efd, &tv); +#endif + if (r < 0 && (soap->errnum = soap_socket_errno) == SOAP_EINTR && eintr > 0) + { + eintr--; + r = 0; + } + else if (retries-- <= 0) + { + break; + } + } while (r == 0); + if (r > 0) + { + r = 0; + if ((flags & SOAP_TCP_SELECT_RCV) && FD_ISSET(sk, rfd)) + r |= SOAP_TCP_SELECT_RCV; + if ((flags & SOAP_TCP_SELECT_SND) && FD_ISSET(sk, sfd)) + r |= SOAP_TCP_SELECT_SND; + if ((flags & SOAP_TCP_SELECT_ERR) && FD_ISSET(sk, efd)) + r |= SOAP_TCP_SELECT_ERR; +#ifdef WITH_SELF_PIPE + if ((flags & SOAP_TCP_SELECT_PIP) && FD_ISSET(soap->pipe_fd[0], rfd)) + { + char ch; + for (;;) + { + if (read(soap->pipe_fd[0], &ch, 1) == -1) + { + if (soap_socket_errno == SOAP_EAGAIN) + break; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Self pipe read error\n")); + return -1; + } + } + r |= SOAP_TCP_SELECT_PIP; + } +#endif + } + else if (r == 0) + { + soap->errnum = 0; + } + return r; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static SOAP_SOCKET +tcp_accept(struct soap *soap, SOAP_SOCKET sk, struct sockaddr *addr, int *len) +{ + SOAP_SOCKLEN_T n = (SOAP_SOCKLEN_T)*len; + SOAP_SOCKET s; + (void)soap; + s = accept(sk, addr, &n); +#ifdef WITH_SOCKET_CLOSE_ON_EXIT +#ifdef WIN32 +#ifndef UNDER_CE + SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0); +#endif +#else + fcntl(s, F_SETFD, FD_CLOEXEC); +#endif +#endif + return s; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static int +tcp_disconnect(struct soap *soap) +{ +#ifdef WITH_OPENSSL + if (soap->ssl) + { + int r; + if (soap->session) + { + SSL_SESSION_free(soap->session); + soap->session = NULL; + } + if (*soap->host) + { + soap->session = SSL_get1_session(soap->ssl); + if (soap->session) + { + soap_strcpy(soap->session_host, sizeof(soap->session_host), soap->host); + soap->session_port = soap->port; + } + } + if (soap_valid_socket(soap->socket)) + { + r = SSL_shutdown(soap->ssl); + /* 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_EAGAIN) + { + r = SSL_shutdown(soap->ssl); + break; + } + } + } + if (r == 0 && !soap->fshutdownsocket(soap, soap->socket, SOAP_SHUT_WR)) + { +#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, 5); + if (r <= 0) + { + soap->errnum = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connection lost...\n")); + (void)soap->fclosesocket(soap, soap->socket); + soap->socket = SOAP_INVALID_SOCKET; + ERR_clear_error(); + SSL_free(soap->ssl); + soap->ssl = NULL; + return SOAP_OK; + } +#ifdef WITH_SSL_FULL_SHUTDOWN + if (!SSL_want_read(soap->ssl) || SSL_read(soap->ssl, NULL, 0)) + { + r = SSL_shutdown(soap->ssl); + if (r <= 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shutdown failed: %d\n", SSL_get_error(soap->ssl, r))); + if (soap_valid_socket(soap->socket) && !(soap->omode & SOAP_IO_UDP)) + { + (void)soap->fclosesocket(soap, soap->socket); + soap->socket = SOAP_INVALID_SOCKET; + } + } + } +#endif +#else + r = SSL_shutdown(soap->ssl); + if (r <= 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shutdown failed: %d\n", SSL_get_error(soap->ssl, r))); + if (soap_valid_socket(soap->socket) && !(soap->omode & SOAP_IO_UDP)) + { + (void)soap->fclosesocket(soap, soap->socket); + soap->socket = SOAP_INVALID_SOCKET; + } + } +#endif + } + } + SSL_free(soap->ssl); + soap->ssl = NULL; + ERR_clear_error(); + } +#endif +#ifdef WITH_GNUTLS + if (soap->session) + { + gnutls_bye(soap->session, GNUTLS_SHUT_RDWR); + gnutls_deinit(soap->session); + soap->session = NULL; + } +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl) + { + wolfSSL_free(soap->ssl); + soap->ssl = NULL; + } +#endif +#ifdef WITH_SYSTEMSSL + if (soap->ssl) + { + gsk_secure_socket_shutdown(soap->ssl); + gsk_secure_socket_close(&soap->ssl); + } +#endif + if (soap_valid_socket(soap->socket) && !(soap->omode & SOAP_IO_UDP)) + { + (void)soap->fshutdownsocket(soap, soap->socket, SOAP_SHUT_RDWR); + (void)soap->fclosesocket(soap, soap->socket); + soap->socket = SOAP_INVALID_SOCKET; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static int +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 + +/******************************************************************************/ + +#ifndef WITH_NOIO +static int +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 + +/******************************************************************************/ + +#ifndef WITH_NOIO +SOAP_FMAC1 +SOAP_SOCKET +SOAP_FMAC2 +soap_bind(struct soap *soap, const char *host, int port, int backlog) +{ +#if defined(WITH_IPV6) + struct addrinfo *addrinfo = NULL; + struct addrinfo hints; + struct addrinfo res; + int err; + int set = 1; + int unset = 0; +#elif !defined(WITH_LEAN) + int set = 1; +#endif + if (soap_valid_socket(soap->master)) + { + (void)soap->fclosesocket(soap, soap->master); + soap->master = SOAP_INVALID_SOCKET; + } + soap->socket = SOAP_INVALID_SOCKET; + soap->errnum = 0; + soap->errmode = 1; + if (tcp_init(soap)) + { + (void)soap_set_receiver_error(soap, tcp_error(soap), "TCP init failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } +#ifdef WITH_IPV6 + memset((void*)&hints, 0, sizeof(hints)); + hints.ai_family = soap->bind_inet6 ? AF_INET6 : PF_UNSPEC; +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + hints.ai_socktype = SOCK_DGRAM; + else +#endif + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; + soap->errmode = 2; + err = getaddrinfo(host, soap_int2s(soap, port), &hints, &addrinfo); + if (err || !addrinfo) + { + (void)soap_set_receiver_error(soap, SOAP_GAI_STRERROR(err), "getaddrinfo failed in soap_bind()", SOAP_TCP_ERROR); + if (addrinfo) + freeaddrinfo(addrinfo); + return SOAP_INVALID_SOCKET; + } + res = *addrinfo; + if (soap_memcpy((void*)&soap->peer.storage, sizeof(soap->peer.storage), (const void*)addrinfo->ai_addr, addrinfo->ai_addrlen)) + { + freeaddrinfo(addrinfo); + soap->error = SOAP_EOM; + return SOAP_INVALID_SOCKET; + } + soap->peerlen = addrinfo->ai_addrlen; + res.ai_addr = &soap->peer.addr; + res.ai_addrlen = soap->peerlen; + freeaddrinfo(addrinfo); + soap->master = (int)socket(res.ai_family, res.ai_socktype, res.ai_protocol); +#else +#ifndef WITH_LEAN + if ((soap->omode & SOAP_IO_UDP)) + soap->master = (int)socket(AF_INET, SOCK_DGRAM, 0); + else +#endif + soap->master = (int)socket(AF_INET, SOCK_STREAM, 0); +#endif + soap->errmode = 0; + if (!soap_valid_socket(soap->master)) + { + soap->errnum = soap_socket_errno; + (void)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; +#endif +#ifdef WITH_SOCKET_CLOSE_ON_EXIT +#ifdef WIN32 +#ifndef UNDER_CE + SetHandleInformation((HANDLE)soap->master, HANDLE_FLAG_INHERIT, 0); +#endif +#else + fcntl(soap->master, F_SETFD, 1); +#endif +#endif +#ifndef WITH_LEAN + if (soap->bind_flags && setsockopt(soap->master, SOL_SOCKET, soap->bind_flags, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } +#ifndef UNDER_CE + 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; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + if (soap->sndbuf > 0 && setsockopt(soap->master, SOL_SOCKET, SO_SNDBUF, (char*)&soap->sndbuf, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + if (soap->rcvbuf > 0 && setsockopt(soap->master, SOL_SOCKET, SO_RCVBUF, (char*)&soap->rcvbuf, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } +#ifdef TCP_NODELAY + if (!(soap->omode & SOAP_IO_UDP) && setsockopt(soap->master, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } +#endif +#ifdef TCP_FASTOPEN + if (!(soap->omode & SOAP_IO_UDP) && setsockopt(soap->master, IPPROTO_TCP, TCP_FASTOPEN, (char*)&set, sizeof(int))) + { + /* silently ignore */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "setsockopt TCP_FASTOPEN failed in soap_bind()\n")); + } +#endif +#endif +#endif +#ifdef WITH_IPV6 + if (res.ai_family == AF_INET6 && setsockopt(soap->master, IPPROTO_IPV6, IPV6_V6ONLY, soap->bind_v6only ? (char*)&set : (char*)&unset, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt IPV6_V6ONLY failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + soap->errmode = 0; + if (bind(soap->master, res.ai_addr, (int)res.ai_addrlen)) + { + soap->errnum = soap_socket_errno; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host, bind failed\n")); + (void)soap_closesock(soap); + (void)soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } +#else + soap->peerlen = sizeof(soap->peer.in); + memset((void*)&soap->peer.in, 0, sizeof(soap->peer.in)); + soap->peer.in.sin_family = AF_INET; + soap->errmode = 2; + if (host) + { + if (soap->fresolve(soap, host, &soap->peer.in.sin_addr)) + { + (void)soap_set_receiver_error(soap, tcp_error(soap), "get host by name failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + } + else + { + soap->peer.in.sin_addr.s_addr = htonl(INADDR_ANY); + } + soap->peer.in.sin_port = htons((short)port); + soap->errmode = 0; + if (bind(soap->master, &soap->peer.addr, (int)soap->peerlen)) + { + soap->errnum = soap_socket_errno; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host, bind failed\n")); + (void)soap_closesock(soap); + (void)soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } +#endif + if (!(soap->omode & SOAP_IO_UDP) && listen(soap->master, backlog)) + { + soap->errnum = soap_socket_errno; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host, listen failed\n")); + (void)soap_closesock(soap); + (void)soap_set_receiver_error(soap, tcp_error(soap), "listen failed in soap_bind()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + return soap->master; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_poll(struct soap *soap) +{ +#ifndef WITH_LEAN + int r; + if (soap_valid_socket(soap->socket)) + { + r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_ALL, 0); + if (r > 0 && (r & SOAP_TCP_SELECT_ERR)) + r = -1; + } + else if (soap_valid_socket(soap->master)) + { + r = tcp_select(soap, soap->master, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, 0); + } + else + { + return SOAP_OK; /* OK when no socket! */ + } + if (r > 0) + { + int t; +#ifdef WITH_OPENSSL + if ((soap->imode & SOAP_ENC_SSL) && soap->ssl) + { + if (soap_valid_socket(soap->socket) + && (r & SOAP_TCP_SELECT_SND) + && (!(r & SOAP_TCP_SELECT_RCV) + || SSL_peek(soap->ssl, (char*)&t, 1) > 0)) + return SOAP_OK; + } + else +#endif + { + if (soap_valid_socket(soap->socket) + && (r & SOAP_TCP_SELECT_SND) + && (!(r & SOAP_TCP_SELECT_RCV) + || recv(soap->socket, (char*)&t, 1, MSG_PEEK) > 0)) + return SOAP_OK; + } + } + else if (r < 0) + { + if ((soap_valid_socket(soap->master) && soap_socket_errno != SOAP_EINTR) + || (soap_valid_socket(soap->socket) && soap_socket_errno != SOAP_EINTR)) + return soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_poll()", SOAP_TCP_ERROR); + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_poll: other end down on socket=%d select=%d\n", (int)soap->socket, r)); + return SOAP_EOF; +#else + (void)soap; + return SOAP_OK; +#endif +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_ready(struct soap *soap) +{ +#ifndef WITH_LEAN + int r; + if (!soap_valid_socket(soap->socket)) + return SOAP_OK; /* OK when no socket! */ + r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, 0); + if (r > 0 && (r & SOAP_TCP_SELECT_ERR)) + r = -1; + if (r < 0 && soap_socket_errno != SOAP_EINTR) + return soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_ready()", SOAP_TCP_ERROR); + if (r > 0) + { + char t; +#ifdef WITH_OPENSSL + if ((soap->imode & SOAP_ENC_SSL) && soap->ssl) + { + if (SSL_peek(soap->ssl, &t, 1) > 0) + return SOAP_OK; + } + else +#endif + { + if (recv(soap->socket, &t, 1, MSG_PEEK) > 0) + return SOAP_OK; + } + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_ready: other end not ready to send on socket=%d select=%d\n", (int)soap->socket, r)); + return SOAP_EOF; +#else + (void)soap; + return SOAP_OK; +#endif +} +#endif +/******************************************************************************/ + +#ifndef WITH_NOIO +SOAP_FMAC1 +SOAP_SOCKET +SOAP_FMAC2 +soap_accept(struct soap *soap) +{ + int n = (int)sizeof(soap->peer); + int err; +#ifndef WITH_LEAN + int set = 1; +#endif + soap->error = SOAP_OK; + memset((void*)&soap->peer, 0, sizeof(soap->peer)); + soap->socket = SOAP_INVALID_SOCKET; + soap->errmode = 0; + soap_reset_errno; + soap->errnum = 0; + soap->keep_alive = 0; + if (!soap_valid_socket(soap->master)) + { + (void)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) + { + for (;;) + { + int r; + r = tcp_select(soap, soap->master, SOAP_TCP_SELECT_ALL, soap->accept_timeout); + if (r > 0) + break; + if (!r) + { + (void)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) + { + (void)soap_closesock(soap); + (void)soap_set_receiver_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR); + return SOAP_INVALID_SOCKET; + } + } + } + } + n = (int)sizeof(soap->peer); + soap->socket = soap->faccept(soap, soap->master, &soap->peer.addr, &n); + soap->peerlen = (size_t)n; + if (soap_valid_socket(soap->socket)) + { +#ifdef WITH_IPV6 + char port[16]; + struct addrinfo *res = NULL; + struct addrinfo hints; + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV; + getnameinfo(&soap->peer.addr, n, soap->host, sizeof(soap->host), port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV); + soap->ip = 0; + soap->ip6[0] = 0; + soap->ip6[1] = 0; + soap->ip6[2] = 0; + soap->ip6[3] = 0; + if (getaddrinfo(soap->host, NULL, &hints, &res) == 0 && res) + { + struct sockaddr_storage result; + memset((void*)&result, 0, sizeof(result)); + (void)soap_memcpy(&result, sizeof(result), res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); + if (result.ss_family == AF_INET6) + { + struct sockaddr_in6 *addr = (struct sockaddr_in6*)&result; + struct in6_addr *inaddr = &addr->sin6_addr; + int i; + for (i = 0; i < 16; i++) + soap->ip6[i/4] = (soap->ip6[i/4] << 8) + inaddr->s6_addr[i]; + } + else if (result.ss_family == AF_INET) + { + struct sockaddr_in *addr = (struct sockaddr_in*)&result; + soap->ip = ntohl(addr->sin_addr.s_addr); + soap->ip6[2] = 0xFFFF; + soap->ip6[3] = soap->ip; + } + } + soap->port = soap_strtol(port, NULL, 10); +#else + soap->ip = ntohl(soap->peer.in.sin_addr.s_addr); + soap->ip6[0] = 0; + soap->ip6[1] = 0; + soap->ip6[2] = 0xFFFF; + soap->ip6[3] = soap->ip; + (SOAP_SNPRINTF(soap->host, sizeof(soap->host), 80), "%u.%u.%u.%u", (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF); + soap->port = (int)ntohs(soap->peer.in.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", (int)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; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in soap_accept()", SOAP_TCP_ERROR); + (void)soap_closesock(soap); + return SOAP_INVALID_SOCKET; + } + } + if ((soap->accept_flags & ~SO_LINGER) && setsockopt(soap->socket, SOL_SOCKET, soap->accept_flags & ~SO_LINGER, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_accept()", SOAP_TCP_ERROR); + (void)soap_closesock(soap); + return SOAP_INVALID_SOCKET; + } +#ifndef UNDER_CE + if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt(soap->socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_accept()", SOAP_TCP_ERROR); + (void)soap_closesock(soap); + return SOAP_INVALID_SOCKET; + } + if (soap->sndbuf > 0 && setsockopt(soap->socket, SOL_SOCKET, SO_SNDBUF, (char*)&soap->sndbuf, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_accept()", SOAP_TCP_ERROR); + (void)soap_closesock(soap); + return SOAP_INVALID_SOCKET; + } + if (soap->rcvbuf > 0 && setsockopt(soap->socket, SOL_SOCKET, SO_RCVBUF, (char*)&soap->rcvbuf, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_accept()", SOAP_TCP_ERROR); + (void)soap_closesock(soap); + return SOAP_INVALID_SOCKET; + } +#ifdef TCP_NODELAY + if (setsockopt(soap->socket, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int))) + { + soap->errnum = soap_socket_errno; + (void)soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_accept()", SOAP_TCP_ERROR); + (void)soap_closesock(soap); + return SOAP_INVALID_SOCKET; + } +#endif +#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; + 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; + (void)soap_set_receiver_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR); + (void)soap_closesock(soap); + return SOAP_INVALID_SOCKET; + } + } +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_closesock(struct soap *soap) +{ + int status = soap->error; + int err = SOAP_OK; + soap->part = SOAP_END; +#ifndef WITH_LEANER + if (status && status < 200) /* attachment state is not to be trusted */ + { + soap->mime.first = NULL; + soap->mime.last = NULL; + soap->dime.first = NULL; + soap->dime.last = NULL; + } +#endif + if (soap->fdisconnect) + err = soap->fdisconnect(soap); + if (err || status == SOAP_EOF || status == SOAP_TCP_ERROR || status == SOAP_SSL_ERROR || !soap->keep_alive) + { + soap->keep_alive = 0; + if (soap->fclose && (soap->error = soap->fclose(soap)) != SOAP_OK) + return soap->error; + if (err) + return soap->error = err; + } +#ifdef WITH_ZLIB + 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; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_force_closesock(struct soap *soap) +{ + soap->keep_alive = 0; + if (soap_valid_socket(soap->socket) && soap->fclosesocket) + { + (void)soap->fclosesocket(soap, soap->socket); + soap->socket = SOAP_INVALID_SOCKET; + } + return soap->error; +} + +/******************************************************************************/ + +#ifdef WITH_SELF_PIPE +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_close_connection(struct soap *soap) +{ + if (soap_valid_socket(soap->socket)) + write(soap->pipe_fd[1], "1", 1); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_cleanup(struct soap *soap) +{ + soap_done(soap); +#ifdef WIN32 + if (!tcp_done) + return; + tcp_done = 0; + WSACleanup(); +#endif +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_done(struct soap *soap) +{ +#ifdef SOAP_DEBUG + int i; +#endif + if (soap_check_state(soap)) + return; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Done with context%s\n", soap->state == SOAP_COPY ? " copy" : "")); + soap_free_temp(soap); +#ifdef SOAP_DEBUG + if (soap->clist) + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Warning: managed C++ data was not deallocated with soap_destroy() from the heap managed by context %p\n", (void*)soap)); + if (soap->alist) + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Warning: managed C data was not deallocated with soap_end() from the heap managed by context %p\n", (void*)soap)); +#endif + soap->alist = NULL; + while (soap->clist) + { + struct soap_clist *p = soap->clist->next; + SOAP_FREE(soap, soap->clist); + soap->clist = p; + } + if (soap->state == SOAP_INIT) + soap->omode &= ~SOAP_IO_UDP; /* to force close the socket */ + soap->keep_alive = 0; /* to force close the socket */ + if (soap->master == soap->socket) /* do not close twice */ + soap->master = SOAP_INVALID_SOCKET; + (void)soap_closesock(soap); +#ifdef WITH_COOKIES + soap_free_cookies(soap); +#endif + while (soap->plugins) + { + struct soap_plugin *p = soap->plugins->next; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Removing plugin '%s'\n", soap->plugins->id)); + if (soap->plugins->fcopy || soap->state == SOAP_INIT) + soap->plugins->fdelete(soap, soap->plugins); + SOAP_FREE(soap, soap->plugins); + soap->plugins = p; + } + soap->fplugin = fplugin; +#ifndef WITH_NOHTTP + soap->fpost = http_post; + soap->fget = http_get; + soap->fput = http_put; + soap->fpatch = http_patch; + soap->fdel = http_del; + soap->fopt = http_200; + soap->fhead = http_200; + soap->fform = NULL; + soap->fposthdr = http_post_header; + soap->fresponse = http_response; + soap->fparse = http_parse; + soap->fparsehdr = http_parse_header; +#endif + soap->fheader = NULL; +#ifndef WITH_NOIO +#ifndef WITH_IPV6 + soap->fresolve = tcp_gethost; +#else + soap->fresolve = NULL; +#endif + soap->faccept = tcp_accept; + soap->fopen = tcp_connect; + soap->fclose = tcp_disconnect; + soap->fclosesocket = tcp_closesocket; + soap->fshutdownsocket = tcp_shutdownsocket; + soap->fsend = fsend; + soap->frecv = frecv; + soap->fpoll = soap_poll; +#else + soap->fopen = NULL; + soap->fclose = NULL; + soap->fpoll = NULL; +#endif +#ifndef WITH_LEANER + soap->fsvalidate = NULL; + soap->fwvalidate = NULL; + 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; + soap->fencoding = NULL; + soap->fserveloop = NULL; +#ifdef WITH_OPENSSL + if (soap->session) + { + SSL_SESSION_free(soap->session); + soap->session = NULL; + } +#endif + if (soap->state == SOAP_INIT) + { + if (soap_valid_socket(soap->master)) + { + (void)soap->fclosesocket(soap, soap->master); + soap->master = SOAP_INVALID_SOCKET; + } + } +#ifdef WITH_OPENSSL + if (soap->ssl) + { + SSL_free(soap->ssl); + soap->ssl = NULL; + } + if (soap->state == SOAP_INIT) + { + if (soap->ctx) + { + SSL_CTX_free(soap->ctx); + soap->ctx = NULL; + } + } + ERR_clear_error(); +# if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + /* OpenSSL libraries handle thread init and deinit */ +# elif OPENSSL_VERSION_NUMBER >= 0x10000000L + ERR_remove_thread_state(NULL); +# else + ERR_remove_state(0); +# endif +#endif +#ifdef WITH_GNUTLS + if (soap->state == SOAP_INIT) + { + if (soap->xcred) + { + gnutls_certificate_free_credentials(soap->xcred); + soap->xcred = NULL; + } + if (soap->acred) + { + gnutls_anon_free_client_credentials(soap->acred); + soap->acred = NULL; + } + if (soap->cache) + { + gnutls_priority_deinit(soap->cache); + soap->cache = NULL; + } + if (soap->dh_params) + { + gnutls_dh_params_deinit(soap->dh_params); + soap->dh_params = NULL; + } +# if GNUTLS_VERSION_NUMBER < 0x030300 + if (soap->rsa_params) + { + gnutls_rsa_params_deinit(soap->rsa_params); + soap->rsa_params = NULL; + } +#endif + } + if (soap->session) + { + gnutls_deinit(soap->session); + soap->session = NULL; + } +#endif +#ifdef WITH_WOLFSSL + if (soap->ssl) + { + wolfSSL_free(soap->ssl); + soap->ssl = NULL; + } + if (soap->state == SOAP_INIT) + { + if (soap->ctx) + { + wolfSSL_CTX_free(soap->ctx); + soap->ctx = NULL; + } + } +#endif +#ifdef WITH_SYSTEMSSL + if (soap->ssl) + gsk_secure_socket_close(&soap->ssl); + if (soap->state == SOAP_INIT) + if (soap->ctx) + gsk_environment_close(&soap->ctx); +#endif +#ifdef WITH_C_LOCALE + SOAP_FREELOCALE(soap); +#endif +#ifdef WITH_ZLIB + if (soap->d_stream) + { + SOAP_FREE(soap, soap->d_stream); + soap->d_stream = NULL; + } + if (soap->z_buf) + { + SOAP_FREE(soap, soap->z_buf); + soap->z_buf = NULL; + } +#endif +#ifdef SOAP_DEBUG + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free logfiles\n")); + for (i = 0; i < SOAP_MAXLOGS; i++) + { + soap_close_logfile(soap, i); + if (soap->logfile[i]) + { + SOAP_FREE_UNMANAGED(soap->logfile[i]); + soap->logfile[i] = NULL; + } + } +#endif +#ifdef WITH_SELF_PIPE + close(soap->pipe_fd[0]); + close(soap->pipe_fd[1]); +#endif +#ifdef SOAP_MEM_DEBUG + soap_free_mht(soap); +#endif + soap->state = SOAP_NONE; +} + +/******************************************************************************\ + * + * HTTP + * +\******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_parse(struct soap *soap) +{ + char header[SOAP_HDRLEN], *s; + int err = SOAP_OK; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Waiting for HTTP request/response...\n")); + soap->fform = NULL; + *soap->endpoint = '\0'; + soap->bearer = 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->cors_origin = NULL; + soap->cors_method = NULL; + soap->cors_header = NULL; + do + { + 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; + } + s = strchr(soap->msgbuf, ' '); + if (s) + { + soap->status = (unsigned short)soap_strtoul(s, &s, 10); + if (!soap_coblank((soap_wchar)*s)) + soap->status = 0; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP status: %s\n", soap->msgbuf)); + for (;;) + { + if (soap_getline(soap, header, SOAP_HDRLEN)) + { + if (soap->error == SOAP_EOF) + { + soap->error = SOAP_OK; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "EOF in HTTP header, try to continue anyway\n")); + break; + } + return soap->error; + } + if (!*header) + break; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP header: %s\n", header)); + s = strchr(header, ':'); + if (s) + { + char *t; + *s = '\0'; + while (*++s && *s <= 32) + continue; + t = s + strlen(s) - 1; + while (t > s && *t <= 32) + t--; + if (t > s && *s == '"' && *t == '"') + s++,t--; + t[1] = '\0'; + soap->error = soap->fparsehdr(soap, header, s); + if (soap->error) + { + if (soap->error < SOAP_STOP) + return soap->error; + err = soap->error; + soap->error = SOAP_OK; + } + } + } + } while (soap->status == 100); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Finished HTTP header parsing, status = %d\n", soap->status)); + s = strstr(soap->msgbuf, "HTTP/"); + if (s && s[5] == '1' && s[6] == '.' && s[7] == '0') + { + soap->keep_alive = 0; /* HTTP 1.0 does not support keep-alive */ + if (soap->status == 0 && (soap->omode & SOAP_IO) == SOAP_IO_CHUNK) /* soap->status == 0 for HTTP request */ + soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE; /* HTTP 1.0 does not support chunked transfers */ + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Keep alive connection = %d\n", soap->keep_alive)); + if (soap->status == 0) + { + size_t l = 0; + if (s) + { + if (!strncmp(soap->msgbuf, "POST ", l = 5)) + soap->status = SOAP_POST; + else if (!strncmp(soap->msgbuf, "GET ", l = 4)) + soap->status = SOAP_GET; + else if (!strncmp(soap->msgbuf, "PUT ", l = 4)) + soap->status = SOAP_PUT; + else if (!strncmp(soap->msgbuf, "PATCH ", l = 4)) + soap->status = SOAP_PATCH; + else if (!strncmp(soap->msgbuf, "DELETE ", l = 7)) + soap->status = SOAP_DEL; + else if (!strncmp(soap->msgbuf, "HEAD ", l = 5)) + soap->status = SOAP_HEAD; + else if (!strncmp(soap->msgbuf, "OPTIONS ", l = 8)) + soap->status = SOAP_OPTIONS; + } + if (s && soap->status) + { + size_t m, n, k; + int r; + while (soap->msgbuf[l] && soap_coblank((soap_wchar)soap->msgbuf[l])) + l++; + m = strlen(soap->endpoint); + n = m + (s - soap->msgbuf) - l - 1; + if (n >= sizeof(soap->endpoint)) + n = sizeof(soap->endpoint) - 1; + if (m > n) + m = n; + k = n - m + 1; + if (k >= sizeof(soap->path)) + k = sizeof(soap->path) - 1; + while (k > 0 && soap_coblank((soap_wchar)soap->msgbuf[l + k - 1])) + k--; + if (soap_strncpy(soap->path, sizeof(soap->path), soap->msgbuf + l, k)) + return soap->error = 414; + if (*soap->path && *soap->path != '/') + r = soap_strncpy(soap->endpoint, sizeof(soap->endpoint), soap->path, k); + else + r = soap_strncat(soap->endpoint, sizeof(soap->endpoint), soap->path, k); + if (r) + return soap->error = 414; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Target endpoint='%s' path='%s'\n", soap->endpoint, soap->path)); + if (err) + return soap->error = err; + } + else if (err) + { + return soap->error = err; + } + else if (s) + { + return soap->error = 405; + } + return SOAP_OK; + } + if ((soap->status >= 200 && soap->status <= 299) /* OK, Accepted, etc */ + || soap->status == 400 /* Bad Request */ + || soap->status == 500) /* Internal Server Error */ + return soap->error = SOAP_OK; + return soap->error = soap->status; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_parse_header(struct soap *soap, const char *key, const char *val) +{ + if (!soap_tag_cmp(key, "Host")) + { +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) + if ((soap->imode & SOAP_ENC_SSL)) + soap_strcpy(soap->endpoint, sizeof(soap->endpoint), "https://"); + else +#endif + soap_strcpy(soap->endpoint, sizeof(soap->endpoint), "http://"); + if (soap_strncat(soap->endpoint, sizeof(soap->endpoint), val, sizeof(soap->endpoint) - 9)) + return soap->error = SOAP_HDR; + } +#ifndef WITH_LEANER + else if (!soap_tag_cmp(key, "Content-Type")) + { + const char *action; + soap->http_content = soap_strdup(soap, val); + if (soap_http_header_attribute(soap, val, "application/dime")) + soap->imode |= SOAP_ENC_DIME; + else if (soap_http_header_attribute(soap, val, "multipart/related") + || soap_http_header_attribute(soap, val, "multipart/form-data")) + { + const char *type; + soap->mime.boundary = soap_strdup(soap, soap_http_header_attribute(soap, val, "boundary")); + soap->mime.start = soap_strdup(soap, soap_http_header_attribute(soap, val, "start")); + soap->imode |= SOAP_ENC_MIME; + type = soap_http_header_attribute(soap, val, "type"); + if (type && !strcmp(type, "application/xop+xml")) + soap->imode |= SOAP_ENC_MTOM; + } + action = soap_http_header_attribute(soap, val, "action"); + if (action) + { + if (*action == '"') + { + soap->action = soap_strdup(soap, action + 1); + if (soap->action && *soap->action) + soap->action[strlen(soap->action) - 1] = '\0'; + } + else + soap->action = soap_strdup(soap, action); + } + } +#endif + else if (!soap_tag_cmp(key, "Content-Length")) + { + soap->length = soap_strtoull(val, NULL, 10); + if (soap->length == 0) + soap->body = 0; + } + else if (!soap_tag_cmp(key, "Content-Encoding")) + { + if (!soap_tag_cmp(val, "deflate")) +#ifdef WITH_ZLIB + soap->zlib_in = SOAP_ZLIB_DEFLATE; +#else + return SOAP_ZLIB_ERROR; +#endif + else if (!soap_tag_cmp(val, "gzip")) +#ifdef WITH_GZIP + soap->zlib_in = SOAP_ZLIB_GZIP; +#else + return SOAP_ZLIB_ERROR; +#endif + } +#ifdef WITH_ZLIB + else if (!soap_tag_cmp(key, "Accept-Encoding")) + { +#ifdef WITH_GZIP + if (strchr(val, '*') || soap_http_header_attribute(soap, val, "gzip")) + soap->zlib_out = SOAP_ZLIB_GZIP; + else +#endif + if (strchr(val, '*') || soap_http_header_attribute(soap, val, "deflate")) + soap->zlib_out = SOAP_ZLIB_DEFLATE; + else + soap->zlib_out = SOAP_ZLIB_NONE; + } +#endif + else if (!soap_tag_cmp(key, "Transfer-Encoding")) + { + soap->imode &= ~SOAP_IO; + if (!soap_tag_cmp(val, "chunked")) + soap->imode |= SOAP_IO_CHUNK; + } + else if (!soap_tag_cmp(key, "Connection")) + { + if (!soap_tag_cmp(val, "close")) + soap->keep_alive = 0; + } +#if !defined(WITH_LEAN) || defined(WITH_NTLM) + 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, "Bearer *")) + { + soap->bearer = soap_strdup(soap, val + 7); + } + else if (!soap_tag_cmp(val, "Basic *")) + { + int n; + char *s; + soap_base642s(soap, val + 6, soap->tmpbuf, sizeof(soap->tmpbuf) - 1, &n); + soap->tmpbuf[n] = '\0'; + s = strchr(soap->tmpbuf, ':'); + if (s) + { + *s = '\0'; + soap->userid = soap_strdup(soap, soap->tmpbuf); + soap->passwd = soap_strdup(soap, s + 1); + } + } + } + else if (!soap_tag_cmp(key, "WWW-Authenticate") || !soap_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_http_header_attribute(soap, val + 6, "realm")); + } + else if (!soap_tag_cmp(key, "Expect")) + { + if (!soap_tag_cmp(val, "100-continue")) + { + if ((soap->error = soap->fposthdr(soap, "HTTP/1.1 100 Continue", NULL)) != SOAP_OK + || (soap->error = soap->fposthdr(soap, NULL, NULL)) != SOAP_OK) + return soap->error; + } + } +#endif + else if (!soap_tag_cmp(key, "SOAPAction")) + { + if (*val == '"') + { + soap->action = soap_strdup(soap, val + 1); + if (*soap->action) + soap->action[strlen(soap->action) - 1] = '\0'; + } + else + soap->action = soap_strdup(soap, val); + } + else if (!soap_tag_cmp(key, "Location")) + { + soap_strcpy(soap->endpoint, sizeof(soap->endpoint), val); + } + else if (!soap_tag_cmp(key, "X-Forwarded-For")) + { + soap->proxy_from = soap_strdup(soap, val); + } + else if (!soap_tag_cmp(key, "Origin")) + { + soap->origin = soap_strdup(soap, val); + soap->cors_origin = soap->cors_allow; + } + else if (!soap_tag_cmp(key, "Access-Control-Request-Method")) + { + soap->cors_method = soap_strdup(soap, val); + } + else if (!soap_tag_cmp(key, "Access-Control-Request-Headers")) + { + soap->cors_header = soap_strdup(soap, val); + } +#ifdef WITH_COOKIES + else if (!soap_tag_cmp(key, "Cookie") + || !soap_tag_cmp(key, "Cookie2") + || !soap_tag_cmp(key, "Set-Cookie") + || !soap_tag_cmp(key, "Set-Cookie2")) + { + soap_getcookies(soap, val); + } +#endif + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER) +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_http_header_attribute(struct soap *soap, const char *line, const char *key) +{ + const char *s = line; + if (s) + { + while (*s) + { + short flag; + s = soap_decode_key(soap->tmpbuf, sizeof(soap->tmpbuf), s); + flag = soap_tag_cmp(soap->tmpbuf, key); + s = soap_decode_val(soap->tmpbuf, sizeof(soap->tmpbuf), s); + if (!flag) + return soap->tmpbuf; + } + } + return NULL; +} +#endif + +/******************************************************************************/ + +#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER) +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_decode_key(char *buf, size_t len, const char *val) +{ + return soap_decode(buf, len, val, "=,;"); +} +#endif + +/******************************************************************************/ + +#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER) +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_decode_val(char *buf, size_t len, const char *val) +{ + if (*val != '=') + { + *buf = '\0'; + return val; + } + return soap_decode(buf, len, val + 1, ",;"); +} +#endif + +/******************************************************************************/ + +#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER) +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; + if (!buf || !val || !sep || len == 0) + return val; + for (s = val; *s; s++) + if (*s != ' ' && *s != '\t' && !strchr(sep, *s)) + break; + if (*s == '"') + { + s++; + while (*s && *s != '"' && i-- > 1) + *t++ = *s++; + } + else + { + while (*s && !strchr(sep, *s) && i-- > 1) + { + 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 static checkers that get confused */ + *t = '\0'; + while (*s && !strchr(sep, *s)) + s++; + return s; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static const char* +http_error(struct soap *soap, int status) +{ + const char *msg = SOAP_STR_EOS; + (void)soap; + (void)status; +#ifndef WITH_LEAN + msg = soap_code_str(h_http_error_codes, status); + if (!msg) + msg = SOAP_STR_EOS; +#endif + return msg; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_get(struct soap *soap) +{ + (void)soap; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP GET request\n")); + return SOAP_GET_METHOD; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_put(struct soap *soap) +{ + (void)soap; + return SOAP_PUT_METHOD; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_patch(struct soap *soap) +{ + (void)soap; + return SOAP_PATCH_METHOD; +} +#endif +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_del(struct soap *soap) +{ + (void)soap; + return SOAP_DEL_METHOD; +} +#endif +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_200(struct soap *soap) +{ + if (soap->origin && soap->cors_method) /* CORS Origin and Access-Control-Request-Method headers */ + { + soap->cors_origin = soap->cors_allow; /* modify this code or hook your own soap->fopt() callback with logic */ + soap->cors_methods = "GET, PUT, PATCH, POST, HEAD, OPTIONS"; + soap->cors_headers = soap->cors_header; + } + return soap_send_empty_response(soap, 200); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_post(struct soap *soap, const char *endpoint, const char *host, int port, const char *path, const char *action, ULONG64 count) +{ + const char *s; + int err; + size_t l; + switch (soap->status) + { + case SOAP_GET: + s = "GET"; + break; + case SOAP_PUT: + s = "PUT"; + break; + case SOAP_PATCH: + s = "PATCH"; + break; + case SOAP_DEL: + s = "DELETE"; + break; + case SOAP_CONNECT: + s = "CONNECT"; + break; + case SOAP_HEAD: + s = "HEAD"; + break; + case SOAP_OPTIONS: + s = "OPTIONS"; + break; + default: + s = "POST"; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP %s to %s\n", s, endpoint ? endpoint : "(null)")); + if (!endpoint || (soap_tag_cmp(endpoint, "http:*") && soap_tag_cmp(endpoint, "https:*") && soap_tag_cmp(endpoint, "httpg:*"))) + return SOAP_OK; + /* set l to prevent overruns ('host' and 'soap->host' are substrings of 'endpoint') */ + l = strlen(endpoint) + strlen(soap->http_version) + 80; + if (l > sizeof(soap->tmpbuf)) + return soap->error = SOAP_EOM; + if (soap->status == SOAP_CONNECT) + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l), "%s %s:%d HTTP/%s", s, soap->host, soap->port, soap->http_version); + else if (soap->proxy_host && endpoint) + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l), "%s %s HTTP/%s", s, endpoint, soap->http_version); + else + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l), "%s /%s HTTP/%s", s, (*path == '/' ? path + 1 : path), soap->http_version); + err = soap->fposthdr(soap, soap->tmpbuf, NULL); + if (err) + return err; +#if defined(WITH_OPENSSL) || defined(WITH_WOLFSSL) + if ((soap->ssl && port != 443) || (!soap->ssl && port != 80)) +#else + if (port != 80) +#endif + { +#ifdef WITH_IPV6 + if (*host != '[' && strchr(host, ':')) + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l), "[%s]:%d", host, port); /* RFC 2732 */ + else +#endif + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l), "%s:%d", host, port); + } + else + { +#ifdef WITH_IPV6 + if (*host != '[' && strchr(host, ':')) + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l), "[%s]", host); /* RFC 2732 */ + else +#endif + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), host); + } + err = soap->fposthdr(soap, "Host", soap->tmpbuf); + if (err) + return err; + err = soap->fposthdr(soap, "User-Agent", "gSOAP/2.8"); + if (err) + return err; + if (soap->origin) + { + err = soap->fposthdr(soap, "Origin", soap->origin); + if (err) + return err; + if (soap->status == SOAP_OPTIONS) + { + err = soap->fposthdr(soap, "Access-Control-Request-Method", soap->cors_method ? soap->cors_method : "POST"); + if (err) + return err; + if (soap->cors_header) + { + err = soap->fposthdr(soap, "Access-Control-Request-Headers", soap->cors_header); + if (err) + return err; + } + } + } + err = soap_puthttphdr(soap, SOAP_OK, count); + if (err) + return err; +#ifndef WITH_LEANER + if ((soap->imode & SOAP_ENC_MTOM)) + { + err = soap->fposthdr(soap, "Accept", "multipart/related,application/xop+xml,*/*;q=0.8"); + if (err) + return err; + } +#endif +#ifdef WITH_ZLIB +#ifdef WITH_GZIP + err = soap->fposthdr(soap, "Accept-Encoding", "gzip,deflate"); +#else + err = soap->fposthdr(soap, "Accept-Encoding", "deflate"); +#endif + if (err) + return err; +#endif +#if !defined(WITH_LEAN) || defined(WITH_NTLM) + if (soap->bearer) + { + l = strlen(soap->bearer); + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l + 7), "Bearer %s", soap->bearer); + err = soap->fposthdr(soap, "Authorization", soap->tmpbuf); + if (err) + return err; + } +#ifdef WITH_NTLM + if (soap->ntlm_challenge) + { + l = strlen(soap->ntlm_challenge); + if (l) + { + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), l + 5), "NTLM %s", soap->ntlm_challenge); + if (soap->proxy_host) + { + err = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf); + if (err) + return err; + } + else + { + err = soap->fposthdr(soap, "Authorization", soap->tmpbuf); + if (err) + return err; + } + } + } + else + { +#endif + if (soap->userid && soap->passwd) + { + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), "Basic "); + (SOAP_SNPRINTF(soap->tmpbuf + 262, sizeof(soap->tmpbuf) - 262, strlen(soap->userid) + strlen(soap->passwd) + 1), "%s:%s", soap->userid, soap->passwd); + soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, (int)strlen(soap->tmpbuf + 262)); + err = soap->fposthdr(soap, "Authorization", soap->tmpbuf); + if (err) + return err; + } + if (soap->proxy_userid && soap->proxy_passwd) + { + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), "Basic "); + (SOAP_SNPRINTF(soap->tmpbuf + 262, sizeof(soap->tmpbuf) - 262, strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) + 1), "%s:%s", soap->proxy_userid, soap->proxy_passwd); + soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, (int)strlen(soap->tmpbuf + 262)); + err = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf); + if (err) + return err; + } +#ifdef WITH_NTLM + } +#endif +#endif +#ifdef WITH_COOKIES +#if defined(WITH_OPENSSL) || defined(WITH_WOLFSSL) + if (soap_putcookies(soap, host, path, soap->ssl != NULL)) + return soap->error; +#else + if (soap_putcookies(soap, host, path, 0)) + return soap->error; +#endif +#endif + if (action && soap->status != SOAP_GET && soap->status != SOAP_DEL) + { + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(action) + 2), "\"%s\"", action); + err = soap->fposthdr(soap, "SOAPAction", soap->tmpbuf); + if (err) + return err; + } + return soap->fposthdr(soap, NULL, NULL); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_send_header(struct soap *soap, const char *s) +{ + const char *t; + do + { + t = strchr(s, '\n'); /* disallow \n in HTTP headers */ + if (!t) + t = s + strlen(s); + if (soap_send_raw(soap, s, t - s)) + return soap->error; + s = t + 1; + } while (*t); + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_post_header(struct soap *soap, const char *key, const char *val) +{ + if (key) + { + if (http_send_header(soap, key)) + return soap->error; + if (val && (soap_send_raw(soap, ": ", 2) || http_send_header(soap, val))) + return soap->error; + } + return soap_send_raw(soap, "\r\n", 2); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +static int +http_response(struct soap *soap, int status, ULONG64 count) +{ + int err; + char http[32]; + int code = status; + const char *line; +#ifdef WMW_RPM_IO + if (soap->rpmreqid) + httpOutputEnable(soap->rpmreqid); + if (soap->rpmreqid + || soap_valid_socket(soap->master) + || soap_valid_socket(soap->socket) + || soap->recvfd != 0 + || soap->sendfd != 1 + || soap->os) /* RPM behaves as if standalone */ +#else + if (soap_valid_socket(soap->master) + || soap_valid_socket(soap->socket) +#ifndef UNDER_CE + || soap->recvfd != 0 + || soap->sendfd != 1 +#else + || soap->recvfd != stdin + || soap->sendfd != stdout +#endif + || soap->os) /* standalone server application (over sockets), not CGI (over stdin/out) */ +#endif + (SOAP_SNPRINTF(http, sizeof(http), strlen(soap->http_version) + 5), "HTTP/%s", soap->http_version); + else + soap_strcpy(http, sizeof(http), "Status:"); + if (status >= SOAP_FILE && status < SOAP_FILE + 600) + { + code = status - SOAP_FILE; + if (code == 0) + code = 200; + } + else if (!status || status == SOAP_HTML) + { + 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) + code = 405; + else if (soap->version == 2 && (!s || !strcmp(s, "SOAP-ENV:Sender"))) + code = 400; + else + code = 500; + } + line = http_error(soap, code); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "HTTP Status = %d %s\n", code, line)); + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), sizeof(http) + 22 + strlen(line)), "%s %d %s", http, code, line); + err = soap->fposthdr(soap, soap->tmpbuf, NULL); + if (err) + return err; +#ifndef WITH_LEAN + if (status == 401) + { + (SOAP_SNPRINTF_SAFE(soap->tmpbuf, sizeof(soap->tmpbuf)), "Basic realm=\"%s\"", (soap->authrealm && strlen(soap->authrealm) + 14 < sizeof(soap->tmpbuf)) ? soap->authrealm : "gSOAP Web Service"); + err = soap->fposthdr(soap, "WWW-Authenticate", soap->tmpbuf); + if (err) + return err; + } + else if ((status >= 301 && status <= 303) || status == 307) + { + err = soap->fposthdr(soap, "Location", soap->endpoint); + if (err) + return err; + } +#endif + err = soap->fposthdr(soap, "Server", "gSOAP/2.8"); + if (err) + return err; + if (soap->cors_origin) + { + err = soap->fposthdr(soap, "Access-Control-Allow-Origin", soap->cors_origin); + if (err) + return err; + err = soap->fposthdr(soap, "Access-Control-Allow-Credentials", "true"); + if (err) + return err; + if (soap->cors_methods) + { + err = soap->fposthdr(soap, "Access-Control-Allow-Methods", soap->cors_methods); + if (err) + return err; + if (soap->cors_headers) + { + err = soap->fposthdr(soap, "Access-Control-Allow-Headers", soap->cors_headers); + if (err) + return err; + } + } + } + if (soap->x_frame_options) + { + err = soap->fposthdr(soap, "X-Frame-Options", soap->x_frame_options); + if (err) + return err; + } + soap->cors_origin = NULL; + soap->cors_methods = NULL; + soap->cors_headers = NULL; + err = soap_puthttphdr(soap, status, count); + if (err) + return err; +#ifdef WITH_COOKIES + if (soap_putsetcookies(soap)) + return soap->error; + soap_free_cookies(soap); +#endif + return soap->fposthdr(soap, NULL, NULL); +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_response(struct soap *soap, int status) +{ + ULONG64 count; + if (!(soap->omode & (SOAP_ENC_PLAIN | SOAP_IO_STORE /* this tests for chunking too */)) + && (status == SOAP_HTML || (status >= SOAP_FILE && status < SOAP_FILE + 600))) + soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE; + soap->status = status; + count = soap_count_attachments(soap); + if (soap_init_send(soap)) + return soap->error; +#ifndef WITH_NOHTTP + if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_PLAIN)) + { + int k = soap->mode; + soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB); + if ((k & SOAP_IO) != SOAP_IO_FLUSH) + soap->mode |= SOAP_IO_BUFFER; + soap->error = soap->fresponse(soap, status, count); + if (soap->error) + return soap->error; +#ifndef WITH_LEANER + if ((k & SOAP_IO) == SOAP_IO_CHUNK) + { + if (soap_flush(soap)) + return soap->error; + } +#endif + soap->mode = k; + } +#endif +#ifndef WITH_LEANER + if (soap_begin_attachments(soap)) + return soap->error; +#endif + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_extend_url(struct soap *soap, const char *s, const char *t) +{ + if (s) + soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), s); + else + *soap->msgbuf = '\0'; + if (t && (*t == '/' || *t == '?')) + { + char *r = strchr(soap->msgbuf, '?'); + if (r) + { + if (*t == '?') + { + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "&"); + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), t + 1); + } + else /* *t == '/' */ + { + size_t l = r - soap->msgbuf; + *r = '\0'; + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), t); + if (s) + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), s + l); + } + } + else + { + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), t); + } + } + return soap->msgbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_extend_url_query(struct soap *soap, const char *s, const char *t) +{ + (void)soap_extend_url(soap, s, t); /* fills and returns soap->msgbuf */ + if (strchr(soap->msgbuf, '?')) + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "&"); + else + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "?"); + return soap->msgbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_url_query(struct soap *soap, const char *s, const char *t) +{ + size_t n = strlen(s); + if (n) + { + char *r = soap->msgbuf; + size_t k = n - (s[n-1] == '='); + while ((r = strchr(r, '{')) != NULL) + if (!strncmp(++r, s, k) && r[k] == '}') + break; + if (r) + { + size_t m = t ? strlen(t) : 0; + (void)soap_memmove(r + m - 1, soap->msgbuf + sizeof(soap->msgbuf) - (r + n + 1), r + k + 1, strlen(r + k + 1) + 1); + if (m) + (void)soap_memmove(r - 1, soap->msgbuf + sizeof(soap->msgbuf) - (r - 1), t, m); + } + else + { + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), s); + if (t) + { + int m = (int)strlen(soap->msgbuf); /* msgbuf length is max SOAP_TMPLEN or just 1024 bytes */ + (void)soap_encode_url(t, soap->msgbuf + m, (int)sizeof(soap->msgbuf) - m); + } + soap_strcat(soap->msgbuf, sizeof(soap->msgbuf), "&"); + } + } +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_encode_url(const char *s, char *t, int len) +{ + int c; + int n = len; + if (s && n > 0) + { + while ((c = *s++) && n-- > 1) + { + if (c == '-' + || c == '.' + || (c >= '0' && c <= '9') + || (c >= 'A' && c <= 'Z') + || c == '_' + || (c >= 'a' && c <= 'z') + || c == '~') + { + *t++ = c; + } + else if (n > 2) + { + *t++ = '%'; + *t++ = (c >> 4) + (c > 159 ? '7' : '0'); + c &= 0xF; + *t++ = c + (c > 9 ? '7' : '0'); + n -= 2; + } + else + { + break; + } + } + *t = '\0'; + } + return len - n; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_encode_url_string(struct soap *soap, const char *s) +{ + if (s) + { + int n = 3 * (int)strlen(s) + 1; + char *t = (char*)soap_malloc(soap, n); + if (t) + { + (void)soap_encode_url(s, t, n); + return t; + } + } + return SOAP_STR_EOS; +} + +/******************************************************************************\ + * + * HTTP Cookies RFC 6265 + * +\******************************************************************************/ + +#ifdef WITH_COOKIES + +SOAP_FMAC1 +struct soap_cookie* +SOAP_FMAC2 +soap_cookie(struct soap *soap, const char *name, const char *domain, const char *path) +{ + return soap_cookie_env(soap, name, domain, path, 0); +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap_cookie* +SOAP_FMAC2 +soap_cookie_env(struct soap *soap, const char *name, const char *domain, const char *path, short env) +{ + struct soap_cookie *p; + if (!domain && !env) + domain = soap->cookie_domain; + if (!path) + path = soap->cookie_path; + if (!path) + path = SOAP_STR_EOS; + else if (*path == '/') + path++; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Search cookie='%s' domain='%s' path='%s' env=%hd\n", name, domain ? domain : "(null)", path ? path : "(null)", env)); + for (p = soap->cookies; p; p = p->next) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie in database: %s='%s' domain='%s' path='%s' env=%hd\n", p->name, p->value ? p->value : "(null)", p->domain ? p->domain : "(null)", p->path ? p->path : "(null)", p->env)); + if ((!env || p->env) + && !strcmp(p->name, name) + && (!domain || (domain && p->domain && !strcmp(p->domain, domain))) + && (!path || (path && p->path && !strncmp(p->path, path, strlen(p->path))))) + break; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap_cookie* +SOAP_FMAC2 +soap_set_cookie(struct soap *soap, const char *name, const char *value, const char *domain, const char *path) +{ + struct soap_cookie **p, *q; + int n; + if (!domain) + domain = soap->cookie_domain; + if (!path) + path = soap->cookie_path; + if (!path) + path = SOAP_STR_EOS; + else if (*path == '/') + path++; + q = soap_cookie(soap, name, domain, path); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set %scookie: %s='%s' domain='%s' path='%s'\n", q ? SOAP_STR_EOS : "new ", name, value ? value : "(null)", domain ? domain : "(null)", path ? path : "(null)")); + if (!q) + { + q = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie)); + if (q) + { + size_t l = strlen(name) + 1; + q->name = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + q->name = (char*)SOAP_MALLOC(soap, l); + if (q->name) + (void)soap_memcpy(q->name, l, name, l); + q->value = NULL; + q->domain = NULL; + q->path = NULL; + q->expire = 0; + q->maxage = -1; + q->version = 1; + q->secure = 0; + q->modified = 0; + for (p = &soap->cookies, n = soap->cookie_max; *p && n; p = &(*p)->next, n--) + if ((*p)->name && !strcmp((*p)->name, name) && (*p)->path && path && strcmp((*p)->path, path) < 0) + break; + if (n) + { + q->next = *p; + *p = q; + } + else + { + if (q->name) + SOAP_FREE(soap, q->name); + SOAP_FREE(soap, q); + q = NULL; + } + } + } + else + { + q->modified = 1; + } + if (q) + { + if (q->value) + { + if (!value || strcmp(value, q->value)) + { + SOAP_FREE(soap, q->value); + q->value = NULL; + } + } + if (value && *value && !q->value) + { + size_t l = strlen(value) + 1; + q->value = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + q->value = (char*)SOAP_MALLOC(soap, l); + if (q->value) + soap_strcpy(q->value, l, value); + } + if (q->domain) + { + if (!domain || strcmp(domain, q->domain)) + { + SOAP_FREE(soap, q->domain); + q->domain = NULL; + } + } + if (domain && !q->domain) + { + size_t l = strlen(domain) + 1; + q->domain = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + q->domain = (char*)SOAP_MALLOC(soap, l); + if (q->domain) + soap_strcpy(q->domain, l, domain); + } + if (q->path) + { + if (!path || strncmp(path, q->path, strlen(q->path))) + { + SOAP_FREE(soap, q->path); + q->path = NULL; + } + } + if (path && !q->path) + { + size_t l = strlen(path) + 1; + q->path = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + q->path = (char*)SOAP_MALLOC(soap, l); + if (q->path) + soap_strcpy(q->path, l, path); + } + q->session = 1; + q->env = 0; + } + return q; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_clr_cookie(struct soap *soap, const char *name, const char *domain, const char *path) +{ + struct soap_cookie **p, *q; + if (!domain) + domain = soap->cookie_domain; + if (!domain) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error in clear cookie='%s': cookie domain not set\n", name ? name : "(null)")); + return; + } + if (!path) + path = soap->cookie_path; + if (!path) + path = SOAP_STR_EOS; + else if (*path == '/') + path++; + for (p = &soap->cookies, q = *p; q; q = *p) + { + if (q->name && !strcmp(q->name, name) && (!q->domain || !strcmp(q->domain, domain)) && (!q->path || !strncmp(q->path, path, strlen(q->path)))) + { + SOAP_FREE(soap, q->name); + if (q->value) + SOAP_FREE(soap, q->value); + if (q->domain) + SOAP_FREE(soap, q->domain); + if (q->path) + SOAP_FREE(soap, q->path); + *p = q->next; + SOAP_FREE(soap, q); + } + else + { + p = &q->next; + } + } +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path) +{ + struct soap_cookie *p; + p = soap_cookie(soap, name, domain, path); + if (p) + return p->value; + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_env_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path) +{ + struct soap_cookie *p; + p = soap_cookie(soap, name, domain, path); + if (p && p->env) + return p->value; + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +time_t +SOAP_FMAC2 +soap_cookie_expire(struct soap *soap, const char *name, const char *domain, const char *path) +{ + struct soap_cookie *p; + p = soap_cookie(soap, name, domain, path); + if (p) + return (time_t)p->expire; + return -1; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_cookie_expire(struct soap *soap, const char *name, long maxage, const char *domain, const char *path) +{ + struct soap_cookie *p; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie expiration max-age=%ld: cookie='%s' domain='%s' path='%s'\n", maxage, name, domain ? domain : "(null)", path ? path : "(null)")); + p = soap_cookie(soap, name, domain, path); + if (p) + { + p->maxage = maxage; + p->modified = 1; + return SOAP_OK; + } + return SOAP_ERR; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_cookie_secure(struct soap *soap, const char *name, const char *domain, const char *path) +{ + struct soap_cookie *p; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie secure: cookie='%s' domain='%s' path='%s'\n", name, domain ? domain : "(null)", path ? path : "(null)")); + p = soap_cookie(soap, name, domain, path); + if (p) + { + p->secure = 1; + p->modified = 1; + return SOAP_OK; + } + return SOAP_ERR; +} +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path) +{ + struct soap_cookie *p; + p = soap_cookie(soap, name, domain, path); + if (p) + { + p->session = 1; + p->modified = 1; + return SOAP_OK; + } + return SOAP_ERR; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_clr_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path) +{ + struct soap_cookie *p; + p = soap_cookie(soap, name, domain, path); + if (p) + { + p->session = 0; + p->modified = 1; + return SOAP_OK; + } + return SOAP_ERR; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_putsetcookies(struct soap *soap) +{ + char tmp[4096]; + struct soap_cookie *p; + for (p = soap->cookies; p; p = p->next) + { + if ((p->modified +#if defined(WITH_OPENSSL) || defined(WITH_WOLFSSL) + || (!p->env && !soap->ssl == !p->secure) +#endif + ) && p->name && p->value && *p->name && *p->value) + { + char *s = tmp; + const char *t; + s += soap_encode_url(p->name, s, 3967); + *s++ = '='; + s += soap_encode_url(p->value, s, 3968 - (int)(s-tmp)); + t = p->domain ? p->domain : soap->cookie_domain; + if (t && (int)strlen(t) < 3968 - (int)(s-tmp)) + { + soap_strcpy(s, 4096 - (s-tmp), ";Domain="); + s += 8; + soap_strcpy(s, 4096 - (s-tmp), t); + s += strlen(s); + } + t = p->path ? p->path : soap->cookie_path; + if (t && (int)strlen(t) < 3976 - (int)(s-tmp)) + { + soap_strcpy(s, 4096 - (s-tmp), ";Path=/"); + s += 7; + if (*t == '/') + t++; + if (strchr(t, '%')) /* already URL encoded? */ + { + soap_strcpy(s, 4096 - (s-tmp), t); + s += strlen(s); + } + else + { + s += soap_encode_url(t, s, 4096 - (int)(s-tmp)); + } + } + if (p->version > 0 && s-tmp < 3983) + { + (SOAP_SNPRINTF(s, 4096 - (s-tmp), 29), ";Version=%u", p->version); + s += strlen(s); + } + if (p->maxage >= 0 && s-tmp < 4012) + { + (SOAP_SNPRINTF(s, 4096 - (s-tmp), 29), ";Max-Age=%ld", p->maxage); + s += strlen(s); + } +#if !defined(WITH_LEAN) +#if defined(HAVE_GMTIME_R) || defined(HAVE_GMTIME) + if (p->maxage >= 0 && s-tmp < 4041) + { + time_t n = time(NULL) + p->maxage; + struct tm T, *pT = &T; + size_t l = 0; + /* format is Wed, 09 Jun 2021 10:18:14 GMT */ +#if defined(HAVE_GMTIME_R) + if (gmtime_r(&n, pT) != SOAP_FUNC_R_ERR) + l = strftime(s, 4096 - (s-tmp), ";Expires=%a, %d %b %Y %H:%M:%S GMT", pT); +#else + pT = gmtime(&n); + if (pT) + l = strftime(s, 4096 - (s-tmp), ";Expires=%a, %d %b %Y %H:%M:%S GMT", pT); +#endif + s += l; + } +#endif +#endif + if (s-tmp < 4079 + && (p->secure +#if defined(WITH_OPENSSL) || defined(WITH_WOLFSSL) + || soap->ssl +#endif + )) + { + soap_strcpy(s, 4096 - (s-tmp), ";Secure"); + s += strlen(s); + } + if (s-tmp < 4086) + soap_strcpy(s, 4096 - (s-tmp), ";HttpOnly"); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set-Cookie: %s\n", tmp)); + soap->error = soap->fposthdr(soap, "Set-Cookie", tmp); + if (soap->error) + return soap->error; + } + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_putcookies(struct soap *soap, const char *domain, const char *path, int secure) +{ + struct soap_cookie **p, *q; + char tmp[4096]; + unsigned int version = 0; + time_t now = time(NULL); + char *s = tmp; + if (!domain || !path) + return SOAP_OK; + p = &soap->cookies; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending cookies for domain='%s' path='%s'\n", domain, path)); + if (*path == '/') + path++; + while ((q = *p)) + { + if (q->expire && now >= (time_t)q->expire) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie %s expired\n", q->name)); + SOAP_FREE(soap, q->name); + if (q->value) + SOAP_FREE(soap, q->value); + if (q->domain) + SOAP_FREE(soap, q->domain); + if (q->path) + SOAP_FREE(soap, q->path); + *p = q->next; + SOAP_FREE(soap, q); + } + else + { + int flag; + char *t = q->domain; + size_t n = 0; + if (!t) + { + flag = 1; + } + else + { + const char *r = strchr(t, ':'); + if (r) + n = r - t; + else + n = strlen(t); + flag = !strncmp(t, domain, n); + } + /* domain-level cookies, cannot compile when WITH_NOIO set */ +#ifndef WITH_NOIO + if (!flag) + { + struct hostent hostent; + if (!tcp_gethostbyname(soap, (char*)domain, &hostent, NULL)) + { + const char *r = hostent.h_name; + if (*t == '.') + { + size_t k = strlen(hostent.h_name); + if (k >= n) + r = hostent.h_name + k - n; + } + flag = !strncmp(t, r, n); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Domain cookie %s host %s (match=%d)\n", t, r, flag)); + } + } +#endif + if (flag + && (!q->path || !strncmp(q->path, path, strlen(q->path))) +#ifndef WITH_INSECURE_COOKIES + && (!q->secure || secure) +#endif + ) + { + 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 (s + n >= tmp + sizeof(tmp)) + { + if (s == tmp) + return SOAP_OK; /* header too big, cannot split */ + /* split up HTTP header */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie: %s\n", tmp)); + soap->error = soap->fposthdr(soap, "Cookie", tmp); + if (soap->error) + return soap->error; + s = tmp; + } + else if (s != tmp) + { + *s++ = ';'; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending cookie %s=%s path=\"/%s\" domain=\"%s\"\n", q->name ? q->name : "(null)", q->value ? q->value : "(null)", q->path ? q->path : "(null)", q->domain ? q->domain : "(null)")); + if (q->version != version && (s-tmp) + (size_t)36 < sizeof(tmp)) + { + (SOAP_SNPRINTF_SAFE(s, sizeof(tmp) - (s-tmp)), "$Version=%u;", q->version); + version = q->version; + s += strlen(s); + } + if (q->name && (s-tmp) + strlen(q->name) + (size_t)15 < sizeof(tmp)) + { + s += soap_encode_url(q->name, s, (int)(tmp+sizeof(tmp)-s)-15); + } + if (q->value && *q->value && (s-tmp) + strlen(q->value) + (size_t)16 < sizeof(tmp)) + { + *s++ = '='; + s += soap_encode_url(q->value, s, (int)(tmp+sizeof(tmp)-s)-16); + } + if (q->path && (s-tmp) + strlen(q->path) + (size_t)36 < sizeof(tmp)) + { + (SOAP_SNPRINTF_SAFE(s, sizeof(tmp) - (s-tmp)), ";$Path=\"/%s\"", (*q->path == '/' ? q->path + 1 : q->path)); + s += strlen(s); + } + if (q->domain && (s-tmp) + strlen(q->domain) + (size_t)36 < sizeof(tmp)) + { + (SOAP_SNPRINTF_SAFE(s, sizeof(tmp) - (s-tmp)), ";$Domain=\"%s\"", q->domain); + s += strlen(s); + } + } + p = &q->next; + } + } + if (s != tmp) + { + soap->error = soap->fposthdr(soap, "Cookie", tmp); + if (soap->error) + return soap->error; + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_getcookies(struct soap *soap, const char *val) +{ + struct soap_cookie *p = NULL, *q = NULL; + const char *s = val; + char tmp[4096]; /* cookie size is up to 4096 bytes [RFC2109] */ + char *domain = NULL; + char *path = NULL; + unsigned int version = 0; + time_t now = time(NULL); + if (!s) + return; + while (*s) + { + s = soap_decode_key(tmp, sizeof(tmp), s); + if (!soap_tag_cmp(tmp, "$Version")) + { + s = soap_decode_val(tmp, sizeof(tmp), s); + if (s) + { + if (p) + p->version = (int)soap_strtol(tmp, NULL, 10); + else + version = (int)soap_strtol(tmp, NULL, 10); + } + } + else if (!soap_tag_cmp(tmp, "$Path")) + { + char *t = NULL; + s = soap_decode_val(tmp, sizeof(tmp), s); + if (*tmp) + { + size_t l = strlen(tmp) + 1; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + t = (char*)SOAP_MALLOC(soap, l); + if (t) + (void)soap_memcpy((void*)t, l, (const void*)tmp, l); + } + if (p) + { + if (p->path) + SOAP_FREE(soap, p->path); + p->path = t; + } + else + { + if (path) + SOAP_FREE(soap, path); + path = t; + } + } + else if (!soap_tag_cmp(tmp, "$Domain")) + { + char *t = NULL; + s = soap_decode_val(tmp, sizeof(tmp), s); + if (*tmp) + { + size_t l = strlen(tmp) + 1; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + t = (char*)SOAP_MALLOC(soap, l); + if (t) + (void)soap_memcpy((void*)t, l, (const void*)tmp, l); + } + if (p) + { + if (p->domain) + SOAP_FREE(soap, p->domain); + p->domain = t; + } + else + { + if (domain) + SOAP_FREE(soap, domain); + domain = t; + } + } + else if (p && !soap_tag_cmp(tmp, "Path")) + { + if (p->path) + SOAP_FREE(soap, p->path); + p->path = NULL; + s = soap_decode_val(tmp, sizeof(tmp), s); + if (*tmp) + { + size_t l = strlen(tmp) + 1; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + p->path = (char*)SOAP_MALLOC(soap, l); + if (p->path) + (void)soap_memcpy((void*)p->path, l, (const void*)tmp, l); + } + } + else if (p && !soap_tag_cmp(tmp, "Domain")) + { + if (p->domain) + SOAP_FREE(soap, p->domain); + p->domain = NULL; + s = soap_decode_val(tmp, sizeof(tmp), s); + if (*tmp) + { + size_t l = strlen(tmp) + 1; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + p->domain = (char*)SOAP_MALLOC(soap, l); + if (p->domain) + (void)soap_memcpy((void*)p->domain, l, (const void*)tmp, l); + } + } + else if (p && !soap_tag_cmp(tmp, "Version")) + { + s = soap_decode_val(tmp, sizeof(tmp), s); + p->version = (unsigned int)soap_strtoul(tmp, NULL, 10); + } + else if (p && !soap_tag_cmp(tmp, "Max-Age")) + { + s = soap_decode_val(tmp, sizeof(tmp), s); + p->expire = (ULONG64)(now + soap_strtol(tmp, NULL, 10)); + } + else if (p && !soap_tag_cmp(tmp, "Expires")) + { + if (*s == '=') + { + s = soap_decode(tmp, sizeof(tmp), s + 1, ";"); + if (!p->expire && strlen(tmp) >= 23) + { + char a[3]; + struct tm T; + static const char mns[] = "anebarprayunulugepctovec"; + const char *t = strchr(tmp, ' '); + if (t) + { + a[2] = '\0'; + memset((void*)&T, 0, sizeof(T)); + if (t[1] >= 'A') + { + /* format is Sun Nov 6 08:49:37 94 */ + a[0] = t[2]; + a[1] = t[3]; + T.tm_mon = (int)(strstr(mns, a) - mns) / 2; + a[0] = t[5]; + a[1] = t[6]; + T.tm_mday = (int)soap_strtol(a, NULL, 10); + if (t[17] && t[18] && t[19] != ' ') + t += 2; /* format is Sun Nov 6 08:49:37 2017 - ANSI-C */ + a[0] = t[17]; + a[1] = t[18]; + T.tm_year = 100 + (int)soap_strtol(a, NULL, 10); + t += 6; + } + else + { + /* format is Sunday, 06-Nov-17 08:49:37 GMT - RFC 850 */ + a[0] = t[1]; + a[1] = t[2]; + T.tm_mday = (int)soap_strtol(a, NULL, 10); + a[0] = t[5]; + a[1] = t[6]; + T.tm_mon = (int)(strstr(mns, a) - mns) / 2; + if (t[10] != ' ') + t += 2; /* format is Wed, 09 Jun 2021 10:18:14 GMT - RFC 822 */ + a[0] = t[8]; + a[1] = t[9]; + T.tm_year = 100 + (int)soap_strtol(a, NULL, 10); + t += 11; + } + a[0] = t[0]; + a[1] = t[1]; + T.tm_hour = (int)soap_strtol(a, NULL, 10); + a[0] = t[3]; + a[1] = t[4]; + T.tm_min = (int)soap_strtol(a, NULL, 10); + a[0] = t[6]; + a[1] = t[7]; + T.tm_sec = (int)soap_strtol(a, NULL, 10); + p->expire = (ULONG64)soap_timegm(&T); + } + } + } + } + else if (p && !soap_tag_cmp(tmp, "Secure")) + { + p->secure = 1; + s = soap_decode_val(tmp, sizeof(tmp), s); + } + else if (p && !soap_tag_cmp(tmp, "HttpOnly")) + { + s = soap_decode_val(tmp, sizeof(tmp), s); + } + else if (p && !soap_tag_cmp(tmp, "Comment")) + { + s = soap_decode_val(tmp, sizeof(tmp), s); + } + else if (*tmp) + { + if (p) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie='%s' value='%s' domain='%s' path='%s' expire=" SOAP_ULONG_FORMAT " secure=%d\n", p->name, p->value ? p->value : "(null)", p->domain ? p->domain : "(null)", p->path ? p->path : "(null)", p->expire, p->secure)); + q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path); + if (q) + { + q->version = p->version; + q->expire = p->expire; + q->secure = p->secure; + q->env = 1; + } + if (p->name) + SOAP_FREE(soap, p->name); + if (p->value) + SOAP_FREE(soap, p->value); + if (p->domain) + SOAP_FREE(soap, p->domain); + if (p->path) + SOAP_FREE(soap, p->path); + SOAP_FREE(soap, p); + } + p = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie)); + if (p) + { + size_t l = strlen(tmp) + 1; + p->name = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + p->name = (char*)SOAP_MALLOC(soap, l); + if (p->name) + (void)soap_memcpy(p->name, l, tmp, l); + s = soap_decode_val(tmp, sizeof(tmp), s); + p->value = NULL; + if (*tmp) + { + l = strlen(tmp) + 1; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + p->value = (char*)SOAP_MALLOC(soap, l); + if (p->value) + (void)soap_memcpy((void*)p->value, l, (const void*)tmp, l); + } + if (domain) + { + p->domain = domain; + domain = NULL; + } + else + { + p->domain = NULL; + } + if (path) + { + p->path = path; + path = NULL; + } + else if (*soap->path) + { + l = strlen(soap->path) + 1; + p->path = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + p->path = (char*)SOAP_MALLOC(soap, l); + if (p->path) + (void)soap_memcpy((void*)p->path, l, (const void*)soap->path, l); + } + else + { + p->path = (char*)SOAP_MALLOC(soap, 2); + if (p->path) + (void)soap_memcpy((void*)p->path, 2, (const void*)"/", 2); + } + p->expire = 0; + p->secure = 0; + p->version = version; + } + } + } + if (p) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie='%s' value='%s' domain='%s' path='%s' expire=" SOAP_ULONG_FORMAT " secure=%d\n", p->name, p->value ? p->value : "(null)", p->domain ? p->domain : "(null)", p->path ? p->path : "(null)", p->expire, p->secure)); + q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path); + if (q) + { + q->version = p->version; + q->expire = p->expire; + q->secure = p->secure; + q->env = 1; + } + if (p->name) + SOAP_FREE(soap, p->name); + if (p->value) + SOAP_FREE(soap, p->value); + if (p->domain) + SOAP_FREE(soap, p->domain); + if (p->path) + SOAP_FREE(soap, p->path); + SOAP_FREE(soap, p); + } + if (domain) + SOAP_FREE(soap, domain); + if (path) + SOAP_FREE(soap, path); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getenv_cookies(struct soap *soap) +{ + struct soap_cookie *p; + const char *s; + char key[4096], val[4096]; /* cookie size is up to 4096 bytes [RFC2109] */ + s = getenv("HTTP_COOKIE"); + if (!s) + return SOAP_ERR; + do + { + s = soap_decode_key(key, sizeof(key), s); + s = soap_decode_val(val, sizeof(val), s); + p = soap_set_cookie(soap, key, val, NULL, NULL); + if (p) + p->env = 1; + } while (*s); + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap_cookie* +SOAP_FMAC2 +soap_copy_cookies(struct soap *copy, const struct soap *soap) +{ + struct soap_cookie *p, **q, *r; + (void)copy; + q = &r; + for (p = soap->cookies; p; p = p->next) + { + *q = (struct soap_cookie*)SOAP_MALLOC(copy, sizeof(struct soap_cookie)); + if (!*q) + return r; + **q = *p; + if (p->name) + { + size_t l = strlen(p->name) + 1; + (*q)->name = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + (*q)->name = (char*)SOAP_MALLOC(copy, l); + if ((*q)->name) + (void)soap_memcpy((*q)->name, l, p->name, l); + } + if (p->value) + { + size_t l = strlen(p->value) + 1; + (*q)->value = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + (*q)->value = (char*)SOAP_MALLOC(copy, l); + if ((*q)->value) + (void)soap_memcpy((*q)->value, l, p->value, l); + } + if (p->domain) + { + size_t l = strlen(p->domain) + 1; + (*q)->domain = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + (*q)->domain = (char*)SOAP_MALLOC(copy, l); + if ((*q)->domain) + (void)soap_memcpy((*q)->domain, l, p->domain, l); + } + if (p->path) + { + size_t l = strlen(p->path) + 1; + (*q)->path = NULL; + if (SOAP_MAXALLOCSIZE <= 0 || l <= SOAP_MAXALLOCSIZE) + (*q)->path = (char*)SOAP_MALLOC(copy, l); + if ((*q)->path) + (void)soap_memcpy((*q)->path, l, p->path, l); + } + q = &(*q)->next; + } + *q = NULL; + return r; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_free_cookies(struct soap *soap) +{ + struct soap_cookie *p; + for (p = soap->cookies; p; p = soap->cookies) + { + soap->cookies = p->next; + SOAP_FREE(soap, p->name); + if (p->value) + SOAP_FREE(soap, p->value); + if (p->domain) + SOAP_FREE(soap, p->domain); + if (p->path) + SOAP_FREE(soap, p->path); + SOAP_FREE(soap, p); + } +} + +/******************************************************************************/ + +#endif /* WITH_COOKIES */ + +/******************************************************************************/ + +SOAP_FMAC1 +size_t +SOAP_FMAC2 +soap_hash(const char *s) +{ + size_t h = 0; + while (*s) + h = *s++ + (h << 6) + (h << 16) - h; /* Red Dragon book h = 65599*h + c */ + return h % SOAP_IDHASH; +} + +/******************************************************************************/ + +static void +soap_init_pht(struct soap *soap) +{ + int i; + soap->pblk = NULL; + soap->pidx = 0; + for (i = 0; i < (int)SOAP_PTRHASH; i++) + soap->pht[i] = NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap* +SOAP_FMAC2 +soap_versioning(soap_new)(soap_mode imode, soap_mode omode) +{ + struct soap *soap; +#ifdef __cplusplus + soap = SOAP_NEW_UNMANAGED(struct soap); +#else + soap = (struct soap*)SOAP_MALLOC_UNMANAGED(sizeof(struct soap)); +#endif + if (soap) + soap_versioning(soap_init)(soap, imode, omode); + return soap; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_free(struct soap *soap) +{ + soap_done(soap); +#ifdef __cplusplus + SOAP_DELETE_UNMANAGED(soap); +#else + SOAP_FREE_UNMANAGED(soap); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_del(struct soap *soap) +{ + free(soap); +} + +/******************************************************************************/ + +static void +soap_free_pht(struct soap *soap) +{ + struct soap_pblk *pb, *next; + int i; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free pointer hashtable\n")); + for (pb = soap->pblk; pb; pb = next) + { + next = pb->next; + SOAP_FREE(soap, pb); + } + soap->pblk = NULL; + soap->pidx = 0; + for (i = 0; i < (int)SOAP_PTRHASH; i++) + soap->pht[i] = NULL; +} + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_embed(struct soap *soap, const void *p, const void *a, int n, int t) +{ + int id; + struct soap_plist *pp; + if (soap->version == 2) + soap->encoding = 1; + if (!p || (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH)) || (soap->mode & SOAP_XML_TREE)) + return 0; + if (a) + id = soap_array_pointer_lookup(soap, p, a, n, t, &pp); + else + id = soap_pointer_lookup(soap, p, t, &pp); + if (id) + { + if (soap_is_embedded(soap, pp) || soap_is_single(soap, pp)) + return 0; + soap_set_embedded(soap, pp); + } + return id; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_pointer_lookup(struct soap *soap, const void *p, int type, struct soap_plist **ppp) +{ + struct soap_plist *pp; + *ppp = NULL; + if (p) + { + for (pp = soap->pht[soap_hash_ptr(p)]; pp; pp = pp->next) + { + if (pp->ptr == p && pp->type == type) + { + *ppp = pp; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d id=%d\n", p, type, pp->id)); + return pp->id; + } + } + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d: not found\n", p, type)); + return 0; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_pointer_enter(struct soap *soap, const void *p, const void *a, int n, int type, struct soap_plist **ppp) +{ + size_t h; + struct soap_plist *pp; + (void)n; + if (!soap->pblk || soap->pidx >= SOAP_PTRBLK) + { + struct soap_pblk *pb = (struct soap_pblk*)SOAP_MALLOC(soap, sizeof(struct soap_pblk)); + if (!pb) + { + soap->error = SOAP_EOM; + return 0; + } + pb->next = soap->pblk; + soap->pblk = pb; + soap->pidx = 0; + } + *ppp = pp = &soap->pblk->plist[soap->pidx++]; + if (a) + h = soap_hash_ptr(a); + else + h = soap_hash_ptr(p); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pointer enter location=%p array=%p size=%lu type=%d id=%d\n", p, a, (unsigned long)n, type, soap->idnum+1)); + pp->next = soap->pht[h]; + pp->type = type; + pp->mark1 = 0; + pp->mark2 = 0; + pp->ptr = p; + pp->dup = NULL; + pp->array = a; + pp->size = n; + soap->pht[h] = pp; + pp->id = ++soap->idnum; + return pp->id; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_array_pointer_lookup(struct soap *soap, const void *p, const void *a, int n, int type, struct soap_plist **ppp) +{ + struct soap_plist *pp; + *ppp = NULL; + if (!p || !a) + return 0; + for (pp = soap->pht[soap_hash_ptr(a)]; pp; pp = pp->next) + { + if (pp->type == type && pp->array == a && pp->size == n) + { + *ppp = pp; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d id=%d\n", a, type, pp->id)); + return pp->id; + } + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d: not found\n", a, type)); + return 0; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_begin_count(struct soap *soap) +{ + soap_free_ns(soap); + soap->error = SOAP_OK; +#ifndef WITH_LEANER + if ((soap->mode & SOAP_ENC_DIME) || (soap->omode & SOAP_ENC_DIME)) + { + soap->mode = soap->omode | SOAP_IO_LENGTH | SOAP_ENC_DIME; + } + else +#endif + { + soap->mode = soap->omode; + if ((soap->mode & SOAP_IO_UDP)) + { + soap->mode &= SOAP_IO; + soap->mode |= SOAP_IO_BUFFER | SOAP_ENC_PLAIN; + } + if ((soap->mode & SOAP_IO) == SOAP_IO_STORE + || (((soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_ENC_PLAIN)) +#ifndef WITH_LEANER + && !soap->fpreparesend +#endif + )) + soap->mode &= ~SOAP_IO_LENGTH; + else + soap->mode |= SOAP_IO_LENGTH; + } +#ifdef WITH_ZLIB + if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH) + { + if (!(soap->mode & SOAP_ENC_DIME)) + soap->mode &= ~SOAP_IO_LENGTH; + if ((soap->mode & SOAP_ENC_PLAIN)) + soap->mode |= SOAP_IO_BUFFER; + else + soap->mode |= SOAP_IO_STORE; + } +#endif +#ifndef WITH_LEANER + if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME)) + soap->mode |= SOAP_ENC_MIME; + else if (!(soap->mode & SOAP_ENC_MIME)) + soap->mode &= ~SOAP_ENC_MTOM; + if ((soap->mode & SOAP_ENC_MIME)) + soap_select_mime_boundary(soap); + soap->dime.list = soap->dime.last; /* keep track of last DIME attachment */ +#endif + soap->count = 0; + soap->ns = 0; + soap->null = 0; + soap->position = 0; + soap->mustUnderstand = 0; + soap->encoding = 0; + soap->part = SOAP_BEGIN_SEND; + soap->event = 0; + soap->evlev = 0; + soap->idnum = 0; + soap->body = 1; + soap->level = 0; + soap_clr_attr(soap); + soap_set_local_namespaces(soap); +#ifndef WITH_LEANER + soap->dime.size = 0; /* accumulate total size of attachments */ + if (soap->fprepareinitsend && (soap->mode & SOAP_IO) != SOAP_IO_STORE && (soap->error = soap->fprepareinitsend(soap)) != SOAP_OK) + return soap->error; +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin count phase (socket=%d mode=0x%x count=" SOAP_ULONG_FORMAT ")\n", (int)soap->socket, (unsigned int)soap->mode, soap->count)); +#ifndef WITH_LEANER + if ((soap->mode & SOAP_IO_LENGTH)) + return soap_begin_attachments(soap); +#endif + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_end_count(struct soap *soap) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of count phase\n")); +#ifndef WITH_LEANER + if ((soap->mode & SOAP_IO_LENGTH)) + { + if (soap_end_attachments(soap)) + return soap->error; + if (soap->fpreparefinalsend && (soap->error = soap->fpreparefinalsend(soap)) != SOAP_OK) + return soap->error; + } +#else + (void)soap; +#endif + return SOAP_OK; +} + +/******************************************************************************/ + +static int +soap_init_send(struct soap *soap) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for output to socket=%d/fd=%d\n", (int)soap->socket, soap->sendfd)); + *soap->tag = '\0'; + soap_free_ns(soap); + soap->error = SOAP_OK; + soap->mode = soap->omode | (soap->mode & (SOAP_IO_LENGTH | SOAP_ENC_DIME)); +#ifndef WITH_LEAN + if ((soap->mode & SOAP_IO_UDP)) + { + soap->mode &= ~SOAP_IO; + soap->mode |= SOAP_IO_BUFFER | SOAP_ENC_PLAIN; + if ((soap->mode & SOAP_IO_LENGTH) && soap->count > sizeof(soap->buf)) + return soap->error = SOAP_UDP_ERROR; + } +#endif +#ifdef WITH_ZLIB + if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH) + { + if ((soap->mode & SOAP_ENC_PLAIN)) + soap->mode |= SOAP_IO_BUFFER; + else + soap->mode |= SOAP_IO_STORE; + } +#endif +#if !defined(__cplusplus) || defined(WITH_COMPAT) + if (soap->os) + { + *soap->os = NULL; + soap->mode = (soap->mode & ~SOAP_IO) | SOAP_IO_STORE; + } + else +#endif + if ((soap->mode & SOAP_IO) == SOAP_IO_FLUSH && soap_valid_socket(soap->socket)) + { + if ((soap->mode & SOAP_IO_LENGTH) || (soap->mode & SOAP_ENC_PLAIN)) + soap->mode |= SOAP_IO_BUFFER; + else + soap->mode |= SOAP_IO_STORE; + } + soap->mode &= ~SOAP_IO_LENGTH; + if ((soap->mode & SOAP_IO) == SOAP_IO_STORE && soap_alloc_block(soap) == NULL) + return soap->error; + if (!(soap->mode & SOAP_IO_KEEPALIVE)) + soap->keep_alive = 0; +#ifndef WITH_LEANER + if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME)) + { + soap->mode |= SOAP_ENC_MIME; + soap->mode &= ~SOAP_ENC_DIME; + } + else if (!(soap->mode & SOAP_ENC_MIME)) + { + soap->mode &= ~SOAP_ENC_MTOM; + } + if ((soap->mode & SOAP_ENC_MIME)) + soap_select_mime_boundary(soap); +#ifdef WIN32 +#ifndef UNDER_CE +#ifndef WITH_FASTCGI + if (!soap_valid_socket(soap->socket) && !soap->os && soap->sendfd >= 0) /* Set win32 stdout or soap->sendfd to BINARY, e.g. to support DIME */ +#ifdef __BORLANDC__ + setmode(soap->sendfd, _O_BINARY); +#else + _setmode(soap->sendfd, _O_BINARY); +#endif +#endif +#endif +#endif +#endif + if ((soap->mode & SOAP_IO)) + soap->buflen = soap->bufidx = 0; + soap->chunksize = 0; + soap->ns = 0; + soap->null = 0; + soap->position = 0; + soap->mustUnderstand = 0; + soap->encoding = 0; + soap->event = 0; + soap->evlev = 0; + soap->idnum = 0; + soap->body = 1; + soap->level = 0; + soap_clr_attr(soap); + soap_set_local_namespaces(soap); +#ifdef WITH_ZLIB + soap->z_ratio_out = 1.0; + if ((soap->mode & SOAP_ENC_ZLIB) && soap->zlib_state != SOAP_ZLIB_DEFLATE) + { + if (!soap->d_stream) + { + soap->d_stream = (z_stream*)SOAP_MALLOC(soap, sizeof(z_stream)); + if (!soap->d_stream) + return soap->error = SOAP_EOM; + soap->d_stream->zalloc = Z_NULL; + soap->d_stream->zfree = Z_NULL; + soap->d_stream->opaque = Z_NULL; + soap->d_stream->next_in = Z_NULL; + } + if (!soap->z_buf) + soap->z_buf = (char*)SOAP_MALLOC(soap, sizeof(soap->buf)); + if (!soap->z_buf) + return soap->error = SOAP_EOM; + soap->d_stream->next_out = (Byte*)soap->z_buf; + soap->d_stream->avail_out = sizeof(soap->buf); +#ifdef WITH_GZIP + if (soap->zlib_out != SOAP_ZLIB_DEFLATE) + { + (void)soap_memcpy((void*)soap->z_buf, sizeof(soap->buf), (const void*)"\37\213\10\0\0\0\0\0\0\377", 10); + soap->d_stream->next_out = (Byte*)soap->z_buf + 10; + soap->d_stream->avail_out = sizeof(soap->buf) - 10; + soap->z_crc = crc32(0L, NULL, 0); + soap->zlib_out = SOAP_ZLIB_GZIP; + if (soap->z_dict) + *((Byte*)soap->z_buf + 2) = 0xff; + if (deflateInit2(soap->d_stream, soap->z_level, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + } + else +#endif + if (deflateInit(soap->d_stream, soap->z_level) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + if (soap->z_dict) + { + if (deflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflate initialized\n")); + soap->zlib_state = SOAP_ZLIB_DEFLATE; + } +#endif +#ifdef WITH_OPENSSL + if (soap->ssl) + ERR_clear_error(); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin send phase (socket=%d mode=0x%x count=" SOAP_ULONG_FORMAT ")\n", (int)soap->socket, soap->mode, soap->count)); + soap->part = SOAP_BEGIN_SEND; +#ifndef WITH_LEANER + if (soap->fprepareinitsend && (soap->mode & SOAP_IO) == SOAP_IO_STORE && (soap->error = soap->fprepareinitsend(soap)) != SOAP_OK) + return soap->error; +#endif +#ifndef WITH_LEAN + soap->start = (ULONG64)time(NULL); +#endif + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_begin_send(struct soap *soap) +{ +#ifndef WITH_LEANER + if (soap_init_send(soap)) + return soap->error; + return soap_begin_attachments(soap); +#else + return soap_init_send(soap); +#endif +} + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_embedded(struct soap *soap, const void *p, int t) +{ + struct soap_plist *pp; + if (soap_pointer_lookup(soap, p, t, &pp)) + { + pp->mark1 = 1; + pp->mark2 = 1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded %p type=%d mark set to 1\n", p, t)); + } +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_reference(struct soap *soap, const void *p, int t) +{ + struct soap_plist *pp; + 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) + { + pp->mark1 = 2; + pp->mark2 = 2; + } + } + 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; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_array_reference(struct soap *soap, const void *p, const void *a, int n, int t) +{ + struct soap_plist *pp; + if (!p || !a || (!soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH)) || (soap->omode & SOAP_XML_TREE)) + return 1; + if (soap_array_pointer_lookup(soap, p, a, n, t, &pp)) + { + if (pp->mark1 == 0) + { + pp->mark1 = 2; + pp->mark2 = 2; + } + } + else if (!soap_pointer_enter(soap, p, a, n, t, &pp)) + { + return 1; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array reference %p ptr=%p n=%lu t=%d (%d %d)\n", p, a, (unsigned long)n, t, (int)pp->mark1, (int)pp->mark2)); + return pp->mark1; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_attachment_reference(struct soap *soap, const void *p, const void *a, int n, int t, const char *id, const char *type) +{ + struct soap_plist *pp; + if (!p || !a || (!soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH) && !id && !type) || (soap->omode & SOAP_XML_TREE)) + return 1; + if (soap_array_pointer_lookup(soap, p, a, n, t, &pp)) + { + if (pp->mark1 == 0) + { + pp->mark1 = 2; + pp->mark2 = 2; + } + } + else if (!soap_pointer_enter(soap, p, a, n, t, &pp)) + { + return 1; + } + if (id || type) + soap->mode |= SOAP_ENC_DIME; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment reference %p ptr=%p n=%lu t=%d (%d %d)\n", p, a, (unsigned long)n, t, (int)pp->mark1, (int)pp->mark2)); + return pp->mark1; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_embedded_id(struct soap *soap, int id, const void *p, int t) +{ + struct soap_plist *pp = NULL; + if (id >= 0 || (!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 (id < -1) + return soap_embed(soap, p, NULL, 0, t); + if (id < 0) + { + id = soap_pointer_lookup(soap, p, t, &pp); + if (soap->version == 1 && soap->part != SOAP_IN_HEADER) + { + if (id) + { + if ((soap->mode & SOAP_IO_LENGTH)) + pp->mark1 = 2; + else + pp->mark2 = 2; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id multiref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2)); + } + return -1; + } + else if (id) + { + if ((soap->mode & SOAP_IO_LENGTH)) + pp->mark1 = 1; + else + pp->mark2 = 1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id embedded ref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2)); + } + } + return id; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_is_embedded(struct soap *soap, struct soap_plist *pp) +{ + if (!pp) + return 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Is embedded? %d %d\n", (int)pp->mark1, (int)pp->mark2)); + if (soap->version == 1 && soap->encodingStyle && !(soap->omode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER) + { + if ((soap->mode & SOAP_IO_LENGTH)) + return pp->mark1 != 0; + return pp->mark2 != 0; + } + if ((soap->mode & SOAP_IO_LENGTH)) + return pp->mark1 == 1; + return pp->mark2 == 1; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_is_single(struct soap *soap, struct soap_plist *pp) +{ + if (soap->part == SOAP_IN_HEADER) + return 1; + if (!pp) + return 0; + if ((soap->mode & SOAP_IO_LENGTH)) + return pp->mark1 == 0; + return pp->mark2 == 0; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_embedded(struct soap *soap, struct soap_plist *pp) +{ + if (!pp) + return; + if ((soap->mode & SOAP_IO_LENGTH)) + pp->mark1 = 1; + else + pp->mark2 = 1; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_attachment(struct soap *soap, const char *tag, int id, const void *p, const void *a, int n, const char *aid, const char *atype, const char *aoptions, const char *type, int t) +{ + struct soap_plist *pp; + int i; + if (!p || !a || (!aid && !atype) || (!soap->encodingStyle && !(soap->omode & (SOAP_ENC_DIME | SOAP_ENC_MIME | SOAP_ENC_MTOM | SOAP_XML_GRAPH))) || (soap->omode & SOAP_XML_TREE)) + return soap_element_id(soap, tag, id, p, a, n, type, t, NULL); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment tag='%s' id='%s' (%d) type='%s'\n", tag, aid ? aid : SOAP_STR_EOS, id, atype ? atype : SOAP_STR_EOS)); + i = soap_array_pointer_lookup(soap, p, a, n, t, &pp); + if (!i) + { + i = soap_pointer_enter(soap, p, a, n, t, &pp); + if (!i) + { + soap->error = SOAP_EOM; + return -1; + } + } + if (id <= 0) + id = i; + if (!aid) + { + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(soap->dime_id_format) + 20), soap->dime_id_format, id); + aid = soap_strdup(soap, soap->tmpbuf); + if (!aid) + return -1; + } + /* Add MTOM xop:Include element when necessary */ + if ((soap->omode & SOAP_ENC_MTOM) && strcmp(tag, "xop:Include")) + { + if (soap_element(soap, tag, 0, type) + || soap_attribute(soap, "xmlns:xop", "http://www.w3.org/2004/08/xop/include") + || soap_element_start_end_out(soap, NULL) + || soap_element_href(soap, "xop:Include", 0, "href", aid) + || soap_element_end_out(soap, tag)) + return soap->error; + } + else if (soap_element_href(soap, tag, 0, "href", aid)) + { + return soap->error; + } + if ((soap->mode & SOAP_IO_LENGTH)) + { + if (pp->mark1 != 3) + { + struct soap_multipart *content; + if ((soap->omode & SOAP_ENC_MTOM)) + content = soap_alloc_multipart(soap, &soap->mime.first, &soap->mime.last, (const char*)a, n); + else + content = soap_alloc_multipart(soap, &soap->dime.first, &soap->dime.last, (const char*)a, n); + if (!content) + { + soap->error = SOAP_EOM; + return -1; + } + if (!strncmp(aid, "cid:", 4)) /* RFC 2111 */ + { + if ((soap->omode & SOAP_ENC_MTOM)) + { + size_t l = strlen(aid) - 1; + char *s = (char*)soap_malloc(soap, l); + if (s) + { + s[0] = '<'; + (void)soap_strncpy(s + 1, l - 1, aid + 4, l - 3); + s[l - 2] = '>'; + s[l - 1] = '\0'; + content->id = s; + } + } + else + { + content->id = aid + 4; + } + } + else + { + content->id = aid; + } + content->type = atype; + content->options = aoptions; + content->encoding = SOAP_MIME_BINARY; + pp->mark1 = 3; + } + } + else + { + pp->mark2 = 3; + } + return -1; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +static void +soap_init_iht(struct soap *soap) +{ + int i; + for (i = 0; i < SOAP_IDHASH; i++) + soap->iht[i] = NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +static void +soap_free_iht(struct soap *soap) +{ + int i; + struct soap_ilist *ip = NULL, *p = NULL; + struct soap_flist *fp = NULL, *fq = NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free ID hashtable\n")); + for (i = 0; i < SOAP_IDHASH; i++) + { + for (ip = soap->iht[i]; ip; ip = p) + { + for (fp = ip->flist; fp; fp = fq) + { + fq = fp->next; + SOAP_FREE(soap, fp); + } + p = ip->next; + SOAP_FREE(soap, ip); + } + soap->iht[i] = NULL; + } +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +struct soap_ilist * +SOAP_FMAC2 +soap_lookup(struct soap *soap, const char *id) +{ + struct soap_ilist *ip = NULL; + for (ip = soap->iht[soap_hash(id)]; ip; ip = ip->next) + if (!strcmp(ip->id, id)) + return ip; + return NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +struct soap_ilist * +SOAP_FMAC2 +soap_enter(struct soap *soap, const char *id, int t, size_t n) +{ + size_t h; + struct soap_ilist *ip = NULL; + size_t l = strlen(id); + if (sizeof(struct soap_ilist) + l > l && (SOAP_MAXALLOCSIZE <= 0 || sizeof(struct soap_ilist) + l <= SOAP_MAXALLOCSIZE)) + ip = (struct soap_ilist*)SOAP_MALLOC(soap, sizeof(struct soap_ilist) + l); + if (ip) + { + ip->type = t; + ip->size = n; + ip->ptr = NULL; + ip->spine = NULL; + ip->link = NULL; + ip->copy = NULL; + ip->flist = NULL; + ip->smart = NULL; + ip->shaky = 0; + (void)soap_memcpy((char*)ip->id, l + 1, id, l + 1); + h = soap_hash(id); /* h = (HASH(id) % SOAP_IDHASH) so soap->iht[h] is safe */ + ip->next = soap->iht[h]; + soap->iht[h] = ip; + } + return ip; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_malloc(struct soap *soap, size_t n) +{ + char *p; + size_t k = n; + if (SOAP_MAXALLOCSIZE > 0 && n > SOAP_MAXALLOCSIZE) + { + if (soap) + soap->error = SOAP_EOM; + return NULL; + } + if (!soap) + return SOAP_MALLOC(soap, n); + n += sizeof(short); + n += (~n+1) & (sizeof(void*)-1); /* align at 4-, 8- or 16-byte boundary by rounding up */ + if (n + sizeof(void*) + sizeof(size_t) < k) + { + soap->error = SOAP_EOM; + return NULL; + } + p = (char*)SOAP_MALLOC(soap, n + sizeof(void*) + sizeof(size_t)); + if (!p) + { + soap->error = SOAP_EOM; + return NULL; + } + /* set a canary word to detect memory overruns and data corruption */ + *(unsigned short*)(p + n - sizeof(unsigned short)) = (unsigned short)SOAP_CANARY; + /* keep chain of alloced cells for destruction */ + *(void**)(p + n) = soap->alist; + *(size_t*)(p + n + sizeof(void*)) = n; + soap->alist = p + n; + return p; +} + +/******************************************************************************/ + +#ifdef SOAP_MEM_DEBUG +static void +soap_init_mht(struct soap *soap) +{ + int i; + for (i = 0; i < (int)SOAP_PTRHASH; i++) + soap->mht[i] = NULL; +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_MEM_DEBUG +static void +soap_free_mht(struct soap *soap) +{ + int i; + struct soap_mlist *mp, *mq; + for (i = 0; i < (int)SOAP_PTRHASH; i++) + { + for (mp = soap->mht[i]; mp; mp = mq) + { + mq = mp->next; + if (mp->live) + fprintf(stderr, "%s(%d): malloc() = %p not freed (memory leak or forgot to call soap_end()?)\n", mp->file, mp->line, mp->ptr); + free(mp); + } + soap->mht[i] = NULL; + } +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_MEM_DEBUG +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_track_malloc(struct soap *soap, const char *file, int line, size_t size) +{ + void *p = malloc(size); + if (soap) + { + size_t h = soap_hash_ptr(p); + struct soap_mlist *mp = (struct soap_mlist*)malloc(sizeof(struct soap_mlist)); + 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; + mp->line = line; + mp->live = 1; + soap->mht[h] = mp; + } + return p; +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_MEM_DEBUG +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_track_free(struct soap *soap, const char *file, int line, void *p) +{ + if (!soap) + { + free(p); + } + else + { + size_t h = soap_hash_ptr(p); + struct soap_mlist *mp; + for (mp = soap->mht[h]; mp; mp = mp->next) + if (mp->ptr == p) + break; + if (mp) + { + if (mp->live) + { + if (soap->fdebug[SOAP_INDEX_TEST]) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): free(%p)\n", file, line, p)); + } + free(p); + mp->live = 0; + } + else + { + fprintf(stderr, "%s(%d): free(%p) double free of pointer malloced at %s(%d)\n", file, line, p, mp->file, mp->line); + } + } + else + { + fprintf(stderr, "%s(%d): free(%p) pointer not malloced\n", file, line, p); + } + } +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_MEM_DEBUG +static void +soap_track_unlink(struct soap *soap, const void *p) +{ + size_t h = soap_hash_ptr(p); + struct soap_mlist *mp; + for (mp = soap->mht[h]; mp; mp = mp->next) + if (mp->ptr == p) + break; + if (mp) + mp->live = 0; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_dealloc(struct soap *soap, void *p) +{ + if (soap_check_state(soap)) + return; + if (p) + { + char **q; + for (q = (char**)(void*)&soap->alist; *q; q = *(char***)q) + { + if (*(unsigned short*)(char*)(*q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY) + { +#ifdef SOAP_MEM_DEBUG + fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n"); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n")); + DBGHEX(TEST, *q - 200, 200); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n")); + soap->error = SOAP_MOE; + return; + } + if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*)))) + { + *q = **(char***)q; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Freed data at %p\n", p)); + SOAP_FREE(soap, p); + return; + } + } + soap_delete(soap, p); + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free all soap_malloc() data\n")); + while (soap->alist) + { + char *q = (char*)soap->alist; + if (*(unsigned short*)(char*)(q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY) + { +#ifdef SOAP_MEM_DEBUG + fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n"); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n")); + DBGHEX(TEST, q - 200, 200); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n")); + soap->error = SOAP_MOE; + return; + } + soap->alist = *(void**)q; + q -= *(size_t*)(q + sizeof(void*)); + SOAP_FREE(soap, q); + } + /* assume these were deallocated: */ + soap->http_content = NULL; + soap->action = NULL; + soap->fault = NULL; + soap->header = NULL; + soap->bearer = NULL; + soap->userid = NULL; + soap->passwd = NULL; + soap->authrealm = NULL; +#ifdef WITH_NTLM + soap->ntlm_challenge = NULL; +#endif +#ifndef WITH_LEANER + soap_clr_mime(soap); +#endif + } +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_delete(struct soap *soap, void *p) +{ + struct soap_clist **cp; + if (soap_check_state(soap)) + return; + cp = &soap->clist; + if (p) + { + while (*cp) + { + if (p == (*cp)->ptr) + { + struct soap_clist *q = *cp; + *cp = q->next; + if (q->fdelete(soap, q)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: deletion callback failed for object type=%d\n", q->ptr, q->type)); +#ifdef SOAP_MEM_DEBUG + fprintf(stderr, "new(object type=%d) = %p not freed: deletion callback failed\n", q->type, q->ptr); +#endif + } + SOAP_FREE(soap, q); + return; + } + cp = &(*cp)->next; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: address not in list\n", p)); + } + else + { + while (*cp) + { + struct soap_clist *q = *cp; + *cp = q->next; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Delete %p type=%d (cp=%p)\n", q->ptr, q->type, (void*)q)); + if (q->fdelete(soap, q)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: deletion callback failed for object type=%d\n", q->ptr, q->type)); +#ifdef SOAP_MEM_DEBUG + fprintf(stderr, "new(object type=%d) = %p not freed: deletion callback failed\n", q->type, q->ptr); +#endif + } + SOAP_FREE(soap, q); + } + } + soap->fault = NULL; /* assume this was deallocated */ + soap->header = NULL; /* assume this was deallocated */ +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_delegate_deletion(struct soap *soap, struct soap *soap_to) +{ + struct soap_clist *cp; + char **q; +#ifdef SOAP_MEM_DEBUG + void *p; + struct soap_mlist **mp, *mq; + size_t h; +#endif + for (q = (char**)(void*)&soap->alist; *q; q = *(char***)q) + { + if (*(unsigned short*)(char*)(*q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY) + { +#ifdef SOAP_MEM_DEBUG + fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n"); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n")); + DBGHEX(TEST, *q - 200, 200); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n")); + soap->error = SOAP_MOE; + return; + } +#ifdef SOAP_MEM_DEBUG + p = (void*)(*q - *(size_t*)(*q + sizeof(void*))); + h = soap_hash_ptr(p); + for (mp = &soap->mht[h]; *mp; mp = &(*mp)->next) + { + if ((*mp)->ptr == p) + { + mq = *mp; + *mp = mq->next; + mq->next = soap_to->mht[h]; + soap_to->mht[h] = mq; + break; + } + } +#endif + } + *q = (char*)soap_to->alist; + soap_to->alist = soap->alist; + soap->alist = NULL; +#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) + cp = cp->next; + cp->next = soap->clist; + } + else + { + soap_to->clist = soap->clist; + } + soap->clist = NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap_clist * +SOAP_FMAC2 +soap_link(struct soap *soap, int t, int n, int (*fdelete)(struct soap*, struct soap_clist*)) +{ + struct soap_clist *cp = NULL; + if (soap) + { + if (n != SOAP_NO_LINK_TO_DELETE) + { + cp = (struct soap_clist*)SOAP_MALLOC(soap, sizeof(struct soap_clist)); + if (!cp) + { + soap->error = SOAP_EOM; + } + else + { + cp->next = soap->clist; + cp->type = t; + cp->size = n; + cp->ptr = NULL; + cp->fdelete = fdelete; + soap->clist = cp; + } + } + soap->alloced = t; + } + return cp; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_unlink(struct soap *soap, const void *p) +{ + if (soap && p) + { + char **q; + struct soap_clist **cp; + for (q = (char**)(void*)&soap->alist; *q; q = *(char***)q) + { + if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*)))) + { + *q = **(char***)q; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked data %p\n", p)); +#ifdef SOAP_MEM_DEBUG + soap_track_unlink(soap, p); +#endif + return 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 SOAP_OK; /* found and removed from dealloc chain */ + } + } + } + return SOAP_ERR; +} + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_lookup_type(struct soap *soap, const char *id) +{ + struct soap_ilist *ip; + if (id && *id) + { + ip = soap_lookup(soap, id); + if (ip) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup id='%s' type=%d\n", id, ip->type)); + return ip->type; + } + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "lookup type id='%s' NOT FOUND! Need to get it from xsi:type\n", id)); + return 0; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +short +SOAP_FMAC2 +soap_begin_shaky(struct soap *soap) +{ + short f = soap->shaky; + soap->shaky = 1; + return f; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_end_shaky(struct soap *soap, short f) +{ + soap->shaky = f; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +static int +soap_is_shaky(struct soap *soap, void *p) +{ + (void)p; + if (!soap->blist && !soap->shaky) + return 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shaky %p\n", p)); + return 1; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_id_lookup(struct soap *soap, const char *id, void **p, int t, size_t n, unsigned int k, int (*fbase)(int, int)) +{ + struct soap_ilist *ip; + if (!p || !id || !*id) + return p; + ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */ + if (!ip) + { + ip = soap_enter(soap, id, t, n); /* new hash table entry for string id */ + if (!ip) + return NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding first href='%s' type=%d location=%p (%u bytes) level=%u\n", id, t, (void*)p, (unsigned int)n, k)); + *p = NULL; + if (k) + { + int i; + if (k > SOAP_MAXPTRS) + return NULL; + ip->spine = (void**)soap_malloc(soap, SOAP_MAXPTRS * sizeof(void*)); + if (!ip->spine) + return NULL; + ip->spine[0] = NULL; + for (i = 1; i < SOAP_MAXPTRS; i++) + ip->spine[i] = &ip->spine[i - 1]; + *p = &ip->spine[k - 1]; + } + else + { + ip->link = p; + ip->shaky = soap_is_shaky(soap, (void*)p); + } + } + else if (ip->type != t && (!fbase || !fbase(ip->type, t)) && (!fbase || !fbase(t, ip->type) || soap_type_punned(soap, ip))) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup type incompatibility: ref='%s' id-type=%d ref-type=%d\n", id, ip->type, t)); + (void)soap_id_nullify(soap, id); + return NULL; + } + else if (k == 0 && ip->ptr && !ip->shaky) /* when block lists are in use, ip->ptr will change */ + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolved href='%s' type=%d location=%p (%u bytes) level=%u\n", id, t, ip->ptr, (unsigned int)n, k)); + *p = ip->ptr; + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarded href='%s' type=%d location=%p (%u bytes) level=%u\n", id, t, (void*)p, (unsigned int)n, k)); + if (fbase && fbase(t, ip->type) && !soap_type_punned(soap, ip)) + { + ip->type = t; + ip->size = n; + } + *p = NULL; + if (k) + { + if (!ip->spine) + { + int i; + if (k > SOAP_MAXPTRS) + return NULL; + ip->spine = (void**)soap_malloc(soap, SOAP_MAXPTRS * sizeof(void*)); + if (!ip->spine) + return NULL; + ip->spine[0] = NULL; + for (i = 1; i < SOAP_MAXPTRS; i++) + ip->spine[i] = &ip->spine[i - 1]; + } + *p = &ip->spine[k - 1]; + if (ip->ptr && !ip->shaky) + ip->spine[0] = ip->ptr; + } + else + { + void *q = ip->link; + ip->link = p; + ip->shaky = soap_is_shaky(soap, (void*)p); + *p = q; + } + } + return p; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_id_forward(struct soap *soap, const char *href, void *p, size_t i, int t, int tt, size_t n, unsigned int k, void (*finsert)(struct soap*, int, int, void*, size_t, const void*, void**), int (*fbase)(int, int)) +{ + struct soap_ilist *ip; + if (!p || !href || !*href) + return p; + ip = soap_lookup(soap, href); /* lookup pointer to hash table entry for string id */ + if (!ip) + { + ip = soap_enter(soap, href, t, n); /* new hash table entry for string id */ + if (!ip) + return NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New entry href='%s' type=%d size=%lu level=%d location=%p\n", href, t, (unsigned long)n, k, p)); + } + else if ((ip->type != t || ip->size != n) && k == 0) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forward type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n)); + (void)soap_id_nullify(soap, href); + return NULL; + } + if (finsert || n < sizeof(void*)) + { + struct soap_flist *fp = (struct soap_flist*)SOAP_MALLOC(soap, sizeof(struct soap_flist)); + if (!fp) + { + soap->error = SOAP_EOM; + return NULL; + } + if (fbase && fbase(t, ip->type) && !soap_type_punned(soap, ip)) + { + ip->type = t; + ip->size = n; + } + if ((ip->type != t || ip->size != n) && (!fbase || !fbase(ip->type, t))) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forward type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n)); + SOAP_FREE(soap, fp); + (void)soap_id_nullify(soap, href); + return NULL; + } + fp->next = ip->flist; + fp->type = tt; + fp->ptr = p; + fp->level = k; + fp->index = i; + fp->finsert = finsert; + ip->flist = fp; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding type=%d (target type=%d) size=%lu location=%p level=%u index=%lu href='%s'\n", t, tt, (unsigned long)n, p, k, (unsigned long)i, href)); + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding copying address %p for type=%d href='%s'\n", p, t, href)); + *(void**)p = ip->copy; + ip->copy = p; + } + ip->shaky = soap_is_shaky(soap, p); + return p; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +void* +SOAP_FMAC2 +soap_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*), int (*fbase)(int, int)) +{ +#ifndef WITH_NOIDREF + struct soap_ilist *ip; +#endif + (void)id; (void)fbase; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enter id='%s' type=%d location=%p size=%lu\n", id, t, p, (unsigned long)n)); + soap->alloced = 0; + if (!p) + { + if (finstantiate) + { + p = finstantiate(soap, t, type, arrayType, &n); /* soap->alloced is set in soap_link() */ + t = soap->alloced; + } + else + { + p = soap_malloc(soap, n); + soap->alloced = t; + } + } +#ifndef WITH_NOIDREF + if (!id || !*id) +#endif + return p; +#ifndef WITH_NOIDREF + ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup entry id='%s' for location=%p type=%d\n", id, p, t)); + if (!ip) + { + ip = soap_enter(soap, id, t, n); /* new hash table entry for string id */ + if (!ip) + return NULL; + ip->ptr = p; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New entry id='%s' type=%d size=%lu location=%p\n", id, t, (unsigned long)n, p)); + if (!soap->alloced) + ip->shaky = soap_is_shaky(soap, p); + } + else if (ip->ptr) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Multiply defined id='%s'\n", id)); + soap_strcpy(soap->id, sizeof(soap->id), id); + soap->error = SOAP_DUPLICATE_ID; + return NULL; + } + else if ((ip->type != t && (!fbase || !fbase(t, ip->type) || soap_type_punned(soap, ip))) + || (ip->type == t && ip->size != n && soap_type_punned(soap, ip))) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enter type incompatibility id='%s' expect type=%d size=%lu got type=%d size=%lu\n", id, ip->type, (unsigned long)ip->size, t, (unsigned long)n)); + (void)soap_id_nullify(soap, id); + return NULL; + } + else + { + ip->type = t; + ip->size = n; + ip->ptr = p; + if (!soap->alloced) + ip->shaky = soap_is_shaky(soap, p); + if (soap->alloced || !ip->shaky) + { + void **q; /* ptr will not change later, so resolve links now */ + if (ip->spine) + ip->spine[0] = p; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s' type=%d\n", ip->id, ip->type)); + q = (void**)ip->link; + while (q) + { + void *r = *q; + *q = p; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... link %p -> %p\n", (void*)q, p)); + q = (void**)r; + } + ip->link = NULL; + } + } + return ip->ptr; +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +void** +SOAP_FMAC2 +soap_id_smart(struct soap *soap, const char *id, int t, size_t n) +{ + (void)soap; (void)id; (void)t; (void)n; +#ifndef WITH_NOIDREF + if (id && *id) + { + struct soap_ilist *ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */ + if (!ip) + { + ip = soap_enter(soap, id, t, n); /* new hash table entry for string id */ + if (!ip) + return NULL; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New smart shared pointer entry id='%s' type=%d size=%lu smart=%p\n", id, t, (unsigned long)n, ip->smart)); + return &ip->smart; + } +#endif + return NULL; +} + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +static int +soap_type_punned(struct soap *soap, const struct soap_ilist *ip) +{ + const struct soap_flist *fp; + (void)soap; + if (ip->ptr || ip->copy) + return 1; + for (fp = ip->flist; fp; fp = fp->next) + if (fp->level == 0) + return 1; + return 0; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIDREF +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_id_nullify(struct soap *soap, const char *id) +{ + int i; + for (i = 0; i < SOAP_IDHASH; i++) + { + struct soap_ilist *ip; + for (ip = soap->iht[i]; ip; ip = ip->next) + { + void *p, *q; + for (p = ip->link; p; p = q) + { + q = *(void**)p; + *(void**)p = NULL; + } + ip->link = NULL; + } + } + soap_strcpy(soap->id, sizeof(soap->id), id); + return soap->error = SOAP_HREF; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_end_send(struct soap *soap) +{ +#ifndef WITH_LEANER + int err = soap_end_attachments(soap); + if (soap->dime.list) + { + /* SOAP body referenced attachments must appear first */ + soap->dime.last->next = soap->dime.first; + soap->dime.first = soap->dime.list->next; + soap->dime.list->next = NULL; + soap->dime.last = soap->dime.list; + } + if (!err) + err = soap_putdime(soap); + if (!err) + err = soap_putmime(soap); + soap->mime.list = NULL; + soap->mime.first = NULL; + soap->mime.last = NULL; + soap->dime.list = NULL; + soap->dime.first = NULL; + soap->dime.last = NULL; + if (err) + return err; +#endif + return soap_end_send_flush(soap); +} + +/******************************************************************************/ + +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 + { + if ((soap->mode & SOAP_ENC_ZLIB) && soap->zlib_state == SOAP_ZLIB_DEFLATE) + { + soap->zlib_state = SOAP_ZLIB_NONE; + deflateEnd(soap->d_stream); + } + return soap->error; + } +#else + return soap->error; +#endif +#ifdef WITH_ZLIB + if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream) + { + int r; + soap->d_stream->avail_in = 0; + do + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating remainder\n")); + r = deflate(soap->d_stream, Z_FINISH); + if (soap->d_stream->avail_out != sizeof(soap->buf)) + { + if (soap_flush_raw(soap, soap->z_buf, sizeof(soap->buf) - soap->d_stream->avail_out)) + { + soap->zlib_state = SOAP_ZLIB_NONE; + deflateEnd(soap->d_stream); + return soap->error; + } + soap->d_stream->next_out = (Byte*)soap->z_buf; + soap->d_stream->avail_out = sizeof(soap->buf); + } + } while (r == Z_OK); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflated total %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out)); + soap->z_ratio_out = (float)soap->d_stream->total_out / (float)soap->d_stream->total_in; + soap->mode &= ~SOAP_ENC_ZLIB; + soap->zlib_state = SOAP_ZLIB_NONE; + if (deflateEnd(soap->d_stream) != Z_OK || r != Z_STREAM_END) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to end deflate: %s\n", soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS)); + return soap->error = SOAP_ZLIB_ERROR; + } +#ifdef WITH_GZIP + if (soap->zlib_out != SOAP_ZLIB_DEFLATE) + { + soap->z_buf[0] = soap->z_crc & 0xFF; + soap->z_buf[1] = (soap->z_crc >> 8) & 0xFF; + soap->z_buf[2] = (soap->z_crc >> 16) & 0xFF; + soap->z_buf[3] = (soap->z_crc >> 24) & 0xFF; + soap->z_buf[4] = soap->d_stream->total_in & 0xFF; + soap->z_buf[5] = (soap->d_stream->total_in >> 8) & 0xFF; + soap->z_buf[6] = (soap->d_stream->total_in >> 16) & 0xFF; + soap->z_buf[7] = (soap->d_stream->total_in >> 24) & 0xFF; + if (soap_flush_raw(soap, soap->z_buf, 8)) + return soap->error; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip crc32=%lu\n", (unsigned long)soap->z_crc)); + } +#endif + } +#endif + if ((soap->mode & SOAP_IO) == SOAP_IO_STORE) + { +#if !defined(__cplusplus) || defined(WITH_COMPAT) + if (soap->os) + { + char *b = (char*)soap_push_block(soap, NULL, 1); + if (b) + { + *b = '\0'; + *soap->os = (char*)soap_save_block(soap, NULL, NULL, 0); + } + } + else +#endif + { + char *p; +#ifndef WITH_NOHTTP + if (!(soap->mode & SOAP_ENC_PLAIN)) + { + soap->mode--; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending buffered message of length %u\n", (unsigned int)soap->blist->size)); + if (soap->status >= SOAP_POST) + soap->error = soap->fpost(soap, soap->endpoint, soap->host, soap->port, soap->path, soap->action, soap->blist->size); + else if (soap->status != SOAP_STOP) + soap->error = soap->fresponse(soap, soap->status, soap->blist->size); + if (soap->error || soap_flush(soap)) + return soap->error; + soap->mode++; + } +#endif + for (p = soap_first_block(soap, NULL); p; p = soap_next_block(soap, NULL)) + { + DBGMSG(SENT, p, soap_block_size(soap, NULL)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Send %u bytes to socket=%d/fd=%d\n", (unsigned int)soap_block_size(soap, NULL), (int)soap->socket, soap->sendfd)); + soap->error = soap->fsend(soap, p, soap_block_size(soap, NULL)); + if (soap->error) + { + soap_end_block(soap, NULL); + return soap->error; + } + } + soap_end_block(soap, NULL); + } +#ifndef WITH_LEANER + if (soap->fpreparefinalsend && (soap->error = soap->fpreparefinalsend(soap)) != SOAP_OK) + return soap->error; +#endif + if ((soap->omode & SOAP_IO) == SOAP_IO_STORE && (soap->imode & SOAP_IO) != SOAP_IO_STORE) + soap->omode = (soap->omode & ~SOAP_IO) | (soap->imode & SOAP_IO); + } +#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", (int)soap->socket, soap->sendfd)); + soap->error = soap->fsend(soap, "\r\n0\r\n\r\n", 7); + if (soap->error) + return soap->error; + } +#endif + } +#ifdef WITH_TCPFIN +#if defined(WITH_OPENSSL) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) + if (!soap->ssl) +#endif + if (soap_valid_socket(soap->socket) && !soap->keep_alive && !(soap->omode & SOAP_IO_UDP)) + (void)soap->fshutdownsocket(soap, soap->socket, SOAP_SHUT_WR); /* Send TCP FIN */ +#endif +#if defined(__cplusplus) && !defined(WITH_COMPAT) + if (soap->os) + soap->os->flush(); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of send phase\n")); + soap->omode &= ~SOAP_SEC_WSUID; + soap->count = 0; + soap->part = SOAP_END; + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_end_recv(struct soap *soap) +{ + soap->part = SOAP_END; +#ifndef WITH_LEAN + soap->wsuid = NULL; /* reset before next send */ + soap->c14nexclude = NULL; /* reset before next send */ + soap->c14ninclude = 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; + return soap->error; + } + soap->dime.list = soap->dime.first; + soap->dime.first = NULL; + soap->dime.last = NULL; + /* Check if MIME attachments and mime-post-check flag is set, if so call soap_resolve() and return */ + if ((soap->mode & SOAP_ENC_MIME)) + { + if ((soap->mode & SOAP_MIME_POSTCHECK)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Post checking MIME attachments\n")); + if (!soap->keep_alive) + soap->keep_alive = -2; /* special case to keep alive */ +#ifndef WITH_NOIDREF + soap_resolve(soap); +#endif + return SOAP_OK; + } + if (soap_getmime(soap)) + return soap->error; + } + soap->mime.list = soap->mime.first; + soap->mime.first = NULL; + soap->mime.last = NULL; + soap->mime.boundary = NULL; + if (soap->xlist) + { + struct soap_multipart *content; + for (content = soap->mime.list; content; content = content->next) + soap_resolve_attachment(soap, content); + } +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of receive message ok\n")); +#ifdef WITH_ZLIB + if ((soap->mode & SOAP_ENC_ZLIB) && soap->d_stream) + { + /* Make sure end of compressed content is reached */ + while (soap->d_stream->next_out != Z_NULL) + if ((int)soap_get1(soap) == EOF) + break; + soap->mode &= ~SOAP_ENC_ZLIB; + (void)soap_memcpy((void*)soap->buf, sizeof(soap->buf), (const void*)soap->z_buf, sizeof(soap->buf)); + soap->bufidx = (char*)soap->d_stream->next_in - soap->z_buf; + soap->buflen = soap->z_buflen; + soap->zlib_state = SOAP_ZLIB_NONE; + if (inflateEnd(soap->d_stream) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate end ok\n")); +#ifdef WITH_GZIP + if (soap->zlib_in == SOAP_ZLIB_GZIP) + { + soap_wchar c; + short i; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate gzip crc check\n")); + for (i = 0; i < 8; i++) + { + if ((int)(c = soap_get1(soap)) == EOF) + { + 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 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 inflate error: incorrect message length\n")); + return soap->error = SOAP_ZLIB_ERROR; + } + } + soap->zlib_in = SOAP_ZLIB_NONE; +#endif + } +#endif + if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) + while ((int)soap->ahead != EOF && !soap_recv_raw(soap)) + continue; +#ifndef WITH_NOIDREF + if (soap_resolve(soap)) + return soap->error; +#endif +#ifndef WITH_LEANER + if (soap->xlist) + { + if ((soap->mode & SOAP_ENC_MTOM)) + return soap->error = SOAP_MIME_HREF; + return soap->error = SOAP_DIME_HREF; + } +#endif + soap_free_ns(soap); +#ifndef WITH_LEANER + if (soap->fpreparefinalrecv) + return soap->error = soap->fpreparefinalrecv(soap); +#endif + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_free_temp(struct soap *soap) +{ + struct soap_attribute *tp, *tq; + struct Namespace *ns; + soap_free_ns(soap); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free any remaining temp blocks\n")); + while (soap->blist) + soap_end_block(soap, NULL); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute storage\n")); + for (tp = soap->attributes; tp; tp = tq) + { + tq = tp->next; + if (tp->value) + SOAP_FREE(soap, tp->value); + SOAP_FREE(soap, tp); + } + soap->attributes = NULL; +#ifdef WITH_FAST + if (soap->labbuf) + SOAP_FREE(soap, soap->labbuf); + soap->labbuf = NULL; + soap->lablen = 0; + soap->labidx = 0; +#endif + ns = soap->local_namespaces; + if (ns) + { + for (; ns->id; ns++) + { + if (ns->out) + { + SOAP_FREE(soap, ns->out); + ns->out = NULL; + } + } + SOAP_FREE(soap, soap->local_namespaces); + soap->local_namespaces = NULL; + } +#ifndef WITH_LEANER + while (soap->xlist) + { + struct soap_xlist *xp = soap->xlist->next; + SOAP_FREE(soap, soap->xlist); + soap->xlist = xp; + } +#endif +#ifndef WITH_NOIDREF + soap_free_iht(soap); +#endif + soap_free_pht(soap); +} + +/******************************************************************************/ + +static void +soap_free_ns(struct soap *soap) +{ + struct soap_nlist *np, *nq; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free namespace stack\n")); + for (np = soap->nlist; np; np = nq) + { + nq = np->next; + SOAP_FREE(soap, np); + } + soap->nlist = NULL; +} + +/******************************************************************************/ + +#ifdef SOAP_DEBUG +static void +soap_init_logs(struct soap *soap) +{ + int i; + for (i = 0; i < SOAP_MAXLOGS; i++) + { + soap->logfile[i] = NULL; + soap->fdebug[i] = NULL; + } +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_DEBUG +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_open_logfile(struct soap *soap, int i) +{ + if (soap->logfile[i]) + soap->fdebug[i] = fopen(soap->logfile[i], i < 2 ? "ab" : "a"); +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_DEBUG +static void +soap_close_logfile(struct soap *soap, int i) +{ + if (soap->fdebug[i]) + { + fclose(soap->fdebug[i]); + soap->fdebug[i] = NULL; + } +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_DEBUG +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_close_logfiles(struct soap *soap) +{ + int i; + for (i = 0; i < SOAP_MAXLOGS; i++) + soap_close_logfile(soap, i); +} +#endif + +/******************************************************************************/ + +#ifdef SOAP_DEBUG +static void +soap_set_logfile(struct soap *soap, int i, const char *logfile) +{ + const char *s; + char *t = NULL; + soap_close_logfile(soap, i); + s = soap->logfile[i]; + if (s) + SOAP_FREE_UNMANAGED(s); + if (logfile) + { + size_t l = strlen(logfile) + 1; + t = (char*)SOAP_MALLOC_UNMANAGED(l); + if (t) + (void)soap_memcpy((void*)t, l, (const void*)logfile, l); + } + soap->logfile[i] = t; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_recv_logfile(struct soap *soap, const char *logfile) +{ + (void)soap; (void)logfile; +#ifdef SOAP_DEBUG + soap_set_logfile(soap, SOAP_INDEX_RECV, logfile); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_sent_logfile(struct soap *soap, const char *logfile) +{ + (void)soap; (void)logfile; +#ifdef SOAP_DEBUG + soap_set_logfile(soap, SOAP_INDEX_SENT, logfile); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_test_logfile(struct soap *soap, const char *logfile) +{ + (void)soap; (void)logfile; +#ifdef SOAP_DEBUG + soap_set_logfile(soap, SOAP_INDEX_TEST, logfile); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap* +SOAP_FMAC2 +soap_copy(const struct soap *soap) +{ + struct soap *copy = soap_versioning(soap_new)(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); + soap_set_test_logfile(copy, NULL); + soap_set_sent_logfile(copy, NULL); + soap_set_recv_logfile(copy, NULL); + soap_done(copy); + if (soap_copy_context(copy, soap) != NULL) + return copy; + soap_free(copy); + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap* +SOAP_FMAC2 +soap_copy_context(struct soap *copy, const struct soap *soap) +{ + if (copy == soap) + return copy; + if (soap_check_state(soap)) + return NULL; + if (copy) + { + struct soap_plugin *p = NULL; + (void)soap_memcpy((void*)copy, sizeof(struct soap), (const void*)soap, sizeof(struct soap)); + copy->state = SOAP_COPY; +#ifdef SOAP_MEM_DEBUG + soap_init_mht(copy); +#endif +#ifdef SOAP_DEBUG + soap_init_logs(copy); + soap_set_test_logfile(copy, soap->logfile[SOAP_INDEX_TEST]); + soap_set_sent_logfile(copy, soap->logfile[SOAP_INDEX_SENT]); + soap_set_recv_logfile(copy, soap->logfile[SOAP_INDEX_RECV]); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying context\n")); + copy->error = SOAP_OK; + copy->bearer = NULL; + copy->userid = NULL; + copy->passwd = NULL; +#ifdef WITH_NTLM + copy->ntlm_challenge = NULL; +#endif + copy->nlist = NULL; + copy->blist = NULL; + copy->clist = NULL; + copy->alist = NULL; + copy->attributes = NULL; + copy->labbuf = NULL; + copy->lablen = 0; + copy->labidx = 0; + 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 */ + copy->c_locale = NULL; +#ifdef WITH_OPENSSL + copy->bio = NULL; + copy->ssl = NULL; + copy->session = NULL; + copy->session_host[0] = '\0'; + copy->session_port = 443; +#endif +#ifdef WITH_WOLFSSL + copy->ssl = NULL; +#endif +#ifdef WITH_GNUTLS + copy->session = NULL; +#endif +#ifdef WITH_ZLIB + copy->d_stream = NULL; + copy->z_buf = NULL; +#endif +#ifndef WITH_NOIDREF + soap_init_iht(copy); +#endif + soap_init_pht(copy); + copy->header = NULL; + copy->fault = NULL; + copy->action = NULL; +#ifndef WITH_LEAN +#ifdef WITH_COOKIES + copy->cookies = soap_copy_cookies(copy, soap); +#else + copy->cookies = NULL; +#endif +#endif + copy->plugins = NULL; + for (p = soap->plugins; p; p = p->next) + { + struct soap_plugin *q = (struct soap_plugin*)SOAP_MALLOC(copy, sizeof(struct soap_plugin)); + if (!q) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not allocate plugin '%s'\n", p->id)); + soap_end(copy); + soap_done(copy); + return NULL; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying plugin '%s'\n", p->id)); + *q = *p; + if (p->fcopy && (copy->error = p->fcopy(copy, q, p)) != SOAP_OK) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not copy plugin '%s' error = %d\n", p->id, copy->error)); + SOAP_FREE(copy, q); + soap_end(copy); + soap_done(copy); + return NULL; + } + q->next = copy->plugins; + copy->plugins = q; + } + } +#ifdef WITH_SELF_PIPE + pipe(copy->pipe_fd); + SOAP_SOCKNONBLOCK(copy->pipe_fd[0]) + SOAP_SOCKNONBLOCK(copy->pipe_fd[1]) +#endif + return copy; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_copy_stream(struct soap *copy, struct soap *soap) +{ + 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->socket = soap->socket; + copy->sendsk = soap->sendsk; + copy->recvsk = soap->recvsk; + copy->transfer_timeout = soap->transfer_timeout; + copy->recv_maxlength = soap->recv_maxlength; + copy->recv_timeout = soap->recv_timeout; + copy->send_timeout = soap->send_timeout; + copy->connect_timeout = soap->connect_timeout; + copy->accept_timeout = soap->accept_timeout; + copy->socket_flags = soap->socket_flags; + copy->connect_flags = soap->connect_flags; + copy->connect_retry = soap->connect_retry; + copy->bind_flags = soap->bind_flags; + copy->bind_inet6 = soap->bind_inet6; + copy->bind_v6only = soap->bind_v6only; + copy->accept_flags = soap->accept_flags; + copy->sndbuf = soap->sndbuf; + copy->rcvbuf = soap->rcvbuf; + copy->linger_time = soap->linger_time; + copy->maxlevel = soap->maxlevel; + copy->maxlength = soap->maxlength; + copy->maxoccurs = soap->maxoccurs; + copy->os = soap->os; + copy->is = soap->is; + copy->sendfd = soap->sendfd; + copy->recvfd = soap->recvfd; + copy->bufidx = soap->bufidx; + copy->buflen = soap->buflen; + copy->ahead = soap->ahead; + copy->cdata = soap->cdata; + copy->chunksize = soap->chunksize; + copy->chunkbuflen = soap->chunkbuflen; + copy->keep_alive = soap->keep_alive; + copy->tcp_keep_alive = soap->tcp_keep_alive; + copy->tcp_keep_idle = soap->tcp_keep_idle; + copy->tcp_keep_intvl = soap->tcp_keep_intvl; + copy->tcp_keep_cnt = soap->tcp_keep_cnt; + copy->max_keep_alive = soap->max_keep_alive; +#ifndef WITH_NOIO + copy->peer = soap->peer; + copy->peerlen = soap->peerlen; + copy->ip = soap->ip; + copy->ip6[0] = soap->ip6[0]; + copy->ip6[1] = soap->ip6[1]; + copy->ip6[2] = soap->ip6[2]; + copy->ip6[3] = soap->ip6[3]; + copy->port = soap->port; + (void)soap_memcpy((void*)copy->host, sizeof(copy->host), (const void*)soap->host, sizeof(soap->host)); + (void)soap_memcpy((void*)copy->endpoint, sizeof(copy->endpoint), (const void*)soap->endpoint, sizeof(soap->endpoint)); +#endif +#ifdef WITH_OPENSSL + copy->bio = soap->bio; + copy->ssl = soap->ssl; + copy->ctx = soap->ctx; +#endif +#ifdef WITH_GNUTLS + copy->session = soap->session; +#endif +#ifdef WITH_WOLFSSL + copy->ssl = soap->ssl; + copy->ctx = soap->ctx; +#endif +#ifdef WITH_SYSTEMSSL + copy->ssl = soap->ssl; + copy->ctx = soap->ctx; +#endif +#ifdef WITH_ZLIB + copy->zlib_state = soap->zlib_state; + copy->zlib_in = soap->zlib_in; + copy->zlib_out = soap->zlib_out; + if (soap->d_stream && soap->zlib_state != SOAP_ZLIB_NONE) + { + if (!copy->d_stream) + copy->d_stream = (z_stream*)SOAP_MALLOC(copy, sizeof(z_stream)); + if (copy->d_stream) + (void)soap_memcpy((void*)copy->d_stream, sizeof(z_stream), (const void*)soap->d_stream, sizeof(z_stream)); + } + copy->z_crc = soap->z_crc; + copy->z_ratio_in = soap->z_ratio_in; + copy->z_ratio_out = soap->z_ratio_out; + copy->z_level = soap->z_level; + if (soap->z_buf && soap->zlib_state != SOAP_ZLIB_NONE) + { + if (!copy->z_buf) + copy->z_buf = (char*)SOAP_MALLOC(copy, sizeof(soap->buf)); + if (copy->z_buf) + (void)soap_memcpy((void*)copy->z_buf, sizeof(soap->buf), (const void*)soap->z_buf, sizeof(soap->buf)); + else + copy->z_buflen = 0; + } + else + { + copy->z_buf = NULL; + copy->z_buflen = 0; + } + copy->z_dict = soap->z_dict; + copy->z_dict_len = soap->z_dict_len; +#endif + (void)soap_memcpy((void*)copy->buf, sizeof(copy->buf), (const void*)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) + { + struct soap_nlist *np = NULL, *nq; + /* copy reversed nlist */ + for (nq = soap->nlist; nq; nq = nq->next) + { + 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) + { + np = nr; + break; + } + (void)soap_memcpy((void*)np, n, (const void*)nq, n); + np->next = nr; + } + while (np) + { + 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) + (void)soap_push_namespace(copy, np->id, s); + nq = np; + np = np->next; + SOAP_FREE(copy, nq); + } + } + (void)soap_memcpy((void*)copy->tag, sizeof(copy->tag), (const void*)soap->tag, sizeof(soap->tag)); + (void)soap_memcpy((void*)copy->id, sizeof(copy->id), (const void*)soap->id, sizeof(soap->id)); + (void)soap_memcpy((void*)copy->href, sizeof(copy->href), (const void*)soap->href, sizeof(soap->href)); + (void)soap_memcpy((void*)copy->type, sizeof(copy->type), (const void*)soap->type, sizeof(soap->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); + (void)soap_memcpy((void*)tp, n, (const void*)tq, n); + if (tp->size) + { + tp->value = (char*)SOAP_MALLOC(copy, tp->size); + if (tp->value) + (void)soap_memcpy((void*)tp->value, tp->size, (const void*)tq->value, tp->size); + } + tp->ns = NULL; + tp->next = tr; + } + copy->attributes = tp; +} + +/******************************************************************************/ + +SOAP_FMAC1 +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->ssl = NULL; + soap->ctx = NULL; +#endif +#ifdef WITH_GNUTLS + soap->xcred = NULL; + soap->acred = NULL; + soap->cache = NULL; + soap->session = NULL; + soap->dh_params = NULL; + soap->rsa_params = NULL; +#endif +#ifdef WITH_WOLFSSL + soap->ssl = NULL; + soap->ctx = NULL; +#endif +#ifdef WITH_SYSTEMSSL + soap->ssl = (gsk_handle)NULL; + soap->ctx = (gsk_handle)NULL; +#endif +#ifdef WITH_ZLIB + if (soap->z_buf) + SOAP_FREE(soap, soap->z_buf); + soap->z_buf = NULL; +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_initialize(struct soap *soap) +{ + soap_versioning(soap_init)(soap, SOAP_IO_DEFAULT, SOAP_IO_DEFAULT); +} + +/******************************************************************************/ + +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 +#ifdef SOAP_DEBUG + soap_init_logs(soap); +#endif +#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 +#ifdef WITH_SELF_PIPE + pipe(soap->pipe_fd); + SOAP_SOCKNONBLOCK(soap->pipe_fd[0]) + SOAP_SOCKNONBLOCK(soap->pipe_fd[1]) +#endif + soap->version = 0; + soap->imode = imode; + soap->omode = omode; + soap->mode = imode; + soap->plugins = NULL; + soap->user = NULL; + for (i = 0; i < sizeof(soap->data)/sizeof(*soap->data); i++) + soap->data[i] = NULL; + soap->bearer = 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->fget = http_get; + soap->fput = http_put; + soap->fpatch = http_patch; + soap->fdel = http_del; + soap->fopt = http_200; + soap->fhead = http_200; + soap->fform = NULL; + soap->fposthdr = http_post_header; + soap->fresponse = http_response; + soap->fparse = http_parse; + soap->fparsehdr = http_parse_header; +#endif + soap->fheader = NULL; + soap->fconnect = NULL; + soap->fdisconnect = NULL; +#ifndef WITH_NOIO + soap->ipv6_multicast_if = 0; /* 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 */ + soap->client_addr = NULL; /* client address (IPv4 or IPv6 or host name) to bind before connect, NULL for none */ + soap->client_addr_ipv6 = NULL; /* client address IPv6 or host name to bind before connect, NULL for none */ + soap->client_port = -1; /* client port to bind before connect, -1 for none */ + soap->client_interface = NULL; /* client interface address, NULL for none */ +#ifndef WITH_IPV6 + soap->fresolve = tcp_gethost; +#else + soap->fresolve = NULL; +#endif + soap->faccept = tcp_accept; + soap->fopen = tcp_connect; + soap->fclose = tcp_disconnect; + soap->fclosesocket = tcp_closesocket; + soap->fshutdownsocket = tcp_shutdownsocket; + soap->fsend = fsend; + soap->frecv = frecv; + soap->fpoll = soap_poll; +#else + soap->fopen = NULL; + soap->fclose = NULL; + soap->fpoll = NULL; +#endif + soap->fseterror = NULL; + soap->fignore = NULL; + soap->fencoding = NULL; + soap->fserveloop = NULL; + soap->fplugin = fplugin; +#ifndef WITH_LEANER + soap->fsvalidate = NULL; + soap->fwvalidate = NULL; + 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; + soap->fdimewriteclose = NULL; + soap->fdimeread = NULL; + soap->fdimewrite = NULL; + soap->fmimereadopen = NULL; + soap->fmimewriteopen = NULL; + soap->fmimereadclose = NULL; + soap->fmimewriteclose = NULL; + soap->fmimeread = NULL; + soap->fmimewrite = NULL; +#endif + soap->float_format = "%.9G"; /* Alternative: use "%G" */ + soap->double_format = "%.17lG"; /* Alternative: use "%lG" */ + soap->long_double_format = NULL; /* Defined in custom serializer custom/long_double.c */ + soap->dime_id_format = "cid:id%d"; /* default DIME id format for int id index */ + soap->recv_maxlength = 0x7FFFFFFF; /* default max length of messages received (2GB) */ + soap->recv_timeout = 0; + soap->send_timeout = 0; + soap->transfer_timeout = 0; + soap->connect_timeout = 0; + soap->accept_timeout = 0; + soap->socket_flags = 0; + soap->connect_flags = 0; + soap->connect_retry = 0; + soap->bind_flags = 0; +#ifdef WITH_IPV6_V6ONLY + soap->bind_inet6 = 1; + soap->bind_v6only = 1; +#else + soap->bind_inet6 = 0; + soap->bind_v6only = 0; +#endif + soap->accept_flags = 0; +#ifdef WIN32 + soap->sndbuf = SOAP_BUFLEN + 1; /* this size speeds up windows xfer */ + soap->rcvbuf = SOAP_BUFLEN + 1; +#else + soap->sndbuf = SOAP_BUFLEN; + soap->rcvbuf = SOAP_BUFLEN; +#endif + soap->linger_time = 0; + soap->maxlevel = SOAP_MAXLEVEL; + soap->maxlength = SOAP_MAXLENGTH; + soap->maxoccurs = SOAP_MAXOCCURS; + soap->http_version = "1.1"; + soap->proxy_http_version = "1.0"; + soap->http_content = NULL; + soap->http_extra_header = NULL; + soap->actor = NULL; + soap->lang = "en"; + soap->keep_alive = 0; + soap->tcp_keep_alive = 0; + soap->tcp_keep_idle = 0; + soap->tcp_keep_intvl = 0; + soap->tcp_keep_cnt = 0; + soap->max_keep_alive = SOAP_MAXKEEPALIVE; + soap->ip = 0; + soap->ip6[0] = 0; + soap->ip6[1] = 0; + soap->ip6[2] = 0; + soap->ip6[3] = 0; + soap->labbuf = NULL; + soap->lablen = 0; + soap->labidx = 0; + soap->encodingStyle = NULL; +#ifndef WITH_NONAMESPACES + soap->namespaces = namespaces; +#else + soap->namespaces = NULL; +#endif + soap->local_namespaces = NULL; + soap->nlist = NULL; + soap->blist = NULL; + soap->clist = NULL; + soap->alist = NULL; + soap->shaky = 0; + soap->attributes = NULL; + soap->header = NULL; + 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 + soap->dom = NULL; + soap->dime.list = NULL; + soap->dime.first = NULL; + soap->dime.last = NULL; + soap->mime.list = NULL; + soap->mime.first = NULL; + soap->mime.last = NULL; + soap->mime.boundary = NULL; + soap->mime.start = NULL; + soap->xlist = NULL; +#endif +#ifndef UNDER_CE + soap->recvfd = 0; + soap->sendfd = 1; +#else + soap->recvfd = stdin; + soap->sendfd = stdout; +#endif + soap->tag[0] = '\0'; + soap->id[0] = '\0'; + soap->href[0] = '\0'; + soap->type[0] = '\0'; + soap->arrayType[0] = '\0'; + soap->arraySize[0] = '\0'; + soap->arrayOffset[0] = '\0'; + soap->endpoint[0] = '\0'; + soap->host[0] = '\0'; + soap->path[0] = '\0'; + soap->port = 0; + soap->override_host = NULL; + soap->override_port = 0; + soap->action = NULL; + soap->proxy_host = NULL; + soap->proxy_port = 8080; + soap->proxy_userid = NULL; + soap->proxy_passwd = NULL; + soap->proxy_from = NULL; + soap->origin = NULL; + soap->cors_origin = NULL; + soap->cors_allow = "*"; + soap->cors_method = NULL; + soap->cors_header = NULL; + soap->cors_methods = NULL; + soap->cors_headers = NULL; + soap->x_frame_options = "SAMEORIGIN"; + soap->prolog = "\n"; + soap->zlib_state = SOAP_ZLIB_NONE; + soap->zlib_in = SOAP_ZLIB_NONE; + soap->zlib_out = SOAP_ZLIB_NONE; + soap->d_stream = NULL; + soap->z_buf = NULL; + soap->z_level = 6; + soap->z_dict = NULL; + soap->z_dict_len = 0; +#ifndef WITH_LEAN + soap->wsuid = NULL; + soap->c14nexclude = NULL; + soap->c14ninclude = NULL; + soap->cookies = NULL; + soap->cookie_domain = NULL; + soap->cookie_path = NULL; + soap->cookie_max = 32; +#endif +#ifdef WMW_RPM_IO + soap->rpmreqid = NULL; +#endif +#ifndef WITH_NOIDREF + soap_init_iht(soap); +#endif + soap_init_pht(soap); +#ifdef WITH_OPENSSL + if (!soap_ssl_init_done) + soap_ssl_init(); + soap->fsslauth = ssl_auth_init; + soap->fsslverify = NULL; + soap->bio = NULL; + soap->ssl = NULL; + soap->ctx = NULL; + soap->session = NULL; + soap->dhfile = NULL; + soap->randfile = NULL; + soap->session_host[0] = '\0'; + soap->session_port = 443; + soap->ssl_flags = SOAP_SSL_DEFAULT; + soap->keyfile = NULL; + soap->keyid = NULL; + soap->password = NULL; + soap->cafile = NULL; + soap->capath = NULL; + soap->crlfile = NULL; +#endif +#ifdef WITH_GNUTLS + if (!soap_ssl_init_done) + soap_ssl_init(); + soap->fsslauth = ssl_auth_init; + soap->fsslverify = NULL; + soap->xcred = NULL; + soap->acred = NULL; + soap->cache = NULL; + soap->session = NULL; + soap->dh_params = NULL; + soap->rsa_params = NULL; + soap->ssl_flags = SOAP_SSL_DEFAULT; + soap->keyfile = NULL; + soap->keyid = NULL; + soap->password = NULL; + soap->cafile = NULL; + soap->capath = NULL; + soap->crlfile = NULL; +#endif +#ifdef WITH_WOLFSSL + if (!soap_ssl_init_done) + soap_ssl_init(); + soap->fsslauth = ssl_auth_init; + soap->fsslverify = NULL; + soap->ssl = NULL; + soap->ctx = NULL; + soap->session = NULL; + soap->dhfile = NULL; + soap->randfile = NULL; + soap->ssl_flags = SOAP_SSL_DEFAULT; + soap->keyfile = NULL; + soap->keyid = NULL; + soap->password = NULL; + soap->cafile = NULL; + soap->capath = NULL; + soap->crlfile = NULL; +#endif +#ifdef WITH_SYSTEMSSL + soap->fsslauth = ssl_auth_init; + soap->fsslverify = NULL; + soap->bio = NULL; + soap->ssl = (gsk_handle)NULL; + soap->ctx = (gsk_handle)NULL; + soap->session = NULL; + soap->ssl_flags = SOAP_SSL_DEFAULT; + soap->keyfile = NULL; + soap->keyid = NULL; + soap->password = NULL; + soap->cafile = NULL; + soap->capath = NULL; + soap->crlfile = NULL; + soap->dhfile = NULL; + soap->randfile = NULL; +#endif + soap->c_locale = NULL; + soap->buflen = 0; + soap->bufidx = 0; +#ifndef WITH_LEANER + soap->dime.chunksize = 0; + soap->dime.buflen = 0; +#endif + soap->other = 0; + soap->root = -1; + soap->null = 0; + soap->position = 0; + soap->encoding = 0; + 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; + soap->cdata = 0; + soap->peeked = 0; + soap->ahead = 0; + soap->idnum = 0; + soap->level = 0; + soap->status = 0; + soap->error = SOAP_OK; + soap->errmode = 0; + soap->errnum = 0; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_begin(struct soap *soap) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Clean up for input/output\n")); + soap->error = SOAP_OK; + if (!soap->keep_alive) + { + soap->buflen = 0; + soap->bufidx = 0; + } + soap->encoding = 0; + soap->mode = 0; + soap->part = SOAP_END; + soap->peeked = 0; + soap->ahead = 0; + soap->level = 0; + soap->encodingStyle = SOAP_STR_EOS; + soap_free_temp(soap); +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_end(struct soap *soap) +{ + if (soap_check_state(soap)) + return; + soap_free_temp(soap); + soap_dealloc(soap, NULL); + while (soap->clist) + { + struct soap_clist *cp = soap->clist->next; + SOAP_FREE(soap, soap->clist); + soap->clist = cp; + } + (void)soap_closesock(soap); +#ifdef SOAP_DEBUG + soap_close_logfiles(soap); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_version(struct soap *soap, short version) +{ + soap_set_local_namespaces(soap); + if (soap->version != version && soap->local_namespaces && soap->local_namespaces[0].id && soap->local_namespaces[1].id) + { + 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; + } + if (version == 0) + soap->encodingStyle = SOAP_STR_EOS; + else + soap->encodingStyle = NULL; +} + +/******************************************************************************/ + +static void +soap_version(struct soap *soap) +{ + struct Namespace *p = soap->local_namespaces; + if (p) + { + const char *ns = p[0].out; + if (!ns) + ns = p[0].ns; + if (ns) + { + if (!strcmp(ns, soap_env1)) + { + soap->version = 1; /* make sure we use SOAP 1.1 */ + if (p[1].out) + SOAP_FREE(soap, p[1].out); + p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc1)); + if (p[1].out) + (void)soap_memcpy(p[1].out, sizeof(soap_enc1), soap_enc1, sizeof(soap_enc1)); + } + else if (!strcmp(ns, soap_env2)) + { + soap->version = 2; /* make sure we use SOAP 1.2 */ + if (p[1].out) + SOAP_FREE(soap, p[1].out); + p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc2)); + if (p[1].out) + (void)soap_memcpy(p[1].out, sizeof(soap_enc2), soap_enc2, sizeof(soap_enc2)); + } + } + } +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_namespaces(struct soap *soap, const struct Namespace *p) +{ + struct Namespace *ns = soap->local_namespaces; + struct soap_nlist *np, *nq, *nr; + unsigned int level = soap->level; + soap->namespaces = p; + soap->local_namespaces = NULL; + soap_set_local_namespaces(soap); + /* reverse the namespace list */ + np = soap->nlist; + soap->nlist = NULL; + if (np) + { + nq = np->next; + np->next = NULL; + while (nq) + { + nr = nq->next; + nq->next = np; + np = nq; + nq = nr; + } + } + /* then push on new stack */ + while (np) + { + const char *s; + soap->level = np->level; /* preserve element nesting level */ + s = np->ns; + if (!s && np->index >= 0 && ns) + { + s = ns[np->index].out; + if (!s) + s = ns[np->index].ns; + } + if (s) + (void)soap_push_namespace(soap, np->id, s); + nq = np; + np = np->next; + SOAP_FREE(soap, nq); + } + if (ns) + { + int i; + for (i = 0; ns[i].id; i++) + { + if (ns[i].out) + { + SOAP_FREE(soap, ns[i].out); + ns[i].out = NULL; + } + } + SOAP_FREE(soap, ns); + } + soap->level = level; /* restore level */ + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_local_namespaces(struct soap *soap) +{ + if (soap->namespaces && !soap->local_namespaces) + { + const struct Namespace *ns1; + struct Namespace *ns2; + size_t n = 1; + for (ns1 = soap->namespaces; ns1->id; ns1++) + n++; + n *= sizeof(struct Namespace); + ns2 = (struct Namespace*)SOAP_MALLOC(soap, n); + if (ns2) + { + (void)soap_memcpy((void*)ns2, n, (const void*)soap->namespaces, n); + if (ns2[0].ns) + { + if (!strcmp(ns2[0].ns, soap_env1)) + soap->version = 1; + else if (!strcmp(ns2[0].ns, soap_env2)) + soap->version = 2; + } + soap->local_namespaces = ns2; + for (; ns2->id; ns2++) + ns2->out = NULL; + } + } +} + +/******************************************************************************/ + +#ifndef WITH_LEAN +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_tagsearch(const char *big, const char *little) +{ + if (big && little) + { + size_t n = strlen(little); + const char *s = big; + while (s) + { + const char *t = s; + size_t i; + for (i = 0; i < n; i++, t++) + { + if (*t != little[i]) + break; + } + if (*t == '\0' || *t == ' ') + { + if (i == n || (i > 0 && little[i-1] == ':')) + return s; + } + s = strchr(t, ' '); + if (s) + s++; + } + } + return NULL; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +struct soap_nlist * +SOAP_FMAC2 +soap_lookup_ns(struct soap *soap, const char *tag, size_t n) +{ + struct soap_nlist *np; + for (np = soap->nlist; np; np = np->next) + if (!strncmp(np->id, tag, n) && !np->id[n]) + return np; + return NULL; +} + +/******************************************************************************/ + +#ifndef WITH_LEAN +static struct soap_nlist * +soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized, short isearly) +{ + struct soap_nlist *np = NULL; + size_t n, k; + unsigned int level = soap->level + isearly; + if (soap_tagsearch(soap->c14nexclude, id)) + return NULL; + if (!utilized) + { + for (np = soap->nlist; np; np = np->next) + { + if (!strcmp(np->id, id) && ((!np->ns && *id) || (ns && np->ns && !strcmp(np->ns, ns)))) + break; + } + if (np) + { + if ((np->level < level || (!np->ns && *id)) && np->index == 1) + utilized = 1; + else + return NULL; + } + } + else if (!*id) + { + for (np = soap->nlist; np; np = np->next) + { + if (!*np->id && np->level == level && np->index != 1) + return NULL; + } + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Adding namespace binding (level=%u) '%s' '%s' utilized=%d\n", level, id, ns ? ns : "(null)", utilized)); + n = strlen(id); + if (ns) + k = strlen(ns) + 1; + else + k = 0; + if (sizeof(struct soap_nlist) + n + k > n && (SOAP_MAXALLOCSIZE <= 0 || sizeof(struct soap_nlist) + n + k <= SOAP_MAXALLOCSIZE)) + np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k); + if (!np) + { + soap->error = SOAP_EOM; + return NULL; + } + np->next = soap->nlist; + soap->nlist = np; + soap_strcpy((char*)np->id, n + 1, id); + if (ns) + { + np->ns = np->id + n + 1; + soap_strcpy((char*)np->ns, k, ns); + } + else + { + np->ns = NULL; + } + np->level = level; + np->index = utilized; + return np; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +static void +soap_utilize_ns(struct soap *soap, const char *tag, short isearly) +{ + struct soap_nlist *np; + size_t n = 0; + if (!strncmp(tag, "xmlns:", 6)) + { + tag += 6; + n = strlen(tag); + } + else + { + const char *t = strchr(tag, ':'); + if (t) + n = t - tag; + } + np = soap_lookup_ns(soap, tag, n); + if (np) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Utilizing namespace '%s' of '%s' at level %u utilized=%d at level=%u\n", np->ns ? np->ns : "", tag, soap->level + isearly, np->index, np->level)); + if (np->index <= 0) + { + if (np->level == soap->level + isearly) + np->index = 1; + else + (void)soap_push_ns(soap, np->id, np->ns, 1, isearly); + } + } + else if (strncmp(tag, "xml", 3)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Utilizing default namespace of '%s' at level %u\n", tag, soap->level + isearly)); + (void)soap_strncpy(soap->tag, sizeof(soap->tag), tag, n); + (void)soap_push_ns(soap, soap->tag, NULL, 1, isearly); + } +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element(struct soap *soap, const char *tag, int id, const char *type) +{ +#ifndef WITH_LEAN + const char *s; +#endif + 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)); +#ifndef WITH_LEAN + if (soap_tagsearch(soap->wsuid, tag)) + { + size_t i; + for (s = tag, i = 0; *s && i < sizeof(soap->href) - 1; s++, i++) + soap->href[i] = *s == ':' ? '-' : *s; + soap->href[i] = '\0'; + if (soap_set_attr(soap, "wsu:Id", soap->href, 1)) + return soap->error; + } +#endif + soap->level++; + if (soap->level > soap->maxlevel) + return soap->error = SOAP_LEVEL; +#ifndef WITH_LEAN + 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) + { + 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) + { + int p = soap->c14ninclude ? *soap->c14ninclude == '+' || soap_tagsearch(soap->c14ninclude, np->id) != NULL : 0; + if (np->index == 2 || p) + { + struct soap_nlist *np1 = soap_push_ns(soap, np->id, np->ns, 1, 0); + if (np1 && !p) + np1->index = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reset binding %s='%s' utilized=%d to utilized=%d\n", np->id, np->ns ? np->ns : SOAP_STR_EOS, np->index, np1 ? np1->index : np->index)); + } + } + soap->evlev = soap->level; + } + } +#endif +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM)) + { + struct soap_dom_element *elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element)); + if (!elt) + return soap->error = SOAP_EOM; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Adding DOM element tag='%s' %p (parent='%s' %p)\n", tag, elt, soap->dom ? soap->dom->name : "(null)", soap->dom)); + elt->soap = soap; + elt->next = NULL; + elt->prnt = soap->dom; + elt->elts = NULL; + elt->atts = NULL; + elt->nstr = NULL; + elt->name = soap_strdup(soap, tag); + elt->lead = NULL; + elt->text = NULL; + elt->code = NULL; + elt->tail = NULL; + elt->node = NULL; + elt->type = 0; + if (soap->dom) + { + struct soap_dom_element *p = soap->dom->elts; + if (p) + { + while (p->next) + p = p->next; + p->next = elt; + } + else + { + soap->dom->elts = elt; + } + } + soap->dom = elt; + if (!elt->name) + return soap->error = SOAP_EOM; + } + else + { +#endif +#ifndef WITH_LEAN + if (!soap->ns) + { + if (!(soap->mode & SOAP_XML_CANONICAL) && soap_send(soap, soap->prolog)) + return soap->error; + } + else if ((soap->mode & SOAP_XML_INDENT)) + { + if (soap->ns == 1 && soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1)) + return soap->error; + soap->body = 1; + } + if ((soap->mode & SOAP_XML_DEFAULTNS)) + { + size_t n = 0; + s = strchr(tag, ':'); + if (s) + { + n = s++ - tag; + if (type && !strncmp(type, tag, n + 1)) + type += n + 1; + } + else + { + s = tag; + } + if (soap_send_raw(soap, "<", 1) + || soap_send(soap, s)) + return soap->error; + if (n) + { + struct Namespace *ns = soap->local_namespaces; + for (; ns && ns->id; ns++) + { + if (*ns->id && ns->ns && !strncmp(ns->id, tag, n) && !ns->id[n]) + { + if (!soap->nlist || *soap->nlist->id || (soap->nlist->ns && strcmp(soap->nlist->ns, ns->ns))) + { + (void)soap_push_ns(soap, SOAP_STR_EOS, ns->out ? ns->out : ns->ns, 0, 0); + if (soap_attribute(soap, "xmlns", ns->out ? ns->out : ns->ns)) + return soap->error; + } + break; + } + } + } +#ifndef WITH_NOEMPTYNAMESPACES + else if (!soap->nlist || *soap->nlist->id || (soap->nlist->ns && *soap->nlist->ns)) + { + (void)soap_push_ns(soap, SOAP_STR_EOS, SOAP_STR_EOS, 0, 0); + if (soap_attribute(soap, "xmlns", SOAP_STR_EOS)) + return soap->error; + } +#endif + } + else +#endif + if (soap_send_raw(soap, "<", 1) + || soap_send(soap, tag)) + return soap->error; +#ifdef WITH_DOM + } +#endif + if (!soap->ns) + { + struct Namespace *ns = soap->local_namespaces; + for (; ns && ns->id; ns++) + { + const char *t = ns->out; + if (!t) + t = ns->ns; + if (*ns->id && t && *t) + { + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(ns->id) + 6), "xmlns:%s", ns->id); + if (soap_attribute(soap, soap->tmpbuf, t)) + return soap->error; + } + } + } + soap->ns = 1; /* namespace table control: ns = 0 or 2 to start, then 1 to stop dumping the table */ +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL)) + { + if ((soap->mode & SOAP_XML_DEFAULTNS)) + soap_utilize_ns(soap, SOAP_STR_EOS, 0); + else + soap_utilize_ns(soap, tag, 0); + } +#endif + if (id > 0) + { + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), sizeof(SOAP_BASEREFNAME) + 20), SOAP_BASEREFNAME "%d", id); + 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_NOTYPE)) + { +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_XML_CANONICAL_NA)) + soap_utilize_ns(soap, type, 0); +#endif + if (soap_attribute(soap, "xsi:type", type)) + return soap->error; + } + if (soap->null && soap->position > 0 && soap->version == 1) + { + int i; + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf) - 1, 20), "[%d", soap->positions[0]); + for (i = 1; i < soap->position; i++) + { + size_t l = strlen(soap->tmpbuf); + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l - 1, 20), ",%d", soap->positions[i]); + } + soap_strcat(soap->tmpbuf, sizeof(soap->tmpbuf), "]"); + if (soap_attribute(soap, "SOAP-ENC:position", soap->tmpbuf)) + return soap->error; + } + if (soap->mustUnderstand) + { + if (soap->actor && *soap->actor) + { + if (soap_attribute(soap, soap->version == 2 ? "SOAP-ENV:role" : "SOAP-ENV:actor", soap->actor)) + return soap->error; + } + if (soap_attribute(soap, "SOAP-ENV:mustUnderstand", soap->version == 2 ? "true" : "1")) + return soap->error; + soap->mustUnderstand = 0; + } + if (soap->encoding) + { + if (soap->encodingStyle && soap->local_namespaces && 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; + else + soap->encodingStyle = soap->local_namespaces[1].ns; + } + 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; + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_begin_out(struct soap *soap, const char *tag, int id, const char *type) +{ + if (*tag == '-') + return SOAP_OK; +#ifdef WITH_DOM + if (soap->feltbegout) + return soap->error = soap->feltbegout(soap, tag, id, type); +#endif + if (soap_element(soap, tag, id, type)) + return soap->error; + return soap_element_start_end_out(soap, NULL); +} + +/******************************************************************************/ + +#if _MSC_VER < 1400 && !defined(HAVE_STRLCAT) +/* concat string (truncating the result, strings must not be NULL) */ +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_strcat(char *t, size_t n, const char *s) +{ + size_t k = strlen(t); + if (k < n) + { + t += k; + n -= k; + while (n-- > 1 && *s) + *t++ = *s++; + *t = '\0'; + } +} +#endif + +/******************************************************************************/ + +#if _MSC_VER < 1400 +/* concat string up to m chars (leaves destination intact on overrun and returns nonzero, zero if OK) */ +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_strncat(char *t, size_t n, const char *s, size_t m) +{ + size_t k; + if (!t || !s) + return 1; + k = strlen(t); + if (n <= k + m) + return 1; + t += k; + n -= k; + while (n-- > 1 && *s) + *t++ = *s++; + *t = '\0'; + return 0; +} +#endif + +/******************************************************************************/ + +#ifndef HAVE_STRRCHR +SOAP_FMAC1 +char* +SOAP_FMAC2 +soap_strrchr(const char *s, int t) +{ + char *r = NULL; + while (*s) + if (*s++ == t) + r = (char*)s - 1; + return r; +} +#endif + +/******************************************************************************/ + +#ifndef HAVE_STRTOL +SOAP_FMAC1 +long +SOAP_FMAC2 +soap_strtol(const char *s, char **t, int b) +{ + long n = 0; + int c; + while (*s > 0 && *s <= 32) + s++; + if (b == 10) + { + short neg = 0; + if (*s == '-') + { + s++; + neg = 1; + } + else if (*s == '+') + { + s++; + } + while ((c = *s) && c >= '0' && c <= '9') + { + if (n >= 214748364 && (n > 214748364 || c >= '8')) + { + if (neg && n == 214748364 && c == '8') + { + if (t) + *t = (char*)(s + 1); + return -2147483648; + } + break; + } + n *= 10; + n += c - '0'; + s++; + } + if (neg) + n = -n; + } + else /* assume b == 16 and value is always positive */ + { + while ((c = *s)) + { + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'F') + c -= 'A' - 10; + else if (c >= 'a' && c <= 'f') + c -= 'a' - 10; + if (n > 0x07FFFFFF) + break; + n <<= 4; + n += c; + s++; + } + } + if (t) + *t = (char*)s; + return n; +} +#endif + +/******************************************************************************/ + +#ifndef HAVE_STRTOUL +SOAP_FMAC1 +unsigned long +SOAP_FMAC2 +soap_strtoul(const char *s, char **t, int b) +{ + unsigned long n = 0; + int c; + while (*s > 0 && *s <= 32) + s++; + if (b == 10) + { + short neg = 0; + if (*s == '-') + { + s++; + neg = 1; + } + else if (*s == '+') + { + s++; + } + while ((c = *s) && c >= '0' && c <= '9') + { + if (n >= 429496729 && (n > 429496729 || c >= '6')) + break; + n *= 10; + n += c - '0'; + s++; + } + if (neg && n > 0) + s--; + } + else /* b == 16 */ + { + while ((c = *s)) + { + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'F') + c -= 'A' - 10; + else if (c >= 'a' && c <= 'f') + c -= 'a' - 10; + if (n > 0x0FFFFFFF) + break; + n <<= 4; + n += c; + s++; + } + } + if (t) + *t = (char*)s; + return n; +} +#endif + +/******************************************************************************/ + +#ifndef soap_strtoll +SOAP_FMAC1 +LONG64 +SOAP_FMAC2 +soap_strtoll(const char *s, char **t, int b) +{ + LONG64 n = 0LL; + int c; + while (*s > 0 && *s <= 32) + s++; + if (b == 10) + { + short neg = 0; + if (*s == '-') + { + s++; + neg = 1; + } + else if (*s == '+') + { + s++; + } + while ((c = *s) && c >= '0' && c <= '9') + { + if (n >= 922337203685477580LL && (n > 922337203685477580LL || c >= '8')) + { + if (neg && n == 922337203685477580LL && c == '8') + { + if (t) + *t = (char*)(s + 1); + return -9223372036854775807LL - 1LL; /* appease compilers that complain */ + } + break; + } + n *= 10LL; + n += c - '0'; + s++; + } + if (neg) + n = -n; + } + else /* assume b == 16 and value is always positive */ + { + while ((c = *s)) + { + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'F') + c -= 'A' - 10; + else if (c >= 'a' && c <= 'f') + c -= 'a' - 10; + if (n > 0x07FFFFFFFFFFFFFFLL) + break; + n <<= 4; + n += c; + s++; + } + } + if (t) + *t = (char*)s; + return n; +} +#endif + +/******************************************************************************/ + +#ifndef soap_strtoull +SOAP_FMAC1 +ULONG64 +SOAP_FMAC2 +soap_strtoull(const char *s, char **t, int b) +{ + ULONG64 n = 0UL; + int c; + while (*s > 0 && *s <= 32) + s++; + if (b == 10) + { + short neg = 0; + if (*s == '-') + { + s++; + neg = 1; + } + else if (*s == '+') + { + s++; + } + while ((c = *s) && c >= '0' && c <= '9') + { + if (n >= 1844674407370955161ULL && (n > 1844674407370955161ULL || c >= '6')) + break; + n *= 10UL; + n += c - '0'; + s++; + } + if (neg && n > 0UL) + s--; + } + else /* b == 16 */ + { + while ((c = *s)) + { + if (c >= '0' && c <= '9') + c -= '0'; + else if (c >= 'A' && c <= 'F') + c -= 'A' - 10; + else if (c >= 'a' && c <= 'f') + c -= 'a' - 10; + if (n > 0x0FFFFFFFFFFFFFFFULL) + break; + n <<= 4; + n += c; + s++; + } + } + if (t) + *t = (char*)s; + return n; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_array_begin_out(struct soap *soap, const char *tag, int id, const char *type, const char *offset) +{ + if (!type || !*type || soap->version == 0) + return soap_element_begin_out(soap, tag, id, NULL); + if (soap_element(soap, tag, id, NULL)) + return soap->error; + if (soap->version == 1) + { + if (offset && soap_attribute(soap, "SOAP-ENC:offset", offset)) + return soap->error; + if (soap_attribute(soap, "SOAP-ENC:arrayType", type)) + return soap->error; + } + else + { + const char *s; + s = strchr(type, '['); + if (s && (size_t)(s - type) < sizeof(soap->tmpbuf)) + { + (void)soap_strncpy(soap->tmpbuf, sizeof(soap->tmpbuf), type, s - type); + if (soap_attribute(soap, "SOAP-ENC:itemType", soap->tmpbuf)) + return soap->error; + s++; + if (*s && *s != ']') + { + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), s); + soap->tmpbuf[strlen(soap->tmpbuf) - 1] = '\0'; + if (soap_attribute(soap, "SOAP-ENC:arraySize", soap->tmpbuf)) + return soap->error; + } + } + } +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_XML_CANONICAL_NA)) + soap_utilize_ns(soap, type, 0); +#endif + return soap_element_start_end_out(soap, NULL); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_start_end_out(struct soap *soap, const char *tag) +{ + struct soap_attribute *tp; +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL)) + { + struct soap_nlist *np; + for (tp = soap->attributes; tp; tp = tp->next) + { + if (tp->visible && *tp->name && strchr(tp->name, ':')) + soap_utilize_ns(soap, tp->name, 0); + } + if (soap->event == SOAP_SEC_BEGIN) + { + for (np = soap->nlist; np; np = np->next) + if (soap_tagsearch(soap->c14ninclude, np->id)) + (void)soap_push_ns(soap, np->id, np->ns, 1, 0); + soap->event = 0; + soap->evlev = 0; + } + for (np = soap->nlist; np; np = np->next) + { + if (np->ns && np->index == 1) + { + if (*np->id) + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(np->id) + 6), "xmlns:%s", np->id); + else + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), "xmlns"); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enabling utilized binding (level=%u) %s='%s' SEC-BEGIN=%d c14ninclude='%s'\n", np->level, soap->tmpbuf, np->ns, soap->event == SOAP_SEC_BEGIN, soap->c14ninclude ? soap->c14ninclude : "(null)")); + np->index = 2; + soap->level--; + if (*np->id || *np->ns || soap->level > 1) + if (soap_set_attr(soap, soap->tmpbuf, np->ns, 1)) + return soap->error; + soap->level++; + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Binding (level=%u) %s='%s' utilized=%d\n", np->level, np->id, np->ns ? np->ns : SOAP_STR_EOS, np->index)); + } + } + } +#endif +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + struct soap_dom_attribute **att; + att = &soap->dom->atts; + for (tp = soap->attributes; tp; tp = tp->next) + { + if (tp->visible) + { + *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute)); + if (!*att) + return soap->error; + (*att)->next = NULL; + (*att)->nstr = NULL; + (*att)->name = soap_strdup(soap, tp->name); + (*att)->text = soap_strdup(soap, tp->value); + (*att)->soap = soap; + if (!(*att)->name || (tp->value && !(*att)->text)) + return soap->error = SOAP_EOM; + att = &(*att)->next; + tp->visible = 0; + } + } + return SOAP_OK; + } +#endif + for (tp = soap->attributes; tp; tp = tp->next) + { + if (tp->visible) + { + if (soap_send_raw(soap, " ", 1) || soap_send(soap, tp->name)) + return soap->error; + if (tp->visible == 2 && tp->value) + { + if (soap_send_raw(soap, "=\"", 2) + || soap_string_out(soap, tp->value, tp->flag) + || soap_send_raw(soap, "\"", 1)) + return soap->error; + } + else + { + if (soap_send_raw(soap, "=\"\"", 3)) + return soap->error; + } + tp->visible = 0; + } + } + if (tag) + { +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL)) + { + if (soap_send_raw(soap, ">", 1) + || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; + } +#endif + if (soap->nlist) + soap_pop_namespace(soap); + soap->level--; /* decrement level just before /> */ + soap->body = 0; + return soap_send_raw(soap, "/>", 2); + } + return soap_send_raw(soap, ">", 1); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_end_out(struct soap *soap, const char *tag) +{ + if (*tag == '-') + return SOAP_OK; +#ifdef WITH_DOM + if (soap->feltendout) + return soap->error = soap->feltendout(soap, tag); +#endif + return soap_element_end(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_end(struct soap *soap, const char *tag) +{ +#ifndef WITH_LEAN + const char *s; +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element ending tag='%s'\n", tag)); +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + if (soap->dom->prnt) + soap->dom = soap->dom->prnt; + return SOAP_OK; + } +#endif +#ifndef WITH_LEAN + if (soap->nlist) + soap_pop_namespace(soap); + if ((soap->mode & SOAP_XML_INDENT)) + { + if (!soap->body) + { + if (soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1)) + return soap->error; + } + soap->body = 0; + } + if ((soap->mode & SOAP_XML_DEFAULTNS) && (s = strchr(tag, ':')) != NULL) + tag = s + 1; +#endif + if (soap_send_raw(soap, "error; + soap->level--; /* decrement level just before > */ + return soap_send_raw(soap, ">", 1); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_ref(struct soap *soap, const char *tag, int id, int href) +{ + const char *s = "ref"; + int n = 1; + if (soap->version == 1) + { + s = "href"; + n = 0; + } + else if (soap->version == 2) + { + s = "SOAP-ENC:ref"; + } + (SOAP_SNPRINTF(soap->href, sizeof(soap->href), sizeof(SOAP_BASEREFNAME) + 21), "#" SOAP_BASEREFNAME "%d", href); + return soap_element_href(soap, tag, id, s, soap->href + n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_href(struct soap *soap, const char *tag, int id, const char *ref, const char *val) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element '%s' reference %s='%s'\n", tag, ref, val)); + if (soap_element(soap, tag, id, NULL) + || soap_attribute(soap, ref, val) + || soap_element_start_end_out(soap, tag)) + return soap->error; + soap->body = 0; + return SOAP_OK; +} + + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_null(struct soap *soap, const char *tag, int id, const char *type) +{ + struct soap_attribute *tp = NULL; + for (tp = soap->attributes; tp; tp = tp->next) + if (tp->visible) + break; + if (tp || (soap->version == 2 && soap->position > 0) || id > 0 || (soap->mode & SOAP_XML_NIL)) + { + if (soap_element(soap, tag, id, type) + || (!tp && soap_attribute(soap, "xsi:nil", "true")) + || soap_element_start_end_out(soap, tag)) + return soap->error; + soap->body = 0; + } + else + { + soap->null = 1; + soap->position = 0; + soap->mustUnderstand = 0; + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_empty(struct soap *soap, const char *tag, int id, const char *type) +{ + if (!tag || *tag == '-') + return SOAP_OK; +#ifdef WITH_DOM + if (soap->feltbegout) + return soap->error = soap->feltbegout(soap, tag, id, type); +#endif + if (soap_element(soap, tag, id, type)) + return soap->error; + return soap_element_start_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +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"))) + return soap->error; + return soap_element_start_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_id(struct soap *soap, const char *tag, int id, const void *p, const void *a, int n, const char *type, int t, char **mark) +{ + (void)a; (void)n; + if (!p) + { + soap->error = soap_element_null(soap, tag, id, type); + return -1; + } +#ifndef WITH_NOIDREF + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element_id %p type=%d id=%d\n", p, t, id)); + if ((!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH)) || (soap->mode & SOAP_XML_TREE)) + return soap_check_and_mark(soap, p, t, mark); + if (mark) + *mark = NULL; + if (id < -1) + return soap_embed(soap, p, a, n, t); + else if (id <= 0) + { + struct soap_plist *pp; + if (a) + id = soap_array_pointer_lookup(soap, p, a, n, t, &pp); + else + id = soap_pointer_lookup(soap, p, t, &pp); + if (id) + { + if (soap_is_embedded(soap, pp)) + { + soap_element_ref(soap, tag, 0, id); + return -1; + } + if (soap_is_single(soap, pp)) + return 0; + soap_set_embedded(soap, pp); + } + } + return id; +#else + return soap_check_and_mark(soap, p, t, mark); +#endif +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_check_and_mark(struct soap *soap, const void *p, int t, char **mark) +{ + if (mark) + { + struct soap_plist *pp; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Check %p and mark %p\n", p, (void*)mark)); + if (!soap_pointer_lookup(soap, p, t, &pp)) + if (!soap_pointer_enter(soap, p, NULL, 0, t, &pp)) + return -1; + if ((soap->mode & SOAP_IO_LENGTH)) + { + if (pp->mark1 > 0) + return -1; + pp->mark1 = 1; + *mark = &pp->mark1; + } + else + { + if (pp->mark2 > 0) + return -1; + pp->mark2 = 1; + *mark = &pp->mark2; + } + } + return 0; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void * +SOAP_FMAC2 +soap_mark_lookup(struct soap *soap, const void *p, int t, struct soap_plist **ppp, char **mark) +{ + if (!soap) + return NULL; + if (mark || !(soap->mode & SOAP_XML_TREE)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Mark lookup %p type=%d\n", p, t)); + if (!soap_pointer_lookup(soap, p, t, ppp)) + { + if (!soap_pointer_enter(soap, p, NULL, 0, t, ppp)) + return NULL; + } + else if (!(soap->mode & SOAP_XML_TREE)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Mark found %p\n", (*ppp)->dup)); + return (*ppp)->dup; + } + if (mark) + { + if ((*ppp)->mark1 > 0) + (*ppp)->mark1 = 2; /* cycle */ + else + (*ppp)->mark1 = 1; /* cycle detection */ + *mark = &(*ppp)->mark1; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Mark cycle %d\n", (*ppp)->mark1)); + } + } + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_mark_cycle(struct soap *soap, struct soap_plist *pp) +{ + (void)soap; + return pp && pp->mark1 == 2 && (soap->mode & SOAP_XML_TREE); +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_mark_dup(struct soap *soap, void *a, struct soap_plist *pp) +{ + (void)soap; + if (pp) + pp->dup = a; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_unmark(struct soap *soap, char *mark) +{ + (void)soap; + if (mark) + *mark = 0; /* release detection */ +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_result(struct soap *soap, const char *tag) +{ + if (soap->version == 2 && soap->encodingStyle) + { + if (soap_element(soap, "SOAP-RPC:result", 0, NULL) + || soap_attribute(soap, "xmlns:SOAP-RPC", soap_rpc) + || soap_element_start_end_out(soap, NULL) + || soap_string_out(soap, tag, 0) + || soap_element_end_out(soap, "SOAP-RPC:result")) + return soap->error; + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_check_result(struct soap *soap, const char *tag) +{ + (void)tag; + if (soap->version == 2 && soap->encodingStyle) + { + soap_instring(soap, ":result", NULL, NULL, 0, 2, -1, -1, NULL); + /* just ignore content for compliance reasons, but should compare tag to element's QName value? */ + } +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_attribute(struct soap *soap, const char *name, const char *value) +{ + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attribute '%s'='%s'\n", name, value)); +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && !(soap->mode & SOAP_XML_CANONICAL) && soap->dom) + { + struct soap_dom_attribute *a = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute)); + if (!a) + return soap->error; + a->next = soap->dom->atts; + a->nstr = NULL; + a->name = soap_strdup(soap, name); + a->text = soap_strdup(soap, value); + a->soap = soap; + soap->dom->atts = a; + if (!a->name || (value && !a->text)) + return soap->error = SOAP_EOM; + return SOAP_OK; + } +#endif +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL)) + { + /* push namespace */ + if (value && !strncmp(name, "xmlns", 5) && ((name[5] == ':') || name[5] == '\0')) + { + (void)soap_push_ns(soap, name + 5 + (name[5] == ':'), value, 0, 0); + if (name[5] == '\0') + soap_utilize_ns(soap, SOAP_STR_EOS, 0); + else if (soap->c14ninclude && ((*soap->c14ninclude == '*' || soap_tagsearch(soap->c14ninclude, name + 6)))) + soap_utilize_ns(soap, name, 0); + } + else + { + soap->level--; + if (soap_set_attr(soap, name, value, 1)) + return soap->error; + soap->level++; + } + } + else +#endif + { + if (soap_send_raw(soap, " ", 1) + || soap_send(soap, name)) + return soap->error; + if (value) + if (soap_send_raw(soap, "=\"", 2) + || soap_string_out(soap, value, 1) + || soap_send_raw(soap, "\"", 1)) + return soap->error; + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_begin_in(struct soap *soap, const char *tag, int nillable, const char *type) +{ + if (!soap_peek_element(soap)) + { + if (soap->other) + return soap->error = SOAP_TAG_MISMATCH; + if (tag && *tag == '-') + return SOAP_OK; + soap->error = soap_match_tag(soap, soap->tag, tag); + if (!soap->error) + { + if (type && *soap->type && soap_match_tag(soap, soap->type, type)) + return soap->error = SOAP_TYPE; + soap->peeked = 0; + if (!nillable && soap->null && (soap->mode & SOAP_XML_STRICT)) + return soap->error = SOAP_NULL; + if (soap->body) + { + soap->level++; + if (soap->level > soap->maxlevel) + return soap->error = SOAP_LEVEL; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin tag 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 == '-') + { + soap->error = SOAP_OK; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_element_end_in(struct soap *soap, const char *tag) +{ + soap_wchar c; + char *s = NULL; + int n = 0; + if (soap->error == SOAP_NO_TAG) + soap->error = SOAP_OK; +#ifdef WITH_DOM + /* this whitespace or mixed content is significant for DOM "as-is" */ + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + s = soap_string_in(soap, 0, -1, -1, NULL); + if (!soap->peeked && !s) + return soap->error; + if (soap->dom->prnt) + soap->dom = soap->dom->prnt; + if (s && (soap->mode & SOAP_XML_STRICT)) + { + for (; *s; s++) + if (!soap_coblank((soap_wchar)*s)) + return soap->error = SOAP_END_TAG; /* reject mixed content before ending tag */ + } + } +#endif + if (tag && *tag == '-') + return SOAP_OK; + if (soap->peeked) + { + if (*soap->tag) + n++; + soap->peeked = 0; + } + do + { + while (((c = soap_get(soap)) != SOAP_TT)) + { + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + if (!soap_coblank(c)) + { + if ((soap->mode & SOAP_XML_STRICT)) + return soap->error = SOAP_END_TAG; /* reject mixed content before ending tag */ + if (c == SOAP_LT) + n++; + else if (c == '/') + { + c = soap_get(soap); + if (c == SOAP_GT && n > 0) + n--; + else + soap_unget(soap, c); + } + } + } + } while (n-- > 0); + s = soap->tag; + n = sizeof(soap->tag); + while ((c = soap_get(soap)) > 32) + { + if (n > 1) + { + *s++ = (char)c; + n--; + } + } + *s = '\0'; + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + while (soap_coblank(c)) + c = soap_get(soap); + if (c != SOAP_GT) + return soap->error = SOAP_SYNTAX_ERROR; +#ifndef WITH_LEAN +#ifdef WITH_DOM + if (soap->feltendin) + { + int err = soap->error; + soap->error = soap->feltendin(soap, soap->tag, tag); + if (soap->error) + return soap->error; + if (err) + return soap->error = err; /* restore error */ + } +#endif +#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 tag '%s' does not match '%s'\n", soap->tag, tag ? tag : SOAP_STR_EOS)); + return soap->error = SOAP_SYNTAX_ERROR; + } + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End tag found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag ? tag : SOAP_STR_EOS)); + soap->level--; + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_attr_value(struct soap *soap, const char *name, int flag, int occurs) +{ + struct soap_attribute *tp; + if (*name == '-') + return SOAP_STR_EOS; + for (tp = soap->attributes; tp; tp = tp->next) + { + if (tp->visible == 2 && !soap_match_att(soap, tp->name, name)) + break; + } + if (tp) + { + if (occurs == 4 || (occurs == 2 && (soap->mode & SOAP_XML_STRICT))) + soap->error = SOAP_PROHIBITED; + else if (flag >= 4) + return soap_collapse(soap, tp->value, flag, 1); + else + return tp->value; + } + else if (occurs == 3 || (occurs == 1 && (soap->mode & SOAP_XML_STRICT))) + { + soap->error = SOAP_REQUIRED; + } + else + { + soap->error = SOAP_OK; + } + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_attr(struct soap *soap, const char *name, const char *value, int flag) +{ + struct soap_attribute *tp, *tq; + if (*name == '-') + return SOAP_OK; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set attribute %s='%s'\n", name, value ? value : SOAP_STR_EOS)); + tq = NULL; + for (tp = soap->attributes; tp; tq = tp, tp = tp->next) + { + if (!strcmp(tp->name, name)) + break; + } + if (!tp) + { + size_t l = strlen(name); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute %s\n", name)); + if (sizeof(struct soap_attribute) + l > l && (SOAP_MAXALLOCSIZE <= 0 || sizeof(struct soap_attribute) + l <= SOAP_MAXALLOCSIZE)) + tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + l); + if (!tp) + return soap->error = SOAP_EOM; + tp->ns = NULL; +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL)) + { + struct soap_attribute **tpp = &soap->attributes; + const char *s = strchr(name, ':'); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inserting attribute %s for c14n\n", name)); + if (!strncmp(name, "xmlns", 5)) + { + for (; *tpp; tpp = &(*tpp)->next) + if (strncmp((*tpp)->name, "xmlns", 5) || strcmp((*tpp)->name + 5, name + 5) > 0) + break; + } + else if (!s) + { + for (; *tpp; tpp = &(*tpp)->next) + if (strncmp((*tpp)->name, "xmlns", 5) && ((*tpp)->ns || strcmp((*tpp)->name, name) > 0)) + break; + } + else + { + 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; + } + } + } + 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; + } + } + tp->next = *tpp; + *tpp = tp; + } + else +#endif + if (tq) + { + tq->next = tp; + tp->next = NULL; + } + else + { + tp->next = soap->attributes; + soap->attributes = tp; + } + soap_strcpy((char*)tp->name, l + 1, name); + tp->value = NULL; + } + else if (tp->visible) + { + return SOAP_OK; + } + else if (value && tp->value && tp->size <= strlen(value)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute value of %s (free %p)\n", name, (void*)tp->value)); + SOAP_FREE(soap, tp->value); + tp->value = NULL; + tp->ns = NULL; + } + if (value) + { + if (!tp->value) + { + tp->size = strlen(value) + 1; + if (SOAP_MAXALLOCSIZE <= 0 || tp->size <= SOAP_MAXALLOCSIZE) + tp->value = (char*)SOAP_MALLOC(soap, tp->size); + if (!tp->value) + return soap->error = SOAP_EOM; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute value for %s (%p)\n", tp->name, (void*)tp->value)); + } + soap_strcpy(tp->value, tp->size, value); + if (!strncmp(tp->name, "xmlns:", 6)) + tp->ns = tp->value; + tp->visible = 2; + tp->flag = (short)flag; +#ifndef WITH_LEAN + if (!strcmp(name, "wsu:Id")) + { + soap->event = SOAP_SEC_BEGIN; + soap_strcpy(soap->id, sizeof(soap->id), value); + } + if ((soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_XML_CANONICAL_NA)) + { + const char *s = strchr(name, ':'); + if (s && strchr(value, ':')) + { + struct soap_nlist *np = soap_lookup_ns(soap, name, s - name); + if (np && np->ns && soap->local_namespaces) + { + if ((!strcmp(s + 1, "type") && !strcmp(np->ns, soap->local_namespaces[2].ns)) /* xsi:type QName */ + || ((!strcmp(s + 1, "arrayType") || !strcmp(s + 1, "itemType")) && !strcmp(np->ns, soap->local_namespaces[1].ns))) /* SOAP-ENC:arrayType and SOAP-ENC:itemType QName */ + soap_utilize_ns(soap, value, 1); + } + } + } +#endif + } + else + { + tp->visible = 1; + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_clr_attr(struct soap *soap) +{ + struct soap_attribute *tp; +#ifndef WITH_LEAN + if ((soap->mode & SOAP_XML_CANONICAL)) + { + while (soap->attributes) + { + tp = soap->attributes->next; + if (soap->attributes->value) + SOAP_FREE(soap, soap->attributes->value); + SOAP_FREE(soap, soap->attributes); + soap->attributes = tp; + } + } + else +#endif + { + for (tp = soap->attributes; tp; tp = tp->next) + tp->visible = 0; + } +} + +/******************************************************************************/ + +static int +soap_getattrval(struct soap *soap, char *s, size_t *n, soap_wchar d) +{ + char buf[8]; + size_t i; + size_t k = *n; + size_t m = 0; + char *t = buf; + for (i = 0; i < k; i++) + { + soap_wchar c; + if (m) + { + *s++ = *t++; + m--; + continue; + } + if ((soap->mode & SOAP_C_UTFSTRING)) + { + c = soap_get(soap); + if ((c & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP) + { + t = buf; + c &= 0x7FFFFFFF; + if (c < 0x0800) + *t++ = (char)(0xC0 | ((c >> 6) & 0x1F)); + else + { +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + if (!((c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF))) + c = SOAP_UNKNOWN_UNICODE_CHAR; +#endif + if (c < 0x010000) + { + *t++ = (char)(0xE0 | ((c >> 12) & 0x0F)); + } + else + { + if (c < 0x200000) + { + *t++ = (char)(0xF0 | ((c >> 18) & 0x07)); + } + else + { + if (c < 0x04000000) + { + *t++ = (char)(0xF8 | ((c >> 24) & 0x03)); + } + else + { + *t++ = (char)(0xFC | ((c >> 30) & 0x01)); + *t++ = (char)(0x80 | ((c >> 24) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 18) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 12) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 6) & 0x3F)); + } + *t++ = (char)(0x80 | (c & 0x3F)); + m = t - buf - 1; + if (i + m >= k) + { + soap_unget(soap, c | 0x80000000); + *n = i; + return soap->error = SOAP_EOM; + } + t = buf; + *s++ = *t++; + continue; + } + } + else + { + c = soap_getutf8(soap); + } + switch (c) + { + case SOAP_TT: + *s++ = '<'; + soap_unget(soap, '/'); + break; + case SOAP_LT: + *s++ = '<'; + break; + case SOAP_GT: + if (d == ' ') + { + soap_unget(soap, c); + *s = '\0'; + *n = i + 1; + return SOAP_OK; + } + *s++ = '>'; + break; + case SOAP_QT: + if (c == d) + { + *s = '\0'; + *n = i + 1; + return SOAP_OK; + } + *s++ = '"'; + break; + case SOAP_AP: + if (c == d) + { + *s = '\0'; + *n = i + 1; + return SOAP_OK; + } + *s++ = '\''; + break; + case '\t': + case '\n': + case '\r': + case ' ': + case '/': + if (d == ' ') + { + soap_unget(soap, c); + *s = '\0'; + *n = i + 1; + return SOAP_OK; + } + *s++ = (char)c; + break; + default: + if ((int)c == EOF) + { + *s = '\0'; + *n = i + 1; + return soap->error = SOAP_CHK_EOF; + } + *s++ = (char)c; + } + } + return soap->error = SOAP_EOM; +} + +/******************************************************************************/ + +#ifdef WITH_FAST +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_store_lab(struct soap *soap, const char *s, size_t n) +{ + soap->labidx = 0; + return soap_append_lab(soap, s, n); +} +#endif + +/******************************************************************************/ + +#ifdef WITH_FAST +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_append_lab(struct soap *soap, const char *s, size_t n) +{ + if (soap->labidx + n < soap->labidx) + return soap->error = SOAP_EOM; + if (soap->labidx + n >= soap->lablen) + { + char *t = soap->labbuf; + 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) + { + if (soap->lablen << 1 < soap->lablen) + return soap->error = SOAP_EOM; + soap->lablen <<= 1; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New look-aside buffer size=%lu\n", (unsigned long)soap->lablen)); + if (SOAP_MAXALLOCSIZE > 0 && soap->lablen > SOAP_MAXALLOCSIZE) + return soap->error = SOAP_EOM; + soap->labbuf = (char*)SOAP_MALLOC(soap, soap->lablen); + if (!soap->labbuf) + { + if (t) + SOAP_FREE(soap, t); + return soap->error = SOAP_EOM; + } + if (t) + { + (void)soap_memcpy((void*)soap->labbuf, soap->lablen, (const void*)t, soap->labidx); + SOAP_FREE(soap, t); + } + } + if (s) + { + (void)soap_memcpy((void*)(soap->labbuf + soap->labidx), soap->lablen - soap->labidx, (const void*)s, n); + soap->labidx += n; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_peek_element(struct soap *soap) +{ +#ifdef WITH_DOM + struct soap_dom_attribute **att = NULL; + char *lead = NULL; +#endif + struct soap_attribute *tp, *tq = NULL; + const char *t; + char *s; + soap_wchar c; + int i; + if (soap->peeked) + { + if (!*soap->tag) + return soap->error = SOAP_NO_TAG; + return SOAP_OK; + } + soap->peeked = 1; + soap->id[0] = '\0'; + soap->href[0] = '\0'; + soap->type[0] = '\0'; + soap->arrayType[0] = '\0'; + soap->arraySize[0] = '\0'; + soap->arrayOffset[0] = '\0'; + soap->other = 0; + soap->root = -1; + soap->position = 0; + soap->null = 0; + soap->mustUnderstand = 0; + /* UTF-8 BOM? */ + c = soap_getchar(soap); + if (c == 0xEF && soap_get0(soap) == 0xBB) + { + soap_get1(soap); + c = soap_get1(soap); + if (c == 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 + /* whitespace leading up to the start tag is significant for DOM as-is (but comments and PIs are removed from this lead) */ + if (soap_coblank(c)) + { + soap->labidx = 0; + do + { + if (soap_append_lab(soap, NULL, 0)) + return soap->error; + s = soap->labbuf + soap->labidx; + i = soap->lablen - soap->labidx; + soap->labidx = soap->lablen; + while (soap_coblank(c)) + { + if (c != '\r') + { + if (i-- <= 0) + break; + *s++ = c; + } + c = soap_get(soap); + } + } while (soap_coblank(c) || i == 0); + *s = '\0'; + lead = soap->labbuf; + } +#else + /* skip space */ + while (soap_coblank(c)) + c = soap_get(soap); +#endif + if (c != SOAP_LT) + { + *soap->tag = '\0'; + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + soap_unget(soap, c); +#ifdef WITH_DOM + /* whitespace leading up to the end tag is significant for DOM as-is */ + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + if (lead && *lead) + soap->dom->tail = soap_strdup(soap, lead); + else + soap->dom->tail = SOAP_STR_EOS; /* body with closing tag instead of */ + } +#endif + return soap->error = SOAP_NO_TAG; + } + do + { + c = soap_get1(soap); + } while (soap_coblank(c)); + s = soap->tag; + i = sizeof(soap->tag); + while (c != '>' && c != '/' && c > 32 && (int)c != EOF) + { + if (i > 1) + { + *s++ = (char)c; + i--; + } + c = soap_get1(soap); + } + *s = '\0'; + while (soap_coblank(c)) + c = soap_get1(soap); +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM)) + { + struct soap_dom_element *elt; + elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element)); + if (!elt) + return soap->error; + elt->next = NULL; + elt->prnt = soap->dom; + elt->elts = NULL; + elt->atts = NULL; + elt->nstr = NULL; + elt->name = soap_strdup(soap, soap->tag); + elt->text = NULL; + elt->code = NULL; + elt->tail = NULL; + elt->node = NULL; + elt->type = 0; + if (lead && *lead) + elt->lead = soap_strdup(soap, lead); + else + elt->lead = NULL; + elt->soap = soap; + if (soap->dom) + { + struct soap_dom_element *p = soap->dom->elts; + if (p) + { + while (p->next) + p = p->next; + p->next = elt; + } + else + { + soap->dom->elts = elt; + } + } + soap->dom = elt; + att = &elt->atts; + if (!elt->name) + return soap->error = SOAP_EOM; + } +#endif + soap_pop_namespace(soap); + for (tp = soap->attributes; tp; tp = tp->next) + tp->visible = 0; + while ((int)c != EOF && c != '>' && c != '/') + { + s = soap->tmpbuf; + i = sizeof(soap->tmpbuf); + while (c != '=' && c != '>' && c != '/' && c > 32 && (int)c != EOF) + { + if (i > 1) + { + *s++ = (char)c; + i--; + } + c = soap_get1(soap); + } + *s = '\0'; + if (i == sizeof(soap->tmpbuf)) + return soap->error = SOAP_SYNTAX_ERROR; +#ifdef WITH_DOM + /* add attribute name to dom */ + if (att) + { + *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute)); + if (!*att) + return soap->error; + (*att)->next = NULL; + (*att)->nstr = NULL; + (*att)->name = soap_strdup(soap, soap->tmpbuf); + (*att)->text = NULL; + (*att)->soap = soap; + if (!(*att)->name) + return soap->error = SOAP_EOM; + } +#endif + if (!strncmp(soap->tmpbuf, "xmlns", 5)) + { + if (soap->tmpbuf[5] == ':') + t = soap->tmpbuf + 6; + else if (soap->tmpbuf[5]) + t = NULL; + else + t = SOAP_STR_EOS; + } + else + { + t = NULL; + } + tq = NULL; + for (tp = soap->attributes; tp; tq = tp, tp = tp->next) + { + if (!SOAP_STRCMP(tp->name, soap->tmpbuf)) + break; + } + if (!tp) + { + size_t l = strlen(soap->tmpbuf); + tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + l); + if (!tp) + return soap->error = SOAP_EOM; + (void)soap_memcpy((char*)tp->name, l + 1, soap->tmpbuf, l + 1); + tp->value = NULL; + tp->size = 0; + tp->ns = NULL; + tp->visible = 0; + /* append attribute to the end of the list */ + if (tq) + { + tq->next = tp; + tp->next = NULL; + } + else + { + tp->next = soap->attributes; + soap->attributes = tp; + } + } + else if (tp->visible) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Duplicate attribute in %s\n", soap->tag)); + return soap->error = SOAP_SYNTAX_ERROR; /* redefined (duplicate) attribute */ + } + while (soap_coblank(c)) + c = soap_get1(soap); + if (c == '=') + { + size_t k; + do + { + c = soap_getutf8(soap); + } while (soap_coblank(c)); + if (c != SOAP_QT && c != SOAP_AP) + { + if ((soap->mode & SOAP_XML_STRICT)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unquoted attribute value in %s\n", soap->tag)); + return soap->error = SOAP_SYNTAX_ERROR; + } + soap_unget(soap, c); + c = ' '; /* allow blank delimiter for non-well formed XML like HTML */ + } + k = tp->size; + if (soap_getattrval(soap, tp->value, &k, c)) + { +#ifdef WITH_FAST + if (soap->error != SOAP_EOM) + return soap->error; + soap->error = SOAP_OK; + if (soap_store_lab(soap, tp->value, k)) + return soap->error; + if (tp->value) + SOAP_FREE(soap, tp->value); + tp->value = NULL; + for (;;) + { + k = soap->lablen - soap->labidx; + if (soap_getattrval(soap, soap->labbuf + soap->labidx, &k, c)) + { + if (soap->error != SOAP_EOM) + return soap->error; + soap->error = SOAP_OK; + soap->labidx = soap->lablen; + if (soap_append_lab(soap, NULL, 0)) + return soap->error; + } + else + { + break; + } + } + if (soap->labidx) + { + tp->size = soap->lablen; + } + else + { + tp->size = strlen(soap->labbuf) + 1; + if (tp->size < SOAP_LABLEN) + tp->size = SOAP_LABLEN; + } + tp->value = (char*)SOAP_MALLOC(soap, tp->size); + if (!tp->value) + return soap->error = SOAP_EOM; + soap_strcpy(tp->value, tp->size, soap->labbuf); +#else + tp->size = k; + if (soap->error != SOAP_EOM) + return soap->error; + soap->error = SOAP_OK; + if (soap_alloc_block(soap) == NULL) + return soap->error; + for (;;) + { + s = (char*)soap_push_block(soap, NULL, SOAP_BLKLEN); + if (!s) + return soap->error; + k = SOAP_BLKLEN; + if (soap_getattrval(soap, s, &k, c)) + { + if (soap->error != SOAP_EOM) + return soap->error; + soap->error = SOAP_OK; + soap_size_block(soap, NULL, k); + } + else + { + break; + } + } + k = tp->size + soap->blist->size; + if (SOAP_MAXALLOCSIZE > 0 && k > SOAP_MAXALLOCSIZE) + return soap->error = SOAP_EOM; + s = (char*)SOAP_MALLOC(soap, k); + if (!s) + return soap->error = SOAP_EOM; + if (tp->value) + { + (void)soap_memcpy((void*)s, k, (const void*)tp->value, tp->size); + SOAP_FREE(soap, tp->value); + } + (void)soap_save_block(soap, NULL, s + tp->size, 0); + tp->value = s; + tp->size = k; +#endif + } + tp->visible = 2; /* seen this attribute w/ value */ + do + { + c = soap_get1(soap); + } while (soap_coblank(c)); +#ifdef WITH_DOM + if (att && tp->value) + { + (*att)->text = soap_strdup(soap, tp->value); + if (!(*att)->text) + return soap->error = SOAP_EOM; + } +#endif + } + else + { + if ((soap->mode & SOAP_XML_STRICT)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attribute withput a value in %s\n", soap->tag)); + return soap->error = SOAP_SYNTAX_ERROR; + } + tp->visible = 1; /* seen this attribute w/o value */ + } +#ifdef WITH_DOM + if (att) + att = &(*att)->next; +#endif + if (t && tp->value) + { + if (soap_push_namespace(soap, t, tp->value) == NULL) + return soap->error; + } + } +#ifdef WITH_DOM + if (att) + { + soap->dom->nstr = soap_current_namespace_tag(soap, soap->tag); + for (att = &soap->dom->atts; *att; att = &(*att)->next) + (*att)->nstr = soap_current_namespace_att(soap, (*att)->name); + } +#endif + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + soap->body = (c != '/'); + if (!soap->body) + { + do + { + c = soap_get1(soap); + } while (soap_coblank(c)); + } +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM)) + { + if (!soap->body && soap->dom->prnt) + soap->dom = soap->dom->prnt; + } +#endif + for (tp = soap->attributes; tp; tp = tp->next) + { + if (tp->visible && tp->value) + { +#ifndef WITH_NOIDREF + if (!strcmp(tp->name, "id")) + { + if ((soap->version > 0 && !(soap->imode & SOAP_XML_TREE)) + || (soap->mode & SOAP_XML_GRAPH)) + { + *soap->id = '#'; + soap_strcpy(soap->id + 1, sizeof(soap->id) - 1, tp->value); + } + } + else if (!strcmp(tp->name, "href")) + { + if ((soap->version == 1 && !(soap->imode & SOAP_XML_TREE)) + || (soap->mode & SOAP_XML_GRAPH) + || ((soap->mode & (SOAP_ENC_MTOM | SOAP_ENC_DIME)) && *tp->value != '#')) + soap_strcpy(soap->href, sizeof(soap->href), tp->value); + } + else if (!strcmp(tp->name, "ref")) + { + if ((soap->version == 2 && !(soap->imode & SOAP_XML_TREE)) + || (soap->mode & SOAP_XML_GRAPH)) + { + *soap->href = '#'; + soap_strcpy(soap->href + (*tp->value != '#'), sizeof(soap->href) - 1, tp->value); + } + } +#else + if (!strcmp(tp->name, "href")) + { + if ((soap->mode & (SOAP_ENC_MTOM | SOAP_ENC_DIME)) && *tp->value != '#') + soap_strcpy(soap->href, sizeof(soap->href), tp->value); + } +#endif + else if (!soap_match_tag(soap, tp->name, "xsi:type")) + { + soap_strcpy(soap->type, sizeof(soap->type), tp->value); + } + else if ((!soap_match_tag(soap, tp->name, "xsi:null") + || !soap_match_tag(soap, tp->name, "xsi:nil")) + && (!strcmp(tp->value, "1") + || !strcmp(tp->value, "true"))) + { + soap->null = 1; + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:encodingStyle")) + { + if (!soap->encodingStyle) + soap->encodingStyle = SOAP_STR_EOS; + soap_version(soap); + } + else if (soap->version == 1) + { + if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arrayType")) + { + s = soap_strrchr(tp->value, '['); + if (s && (size_t)(s - tp->value) < sizeof(soap->arrayType)) + { + (void)soap_strncpy(soap->arrayType, sizeof(soap->arrayType), tp->value, s - tp->value); + soap_strcpy(soap->arraySize, sizeof(soap->arraySize), s); + } + else + soap_strcpy(soap->arrayType, sizeof(soap->arrayType), tp->value); + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:offset")) + { + soap_strcpy(soap->arrayOffset, sizeof(soap->arrayOffset), tp->value); + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:position")) + { + soap->position = soap_getposition(tp->value, soap->positions); + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:root")) + { + soap->root = ((!strcmp(tp->value, "1") || !strcmp(tp->value, "true"))); + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand") + && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true"))) + { + soap->mustUnderstand = 1; + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:actor")) + { + if ((!soap->actor || strcmp(soap->actor, tp->value)) + && strcmp(tp->value, "http://schemas.xmlsoap.org/soap/actor/next")) + soap->other = 1; + } + } + else if (soap->version == 2) + { +#ifndef WITH_NOIDREF + if (!soap_match_tag(soap, tp->name, "SOAP-ENC:id")) + { + *soap->id = '#'; + soap_strcpy(soap->id + 1, sizeof(soap->id) - 1, tp->value); + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:ref")) + { + *soap->href = '#'; + soap_strcpy(soap->href + (*tp->value != '#'), sizeof(soap->href) - 1, tp->value); + } + else +#endif + if (!soap_match_tag(soap, tp->name, "SOAP-ENC:itemType")) + { + soap_strcpy(soap->arrayType, sizeof(soap->arrayType), tp->value); + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arraySize")) + { + soap_strcpy(soap->arraySize, sizeof(soap->arraySize), tp->value); + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand") + && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true"))) + { + soap->mustUnderstand = 1; + } + else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:role")) + { + if ((!soap->actor || strcmp(soap->actor, tp->value)) + && strcmp(tp->value, "http://www.w3.org/2003/05/soap-envelope/role/next")) + soap->other = 1; + } + } + else + { + if (!soap_match_tag(soap, tp->name, "wsdl:required") && !strcmp(tp->value, "true")) + soap->mustUnderstand = 1; + } + } + } +#ifdef WITH_DOM + if (soap->feltbegin) + return soap->error = soap->feltbegin(soap, soap->tag); +#endif + return soap->error = SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_retry(struct soap *soap) +{ + soap->error = SOAP_OK; + soap_revert(soap); +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_revert(struct soap *soap) +{ + if (!soap->peeked) + { + soap->peeked = 1; + if (soap->body) + soap->level--; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reverting to last element '%s' (level=%u)\n", soap->tag, soap->level)); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_ignore(struct soap *soap) +{ + int n = 0; + soap_wchar c; + soap->level++; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Ignoring XML content at level=%u\n", soap->level)); +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + if (!soap_string_in(soap, -1, -1, -1, NULL)) + return soap->error; + } + else +#endif + { + for (;;) + { + c = soap_get(soap); + switch (c) + { + case SOAP_TT: + if (n == 0) + goto end; + n--; + break; + case SOAP_LT: + n++; + break; + case '/': + if (n > 0) + { + c = soap_get0(soap); + if (c == '>') + n--; + } + break; + default: + if ((int)c == EOF) + return soap->error = SOAP_EOF; + } + } +end: + soap_unget(soap, c); + } + return soap_element_end_in(soap, NULL); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_string_out(struct soap *soap, const char *s, int flag) +{ + const char *t; + soap_wchar c; + soap_wchar mask = (soap_wchar)0xFFFFFF80UL; +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + soap->dom->text = soap_strdup(soap, s); + if (!soap->dom->text) + return soap->error = SOAP_EOM; + return SOAP_OK; + } +#endif + if (flag == 2 || (soap->mode & SOAP_C_UTFSTRING)) + mask = 0; + t = s; + while ((c = *t++)) + { + switch (c) + { + case 0x09: + if (flag) + { + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, " ", 5)) + return soap->error; + s = t; + } + break; + case 0x0A: + if (flag) + { + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, " ", 5)) + return soap->error; + s = t; + } + break; +#ifdef WITH_CRTOLF + case 0x0D: + if (*t == 0x0A) + { + if (soap_send_raw(soap, s, t - s - 1)) + return soap->error; + s = t; + } + else if (flag) + { + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, " ", 5)) + return soap->error; + s = t; + } + else + { + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "\n", 1)) + return soap->error; + s = t; + } + break; +#endif + case '&': + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&", 5)) + return soap->error; + s = t; + break; + case '<': + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "<", 4)) + return soap->error; + s = t; + break; + case '>': + if (!flag) + { + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, ">", 4)) + return soap->error; + s = t; + } + break; + case '"': + if (flag) + { + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, """, 6)) + return soap->error; + s = t; + } + break; + case 0x7F: + if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "", 6)) + return soap->error; + s = t; + break; + default: +#ifndef WITH_LEANER +#ifdef HAVE_MBTOWC + if ((soap->mode & SOAP_C_MBSTRING)) + { + wchar_t wc; + int m = mbtowc(&wc, t - 1, MB_CUR_MAX); + 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; + } + } +#endif +#endif +#ifndef WITH_NOSTRINGTOUTF8 + if ((c & mask) || !(c & 0xFFFFFFE0UL)) + { + if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned char)c)) + return soap->error; + s = t; + } +#endif + } + } + return soap_send_raw(soap, s, t - s - 1); +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_string_in(struct soap *soap, int flag, long minlen, long maxlen, const char *pattern) +{ + char *s = NULL; + char *t = NULL; + size_t i; + ULONG64 l = 0; + int n = 0, f = 0, m = 0; + soap_wchar c; +#if !defined(WITH_LEANER) && defined(HAVE_WCTOMB) + char buf[MB_LEN_MAX > 8 ? MB_LEN_MAX : 8]; +#else + char buf[8]; +#endif + if (maxlen < 0 && soap->maxlength > 0) + maxlen = soap->maxlength; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reading string content, flag=%d\n", flag)); + if (flag <= 0 && soap->peeked && *soap->tag) + { +#ifndef WITH_LEAN + struct soap_attribute *tp; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String content includes tag '%s' and attributes\n", soap->tag)); + t = soap->tmpbuf; + *t = '<'; + soap_strcpy(t + 1, sizeof(soap->tmpbuf) - 1, soap->tag); + t += strlen(t); + for (tp = soap->attributes; tp; tp = tp->next) + { + if (tp->visible) + { + size_t k = strlen(tp->name); + if (t + k + 1 >= soap->tmpbuf + sizeof(soap->tmpbuf)) + break; /* too many or attribute values to large */ + *t++ = ' '; + (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->name, k); + t += k; + if (tp->value) + { + k = strlen(tp->value); + if (t + k + 3 >= soap->tmpbuf + sizeof(soap->tmpbuf)) + break; /* too many or attribute values to large */ + *t++ = '='; + *t++ = '"'; + (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->value, k); + t += k; + *t++ = '"'; + } + } + } + if (!soap->body) + *t++ = '/'; + *t++ = '>'; + *t = '\0'; + t = soap->tmpbuf; + m = (int)strlen(soap->tmpbuf); +#endif + if (soap->body) + n = 1; + f = 1; + soap->peeked = 0; + } +#ifdef WITH_CDATA + if (flag <= 0) + { + int state = 0; +#ifdef WITH_FAST + soap->labidx = 0; /* use look-aside buffer */ +#else + if (soap_alloc_block(soap) == NULL) + return NULL; +#endif + for (;;) + { +#ifdef WITH_FAST + size_t k; + if (soap_append_lab(soap, NULL, 0)) /* allocate more space in look-aside buffer if necessary */ + return NULL; + s = soap->labbuf + soap->labidx; /* space to populate */ + k = soap->lablen - soap->labidx; /* number of bytes available */ + soap->labidx = soap->lablen; /* claim this space */ +#else + size_t k = SOAP_BLKLEN; + s = (char*)soap_push_block(soap, NULL, k); + if (!s) + return NULL; +#endif + for (i = 0; i < k; i++) + { + if (m > 0) + { + *s++ = *t++; /* copy multibyte characters */ + m--; + continue; + } + c = soap_getchar(soap); + if ((int)c == EOF) + goto end; + if ((c >= 0x80 || c < SOAP_AP) && state != 1) + { + if ((c & 0x7FFFFFFF) >= 0x80) + { + soap_unget(soap, c); + c = soap_getutf8(soap); + } + if ((c & 0x7FFFFFFF) >= 0x80 && (flag <= 0 || (soap->mode & SOAP_C_UTFSTRING))) + { + c &= 0x7FFFFFFF; + t = buf; + if (c < 0x0800) + *t++ = (char)(0xC0 | ((c >> 6) & 0x1F)); + else + { +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + if (!((c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF))) + c = SOAP_UNKNOWN_UNICODE_CHAR; +#endif + if (c < 0x010000) + { + *t++ = (char)(0xE0 | ((c >> 12) & 0x0F)); + } + else + { + if (c < 0x200000) + { + *t++ = (char)(0xF0 | ((c >> 18) & 0x07)); + } + else + { + if (c < 0x04000000) + { + *t++ = (char)(0xF8 | ((c >> 24) & 0x03)); + } + else + { + *t++ = (char)(0xFC | ((c >> 30) & 0x01)); + *t++ = (char)(0x80 | ((c >> 24) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 18) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 12) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 6) & 0x3F)); + } + *t++ = (char)(0x80 | (c & 0x3F)); + m = (int)(t - buf) - 1; + t = buf; + *s++ = *t++; + continue; + } + } + switch (state) + { + case 1: + if (c == ']') + state = 4; + *s++ = (char)c; + continue; + case 2: + if (c == '-') + state = 6; + *s++ = (char)c; + continue; + case 3: + if (c == '?') + state = 8; + *s++ = (char)c; + continue; + /* CDATA */ + case 4: + if (c == ']') + state = 5; + else + state = 1; + *s++ = (char)c; + continue; + case 5: + if (c == '>') + state = 0; + else if (c != ']') + state = 1; + *s++ = (char)c; + continue; + /* comment */ + case 6: + if (c == '-') + state = 7; + else + state = 2; + *s++ = (char)c; + continue; + case 7: + if (c == '>') + state = 0; + else if (c != '-') + state = 2; + *s++ = (char)c; + continue; + /* PI */ + case 8: + if (c == '>') + state = 0; + else if (c != '?') + state = 3; + *s++ = (char)c; + continue; + } + switch (c) + { + case SOAP_TT: + if (n == 0) + goto end; + n--; + *s++ = '<'; + t = (char*)"/"; + m = 1; + break; + case SOAP_LT: + if (flag == 3 || (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); + if (c == '>') + n--; + soap_unget(soap, c); + } + *s++ = '/'; + break; + case '<': + c = soap_getchar(soap); + if (c == '/') + { + if (n == 0) + { + c = SOAP_TT; + goto end; + } + n--; + } + else if (c == '!') + { + c = soap_getchar(soap); + if (c == '[') + { + do + { + c = soap_getchar(soap); + } while ((int)c != EOF && c != '['); + if ((int)c == EOF) + goto end; + t = (char*)"![CDATA["; + m = 8; + state = 1; + } + else if (c == '-') + { + c = soap_getchar(soap); + if (c == '-') + state = 2; + t = (char*)"!-"; + m = 2; + soap_unget(soap, c); + } + else + { + t = (char*)"!"; + m = 1; + soap_unget(soap, c); + } + *s++ = '<'; + break; + } + else if (c == '?') + { + state = 3; + } + else if (flag == 3 || (f && n == 0)) + { + soap_revget1(soap); + c = '<'; + goto end; + } + else + n++; + soap_unget(soap, c); + *s++ = '<'; + break; + case '>': + *s++ = '>'; + break; + case '"': + *s++ = '"'; + break; + default: +#ifndef WITH_LEANER +#ifdef HAVE_WCTOMB + if ((soap->mode & SOAP_C_MBSTRING)) + { +#if defined(WIN32) && !defined(CYGWIN) && !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(__BORLANDC__) + m = 0; + wctomb_s(&m, buf, sizeof(buf), (wchar_t)(c & 0x7FFFFFFF)); +#else + m = wctomb(buf, (wchar_t)(c & 0x7FFFFFFF)); +#endif + if (m >= 1 && m <= (int)MB_CUR_MAX) + { + t = buf; + *s++ = *t++; + m--; + } + else + { + *s++ = SOAP_UNKNOWN_CHAR; + m = 0; + } + } + else +#endif +#endif + *s++ = (char)(c & 0xFF); + } + l++; + if (maxlen >= 0 && l > (size_t)maxlen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen)); + soap->error = SOAP_LENGTH; + return NULL; + } + } + } + } +#endif +#ifdef WITH_FAST + soap->labidx = 0; /* use look-aside buffer */ +#else + if (soap_alloc_block(soap) == NULL) + return NULL; +#endif + for (;;) + { +#ifdef WITH_FAST + size_t k; + if (soap_append_lab(soap, NULL, 0)) /* allocate more space in look-aside buffer if necessary */ + return NULL; + s = soap->labbuf + soap->labidx; /* space to populate */ + k = soap->lablen - soap->labidx; /* number of bytes available */ + soap->labidx = soap->lablen; /* claim this space */ +#else + size_t k = SOAP_BLKLEN; + s = (char*)soap_push_block(soap, NULL, k); + if (!s) + return NULL; +#endif + for (i = 0; i < k; i++) + { + if (m > 0) + { + *s++ = *t++; /* copy multibyte characters */ + m--; + continue; + } +#ifndef WITH_CDATA + if (flag <= 0) + c = soap_getchar(soap); + else +#endif + { + c = soap_getutf8(soap); + if ((soap->mode & SOAP_C_UTFSTRING)) + { + if (c >= 0x80 || (c < SOAP_AP && c >= -0x7FFFFF80)) + { + c &= 0x7FFFFFFF; + t = buf; + if (c < 0x0800) + { + *t++ = (char)(0xC0 | ((c >> 6) & 0x1F)); + } + else + { +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + if (!((c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF))) + c = SOAP_UNKNOWN_UNICODE_CHAR; +#endif + if (c < 0x010000) + { + *t++ = (char)(0xE0 | ((c >> 12) & 0x0F)); + } + else + { + if (c < 0x200000) + { + *t++ = (char)(0xF0 | ((c >> 18) & 0x07)); + } + else + { + if (c < 0x04000000) + { + *t++ = (char)(0xF8 | ((c >> 24) & 0x03)); + } + else + { + *t++ = (char)(0xFC | ((c >> 30) & 0x01)); + *t++ = (char)(0x80 | ((c >> 24) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 18) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 12) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 6) & 0x3F)); + } + *t++ = (char)(0x80 | (c & 0x3F)); + m = (int)(t - buf) - 1; + t = buf; + *s++ = *t++; + l++; + if (maxlen >= 0 && l > (size_t)maxlen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen)); + soap->error = SOAP_LENGTH; + return NULL; + } + continue; + } + } + } + switch (c) + { + case SOAP_TT: + if (n == 0) + goto end; + n--; + *s++ = '<'; + t = (char*)"/"; + m = 1; + break; + case SOAP_LT: + if (flag == 3 || (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) + { + if (flag > 0) + { + c = soap_get(soap); + if (c == SOAP_GT) + n--; + } + else + { + c = soap_getchar(soap); + if (c == '>') + n--; + } + soap_unget(soap, c); + } + *s++ = '/'; + break; + case (soap_wchar)('<' | 0x80000000): + if (flag > 0) + { + *s++ = '<'; + } + else + { + *s++ = '&'; + t = (char*)"lt;"; + m = 3; + } + break; + case (soap_wchar)('>' | 0x80000000): + if (flag > 0) + { + *s++ = '>'; + } + else + { + *s++ = '&'; + t = (char*)"gt;"; + m = 3; + } + break; + case (soap_wchar)('&' | 0x80000000): + if (flag > 0) + { + *s++ = '&'; + } + else + { + *s++ = '&'; + t = (char*)"amp;"; + m = 4; + } + break; + case (soap_wchar)('"' | 0x80000000): + if (flag > 0) + { + *s++ = '"'; + } + else + { + *s++ = '&'; + t = (char*)"quot;"; + m = 5; + } + break; + case (soap_wchar)('\'' | 0x80000000): + if (flag > 0) + { + *s++ = '\''; + } + else + { + *s++ = '&'; + t = (char*)"apos;"; + m = 5; + } + break; + default: + if ((int)c == EOF) + goto end; +#ifndef WITH_CDATA + if (c == '<') + { + c = soap_getchar(soap); + soap_unget(soap, c); + if (c == '/') + { + c = SOAP_TT; + if (n == 0) + goto end; + n--; + } + else + { + n++; + } + *s++ = '<'; + } + else +#endif +#ifndef WITH_LEANER +#ifdef HAVE_WCTOMB + if ((soap->mode & SOAP_C_MBSTRING)) + { +#if defined(WIN32) && !defined(CYGWIN) && !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(__BORLANDC__) + m = 0; + wctomb_s(&m, buf, sizeof(buf), (wchar_t)(c & 0x7FFFFFFF)); +#else + m = wctomb(buf, (wchar_t)(c & 0x7FFFFFFF)); +#endif + if (m >= 1 && m <= (int)MB_CUR_MAX) + { + t = buf; + *s++ = *t++; + m--; + } + else + { + *s++ = SOAP_UNKNOWN_CHAR; + m = 0; + } + } + else +#endif +#endif + *s++ = (char)(c & 0xFF); + } + l++; + if (maxlen >= 0 && l > (size_t)maxlen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen)); + soap->error = SOAP_LENGTH; + return NULL; + } + } + } +end: + soap_unget(soap, c); + *s = '\0'; +#ifdef WITH_FAST + t = soap_strdup(soap, soap->labbuf); + if (!t) + return NULL; +#else + soap_size_block(soap, NULL, i + 1); + t = (char*)soap_save_block(soap, NULL, NULL, 0); +#endif + if (minlen > 0 && l < (size_t)minlen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too short: %lu chars, minlen=%ld\n", (unsigned long)l, minlen)); + soap->error = SOAP_LENGTH; + return NULL; + } +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom && *t) + { + if (flag > 0) + { + soap->dom->text = t; + } + else + { + soap->dom->code = t; + if (flag < 0) + { + /* the tag URI and name are already in the XML code string */ + soap->dom->nstr = NULL; + soap->dom->name = NULL; + } + } + } +#endif + if (flag == 2) + { + if (soap_s2QName(soap, t, &t, minlen, maxlen, pattern)) + return NULL; + } + else if (flag >= 4 && t) + { + t = soap_collapse(soap, t, flag, 1); + } +#ifndef WITH_LEANER + else if (pattern && soap->fsvalidate) + { + soap->error = soap->fsvalidate(soap, pattern, t); + if (soap->error) + return NULL; + } +#endif + return t; +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_wstring_out(struct soap *soap, const wchar_t *s, int flag) +{ + const char *t; + char tmp; + soap_wchar c; +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + soap->dom->text = soap_wchar2s(soap, s); + return SOAP_OK; + } +#endif + while ((c = *s++)) + { + switch (c) + { + case 0x09: + if (flag) + t = " "; + else + t = "\t"; + break; + case 0x0A: + if (flag) + t = " "; + else + t = "\n"; + break; +#ifdef WITH_CR_TO_LF + case 0x0D: + if (*s == 0x0A) + continue; + if (flag) + t = " "; + else + t = "\n"; + break; +#endif + case '&': + t = "&"; + break; + case '<': + t = "<"; + break; + case '>': + if (flag) + t = ">"; + else + t = ">"; + break; + case '"': + if (flag) + t = """; + else + t = "\""; + break; + default: + if (c >= 0x20 && c < 0x80) + { + tmp = (char)c; + if (soap_send_raw(soap, &tmp, 1)) + return soap->error; + } + else + { + /* check for UTF16 encoding when wchar_t is too small to hold UCS */ + if (sizeof(wchar_t) < 4 && (c & 0xFC00) == 0xD800) + { + soap_wchar d = *s; + if ((d & 0xFC00) == 0xDC00) + { + c = ((c - 0xD800) << 10) + (d - 0xDC00) + 0x10000; + s++; + } +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + else + { + c = SOAP_UNKNOWN_UNICODE_CHAR; /* Malformed UTF-16 */ + } +#endif + } + if (soap_pututf8(soap, (unsigned long)c)) + return soap->error; + } + continue; + } + if (soap_send(soap, t)) + return soap->error; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +wchar_t * +SOAP_FMAC2 +soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen, const char *pattern) +{ + wchar_t *s; + int i, n = 0, f = 0; + ULONG64 l = 0; + soap_wchar c; + char *t = NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reading wide string content\n")); + if (maxlen < 0 && soap->maxlength > 0) + maxlen = soap->maxlength; + if (flag <= 0 && soap->peeked && *soap->tag) + { +#ifndef WITH_LEAN + struct soap_attribute *tp; + t = soap->tmpbuf; + *t = '<'; + soap_strcpy(t + 1, sizeof(soap->tmpbuf) - 1, soap->tag); + t += strlen(t); + for (tp = soap->attributes; tp; tp = tp->next) + { + if (tp->visible) + { + size_t k = strlen(tp->name); + if (t + k + 1 >= soap->tmpbuf + sizeof(soap->tmpbuf)) + break; + *t++ = ' '; + (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->name, k); + t += k; + if (tp->value) + { + k = strlen(tp->value); + if (t + k + 3 >= soap->tmpbuf + sizeof(soap->tmpbuf)) + break; + *t++ = '='; + *t++ = '"'; + (void)soap_strncpy(t, sizeof(soap->tmpbuf) - (t - soap->tmpbuf), tp->value, k); + t += k; + *t++ = '"'; + } + } + } + if (!soap->body) + *t++ = '/'; + *t++ = '>'; + *t = '\0'; + t = soap->tmpbuf; +#endif + if (soap->body) + n = 1; + f = 1; + soap->peeked = 0; + } + if (soap_alloc_block(soap) == NULL) + return NULL; + for (;;) + { + s = (wchar_t*)soap_push_block(soap, NULL, sizeof(wchar_t)*SOAP_BLKLEN); + if (!s) + return NULL; + for (i = 0; i < SOAP_BLKLEN; i++) + { + if (t) + { + *s++ = (wchar_t)*t++; + if (!*t) + t = NULL; + continue; + } + c = soap_getutf8(soap); + switch (c) + { + case SOAP_TT: + if (n == 0) + goto end; + n--; + *s++ = L'<'; + soap_unget(soap, '/'); + break; + case SOAP_LT: + if (flag == 3 || (f && n == 0)) + goto end; + n++; + *s++ = L'<'; + break; + case SOAP_GT: + *s++ = L'>'; + break; + case SOAP_QT: + *s++ = L'"'; + break; + case SOAP_AP: + *s++ = L'\''; + break; + case '/': + if (n > 0) + { + c = soap_getutf8(soap); + if (c == SOAP_GT) + n--; + soap_unget(soap, c); + } + *s++ = L'/'; + break; + case '<': + if (flag > 0) + { + *s++ = L'<'; + } + else + { + *s++ = L'&'; + t = (char*)"lt;"; + } + break; + case '>': + if (flag > 0) + { + *s++ = L'>'; + } + else + { + *s++ = (wchar_t)'&'; + t = (char*)"gt;"; + } + break; + case '"': + if (flag > 0) + { + *s++ = L'"'; + } + else + { + *s++ = L'&'; + t = (char*)"quot;"; + } + break; + default: + if ((int)c == EOF) + goto end; + /* use UTF16 encoding when wchar_t is too small to hold UCS */ + if (sizeof(wchar_t) < 4 && c > 0xFFFF) + { + 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++; + if (maxlen >= 0 && l > (size_t)maxlen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen)); + soap->error = SOAP_LENGTH; + return NULL; + } + } + } +end: + soap_unget(soap, c); + *s = L'\0'; + soap_size_block(soap, NULL, sizeof(wchar_t) * (i + 1)); + if (minlen > 0 && l < (size_t)minlen) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "String too short: %lu chars, minlen=%ld\n", (unsigned long)l, minlen)); + soap->error = SOAP_LENGTH; + return NULL; + } + s = (wchar_t*)soap_save_block(soap, NULL, NULL, 0); +#ifndef WITH_LEAN + if (flag >= 4 && s) + s = soap_wcollapse(soap, s, flag, 1); +#endif +#ifndef WITH_LEANER + if (pattern && soap->fwvalidate) + { + soap->error = soap->fwvalidate(soap, pattern, s); + if (soap->error) + return NULL; + } +#endif +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + soap->dom->text = soap_wchar2s(soap, s); +#endif + return s; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_int2s(struct soap *soap, int n) +{ + return soap_long2s(soap, (long)n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outint(struct soap *soap, const char *tag, int id, const int *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_long2s(soap, (long)*p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2int(struct soap *soap, const char *s, int *p) +{ + if (s) + { + long n; + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; +#ifndef WITH_NOIO +#ifndef WITH_LEAN + soap_reset_errno; +#endif +#endif + 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 +#endif +#endif + ) + soap->error = SOAP_TYPE; + *p = (int)n; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int * +SOAP_FMAC2 +soap_inint(struct soap *soap, const char *tag, int *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":int") + && soap_match_tag(soap, soap->type, ":short") + && soap_match_tag(soap, soap->type, ":byte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (int*)soap_id_enter(soap, soap->id, p, t, sizeof(int), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2int(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (int*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(int), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_long2s(struct soap *soap, long n) +{ + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), "%ld", n); + return soap->tmpbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outlong(struct soap *soap, const char *tag, int id, const long *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_long2s(soap, *p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2long(struct soap *soap, const char *s, long *p) +{ + if (s) + { + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; +#ifndef WITH_NOIO +#ifndef WITH_LEAN + soap_reset_errno; +#endif +#endif + *p = soap_strtol(s, &r, 10); + if (s == r || *r +#ifndef WITH_NOIO +#ifndef WITH_LEAN + || soap_errno == SOAP_ERANGE +#endif +#endif + ) + soap->error = SOAP_TYPE; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +long * +SOAP_FMAC2 +soap_inlong(struct soap *soap, const char *tag, long *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":int") + && soap_match_tag(soap, soap->type, ":short") + && soap_match_tag(soap, soap->type, ":byte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (long*)soap_id_enter(soap, soap->id, p, t, sizeof(long), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2long(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (long*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(long), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_LONG642s(struct soap *soap, LONG64 n) +{ + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), SOAP_LONG_FORMAT, n); + return soap->tmpbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outLONG64(struct soap *soap, const char *tag, int id, const LONG64 *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_LONG642s(soap, *p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2LONG64(struct soap *soap, const char *s, LONG64 *p) +{ + if (s) + { + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; +#ifndef WITH_NOIO +#ifndef WITH_LEAN + soap_reset_errno; +#endif +#endif + *p = soap_strtoll(s, &r, 10); + if (s == r || *r +#ifndef WITH_NOIO +#ifndef WITH_LEAN + || soap_errno == SOAP_ERANGE +#endif +#endif + ) + soap->error = SOAP_TYPE; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +LONG64 * +SOAP_FMAC2 +soap_inLONG64(struct soap *soap, const char *tag, LONG64 *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":integer") + && soap_match_tag(soap, soap->type, ":positiveInteger") + && soap_match_tag(soap, soap->type, ":negativeInteger") + && soap_match_tag(soap, soap->type, ":nonPositiveInteger") + && soap_match_tag(soap, soap->type, ":nonNegativeInteger") + && soap_match_tag(soap, soap->type, ":long") + && soap_match_tag(soap, soap->type, ":int") + && soap_match_tag(soap, soap->type, ":short") + && soap_match_tag(soap, soap->type, ":byte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (LONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(LONG64), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2LONG64(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (LONG64*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(LONG64), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_byte2s(struct soap *soap, char n) +{ + return soap_long2s(soap, (long)n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outbyte(struct soap *soap, const char *tag, int id, const char *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_long2s(soap, (long)*p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2byte(struct soap *soap, const char *s, char *p) +{ + if (s) + { + long n; + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; + n = soap_strtol(s, &r, 10); + if (s == r || *r || n < -128 || n > 127) + soap->error = SOAP_TYPE; + *p = (char)n; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_inbyte(struct soap *soap, const char *tag, char *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":byte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (char*)soap_id_enter(soap, soap->id, p, t, sizeof(char), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2byte(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (char*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(char), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_short2s(struct soap *soap, short n) +{ + return soap_long2s(soap, (long)n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outshort(struct soap *soap, const char *tag, int id, const short *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_long2s(soap, (long)*p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2short(struct soap *soap, const char *s, short *p) +{ + if (s) + { + long n; + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; + n = soap_strtol(s, &r, 10); + if (s == r || *r || n < -32768 || n > 32767) + soap->error = SOAP_TYPE; + *p = (short)n; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +short * +SOAP_FMAC2 +soap_inshort(struct soap *soap, const char *tag, short *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":short") + && soap_match_tag(soap, soap->type, ":byte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (short*)soap_id_enter(soap, soap->id, p, t, sizeof(short), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2short(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (short*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(short), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_float2s(struct soap *soap, float n) +{ +#if defined(WITH_C_LOCALE) +# if !defined(WIN32) + SOAP_LOCALE_T locale; +# endif +#else + char *s; +#endif + if (soap_isnan((double)n)) + return "NaN"; + if (soap_ispinff(n)) + return "INF"; + if (soap_isninff(n)) + return "-INF"; +#if defined(WITH_C_LOCALE) +# ifdef WIN32 + _sprintf_s_l(soap->tmpbuf, _countof(soap->tmpbuf), soap->float_format, SOAP_LOCALE(soap), n); +# else + locale = uselocale(SOAP_LOCALE(soap)); + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 80), soap->float_format, n); + uselocale(locale); +# endif +#else + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 80), soap->float_format, n); + s = strchr(soap->tmpbuf, ','); /* convert decimal comma to DP */ + if (s) + *s = '.'; +#endif + return soap->tmpbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outfloat(struct soap *soap, const char *tag, int id, const float *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_float2s(soap, *p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2float(struct soap *soap, const char *s, float *p) +{ + if (s) + { + if (!*s) + return soap->error = SOAP_EMPTY; + if (!soap_tag_cmp(s, "INF")) + { + *p = FLT_PINFTY; + } + else if (!soap_tag_cmp(s, "+INF")) + { + *p = FLT_PINFTY; + } + else if (!soap_tag_cmp(s, "-INF")) + { + *p = FLT_NINFTY; + } + else if (!soap_tag_cmp(s, "NaN")) + { + *p = FLT_NAN; + } + else + { +/* On some systems strtof requires -std=c99 or does not even link: so we try strtod first */ +#if defined(WITH_C_LOCALE) +# if defined(HAVE_STRTOD_L) + char *r; +# ifdef WIN32 + *p = (float)_strtod_l(s, &r, SOAP_LOCALE(soap)); +# else + *p = (float)strtod_l(s, &r, SOAP_LOCALE(soap)); +# endif + if (*r) + soap->error = SOAP_TYPE; +# elif defined(HAVE_STRTOF_L) + char *r; + *p = strtof_l((char*)s, &r, SOAP_LOCALE(soap)); + if (*r) + soap->error = SOAP_TYPE; +# elif defined(HAVE_SSCANF_L) + double n; + if (sscanf_l(s, SOAP_LOCALE(soap), "%lf", &n) != 1) + soap->error = SOAP_TYPE; + *p = (float)n; +# elif defined(HAVE_STRTOD) + char *r; + SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap)); + *p = (float)strtod((char*)s, &r); + uselocale(locale); + if (*r) + soap->error = SOAP_TYPE; +# elif defined(HAVE_STRTOF) + char *r; + SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap)); + *p = strtof((char*)s, &r); + uselocale(locale); + if (*r) + soap->error = SOAP_TYPE; +# elif defined(HAVE_SSCANF) + double n; + SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap)); + if (sscanf(s, "%lf", &n) != 1) + soap->error = SOAP_TYPE; + uselocale(locale); + *p = (float)n; +# else + soap->error = SOAP_TYPE; +# endif +#elif defined(HAVE_STRTOD) + char *r; + *p = (float)strtod(s, &r); + if (*r) + soap->error = SOAP_TYPE; +#elif defined(HAVE_STRTOF) + char *r; + *p = strtof((char*)s, &r); + if (*r) + soap->error = SOAP_TYPE; +#elif defined(HAVE_SSCANF) + double n; + if (sscanf(s, "%lf", &n) != 1) + soap->error = SOAP_TYPE; + *p = (float)n; +#else + soap->error = SOAP_TYPE; +#endif + } + } + return soap->error; +} + +/******************************************************************************/ + +#ifndef WITH_LEAN +static int soap_isnumeric(struct soap *soap, const char *type) +{ + if (soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":float") + && soap_match_tag(soap, soap->type, ":double") + && soap_match_tag(soap, soap->type, ":decimal") + && soap_match_tag(soap, soap->type, ":integer") + && soap_match_tag(soap, soap->type, ":positiveInteger") + && soap_match_tag(soap, soap->type, ":negativeInteger") + && soap_match_tag(soap, soap->type, ":nonPositiveInteger") + && soap_match_tag(soap, soap->type, ":nonNegativeInteger") + && soap_match_tag(soap, soap->type, ":long") + && soap_match_tag(soap, soap->type, ":int") + && soap_match_tag(soap, soap->type, ":short") + && soap_match_tag(soap, soap->type, ":byte") + && soap_match_tag(soap, soap->type, ":unsignedLong") + && soap_match_tag(soap, soap->type, ":unsignedInt") + && soap_match_tag(soap, soap->type, ":unsignedShort") + && soap_match_tag(soap, soap->type, ":unsignedByte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return SOAP_ERR; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +float * +SOAP_FMAC2 +soap_infloat(struct soap *soap, const char *tag, float *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type != '\0' && soap_isnumeric(soap, type)) + return NULL; +#else + (void)type; +#endif + p = (float*)soap_id_enter(soap, soap->id, p, t, sizeof(float), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2float(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (float*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(float), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_double2s(struct soap *soap, double n) +{ +#if defined(WITH_C_LOCALE) +# if !defined(WIN32) + SOAP_LOCALE_T locale; +# endif +#else + char *s; +#endif + if (soap_isnan(n)) + return "NaN"; + if (soap_ispinfd(n)) + return "INF"; + if (soap_isninfd(n)) + return "-INF"; +#if defined(WITH_C_LOCALE) +# ifdef WIN32 + _sprintf_s_l(soap->tmpbuf, _countof(soap->tmpbuf), soap->double_format, SOAP_LOCALE(soap), n); +# else + locale = uselocale(SOAP_LOCALE(soap)); + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 80), soap->double_format, n); + uselocale(locale); +# endif +#else + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 80), soap->double_format, n); + s = strchr(soap->tmpbuf, ','); /* convert decimal comma to DP */ + if (s) + *s = '.'; +#endif + return soap->tmpbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outdouble(struct soap *soap, const char *tag, int id, const double *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_double2s(soap, *p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2double(struct soap *soap, const char *s, double *p) +{ + if (s) + { + if (!*s) + return soap->error = SOAP_EMPTY; + if (!soap_tag_cmp(s, "INF")) + { + *p = DBL_PINFTY; + } + else if (!soap_tag_cmp(s, "+INF")) + { + *p = DBL_PINFTY; + } + else if (!soap_tag_cmp(s, "-INF")) + { + *p = DBL_NINFTY; + } + else if (!soap_tag_cmp(s, "NaN")) + { + *p = DBL_NAN; + } + else + { +#if defined(WITH_C_LOCALE) +# if defined(HAVE_STRTOD_L) + char *r; +# ifdef WIN32 + *p = _strtod_l(s, &r, SOAP_LOCALE(soap)); +# else + *p = strtod_l(s, &r, SOAP_LOCALE(soap)); +# endif + if (*r) + soap->error = SOAP_TYPE; +# elif defined(HAVE_STRTOD) + char *r; + SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap)); + *p = strtod(s, &r); + uselocale(locale); + if (*r) + soap->error = SOAP_TYPE; +# elif defined(HAVE_SSCANF_L) + SOAP_LOCALE_T locale = uselocale(SOAP_LOCALE(soap)); + if (sscanf_l(s, SOAP_LOCALE(soap), "%lf", p) != 1) + soap->error = SOAP_TYPE; + uselocale(locale); +# else + soap->error = SOAP_TYPE; +# endif +#elif defined(HAVE_STRTOD) + char *r; + *p = strtod(s, &r); + if (*r) + soap->error = SOAP_TYPE; +#elif defined(HAVE_SSCANF) + if (sscanf(s, "%lf", p) != 1) + soap->error = SOAP_TYPE; +#else + soap->error = SOAP_TYPE; +#endif + } + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +double * +SOAP_FMAC2 +soap_indouble(struct soap *soap, const char *tag, double *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type != '\0' && soap_isnumeric(soap, type)) + return NULL; +#else + (void)type; +#endif + p = (double*)soap_id_enter(soap, soap->id, p, t, sizeof(double), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2double(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (double*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(double), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_unsignedByte2s(struct soap *soap, unsigned char n) +{ + return soap_unsignedLong2s(soap, (unsigned long)n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outunsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2unsignedByte(struct soap *soap, const char *s, unsigned char *p) +{ + if (s) + { + long n; + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; + n = soap_strtol(s, &r, 10); + if (s == r || *r || n < 0 || n > 255) + soap->error = SOAP_TYPE; + *p = (unsigned char)n; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +unsigned char * +SOAP_FMAC2 +soap_inunsignedByte(struct soap *soap, const char *tag, unsigned char *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":unsignedByte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (unsigned char*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned char), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2unsignedByte(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (unsigned char*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned char), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_unsignedShort2s(struct soap *soap, unsigned short n) +{ + return soap_unsignedLong2s(soap, (unsigned long)n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outunsignedShort(struct soap *soap, const char *tag, int id, const unsigned short *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2unsignedShort(struct soap *soap, const char *s, unsigned short *p) +{ + if (s) + { + long n; + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; + n = soap_strtol(s, &r, 10); + if (s == r || *r || n < 0 || n > 65535) + soap->error = SOAP_TYPE; + *p = (unsigned short)n; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +unsigned short * +SOAP_FMAC2 +soap_inunsignedShort(struct soap *soap, const char *tag, unsigned short *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":unsignedShort") + && soap_match_tag(soap, soap->type, ":unsignedByte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (unsigned short*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned short), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2unsignedShort(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (unsigned short*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned short), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_unsignedInt2s(struct soap *soap, unsigned int n) +{ + return soap_unsignedLong2s(soap, (unsigned long)n); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outunsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2unsignedInt(struct soap *soap, const char *s, unsigned int *p) +{ + if (s) + { + unsigned long n; + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; +#ifndef WITH_NOIO +#ifndef WITH_LEAN + soap_reset_errno; +#endif +#endif + n = soap_strtoul(s, &r, 10); + if (s == r || *r +#ifndef WITH_LEAN + || n != (unsigned int)n +#endif +#ifndef WITH_NOIO +#ifndef WITH_LEAN + || soap_errno == SOAP_ERANGE +#endif +#endif + ) + soap->error = SOAP_TYPE; +#ifdef HAVE_STRTOUL + if (n > 0 && strchr(s, '-')) + return soap->error = SOAP_TYPE; +#endif + *p = (unsigned int)n; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +unsigned int * +SOAP_FMAC2 +soap_inunsignedInt(struct soap *soap, const char *tag, unsigned int *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":unsignedInt") + && soap_match_tag(soap, soap->type, ":unsignedShort") + && soap_match_tag(soap, soap->type, ":unsignedByte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (unsigned int*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned int), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2unsignedInt(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (unsigned int*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned int), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_unsignedLong2s(struct soap *soap, unsigned long n) +{ + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), "%lu", n); + return soap->tmpbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outunsignedLong(struct soap *soap, const char *tag, int id, const unsigned long *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_unsignedLong2s(soap, *p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2unsignedLong(struct soap *soap, const char *s, unsigned long *p) +{ + if (s) + { + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; +#ifndef WITH_NOIO +#ifndef WITH_LEAN + soap_reset_errno; +#endif +#endif + *p = soap_strtoul(s, &r, 10); + if (s == r || *r +#ifndef WITH_NOIO +#ifndef WITH_LEAN + || soap_errno == SOAP_ERANGE +#endif +#endif + ) + soap->error = SOAP_TYPE; +#ifdef HAVE_STRTOUL + if (*p > 0 && strchr(s, '-')) + return soap->error = SOAP_TYPE; +#endif + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +unsigned long * +SOAP_FMAC2 +soap_inunsignedLong(struct soap *soap, const char *tag, unsigned long *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":unsignedInt") + && soap_match_tag(soap, soap->type, ":unsignedShort") + && soap_match_tag(soap, soap->type, ":unsignedByte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (unsigned long*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned long), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2unsignedLong(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (unsigned long*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(unsigned long), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_ULONG642s(struct soap *soap, ULONG64 n) +{ + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), SOAP_ULONG_FORMAT, n); + return soap->tmpbuf; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outULONG64(struct soap *soap, const char *tag, int id, const ULONG64 *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_ULONG642s(soap, *p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2ULONG64(struct soap *soap, const char *s, ULONG64 *p) +{ + if (s) + { + char *r; + if (!*s) + return soap->error = SOAP_EMPTY; +#ifndef WITH_NOIO +#ifndef WITH_LEAN + soap_reset_errno; +#endif +#endif + *p = soap_strtoull(s, &r, 10); + if (s == r || *r +#ifndef WITH_NOIO +#ifndef WITH_LEAN + || soap_errno == SOAP_ERANGE +#endif +#endif + ) + soap->error = SOAP_TYPE; + if (*p > 0 && strchr(s, '-')) + return soap->error = SOAP_TYPE; + } + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +ULONG64 * +SOAP_FMAC2 +soap_inULONG64(struct soap *soap, const char *tag, ULONG64 *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; +#ifndef WITH_LEAN + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":positiveInteger") + && soap_match_tag(soap, soap->type, ":nonNegativeInteger") + && soap_match_tag(soap, soap->type, ":unsignedLong") + && soap_match_tag(soap, soap->type, ":unsignedInt") + && soap_match_tag(soap, soap->type, ":unsignedShort") + && soap_match_tag(soap, soap->type, ":unsignedByte")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } +#else + (void)type; +#endif + p = (ULONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(ULONG64), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2ULONG64(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (ULONG64*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(ULONG64), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2char(struct soap *soap, const char *s, char **t, int flag, long minlen, long maxlen, const char *pattern) +{ + if (s) + { + const char *r = soap_string(soap, s, flag, minlen, maxlen, pattern); + if (r && (*t = soap_strdup(soap, r)) == NULL) + return soap->error = SOAP_EOM; + } + return soap->error; +} + +/******************************************************************************/ + +#ifndef WITH_COMPAT +#ifdef __cplusplus +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2stdchar(struct soap *soap, const char *s, std::string *t, int flag, long minlen, long maxlen, const char *pattern) +{ + if (s) + { + const char *r = soap_string(soap, s, flag, minlen, maxlen, pattern); + if (r) + t->assign(r); + } + return soap->error; +} +#endif +#endif + +/******************************************************************************/ + +static const char* +soap_string(struct soap *soap, const char *s, int flag, long minlen, long maxlen, const char *pattern) +{ + if (s) + { + if (maxlen < 0 && soap->maxlength > 0) + maxlen = soap->maxlength; + if (minlen > 0 || maxlen >= 0) + { + size_t l; + if ((soap->mode & SOAP_C_UTFSTRING)) + l = soap_utf8len(s); + else + l = strlen(s); + if ((maxlen >= 0 && l > (size_t)maxlen) || (minlen > 0 && l < (size_t)minlen)) + { + soap->error = SOAP_LENGTH; + return NULL; + } + } + if (flag >= 4) + s = soap_collapse(soap, (char*)s, flag, 0); +#ifndef WITH_LEANER + if (pattern && soap->fsvalidate) + { + soap->error = soap->fsvalidate(soap, pattern, s); + if (soap->error) + return NULL; + } +#else + (void)pattern; +#endif + } + return s; +} + +/******************************************************************************/ + +static char* +soap_collapse(struct soap *soap, char *s, int flag, int insitu) +{ + /* flag 4=normalizedString (replace), 5=token (collapse) */ + char *t; + size_t n; + if (!s) + return NULL; + if (flag == 4) + { + for (t = s; *t && (!soap_coblank((soap_wchar)*t) || *t == 32); t++) + continue; + if (*t) + { + /* replace white space and control chars by blanks */ + if (!insitu) + s = soap_strdup(soap, s); + for (t = s; *t; t++) + if (soap_coblank((soap_wchar)*t)) + *t = ' '; + } + return s; + } + /* collapse white space */ + for (t = s; *t && soap_coblank((soap_wchar)*t); t++) + continue; + n = strlen(t); + if (insitu && s < t) + (void)soap_memmove(s, n + 1, t, n + 1); + else + s = t; + if (n > 0) + { + if (!soap_coblank((soap_wchar)s[n-1])) + { + for (t = s; (*t && !soap_coblank((soap_wchar)*t)) || (*t == 32 && (!t[1] || !soap_coblank((soap_wchar)t[1]))); t++) + continue; + if (!*t) + return s; + } + if (!insitu) + s = soap_strdup(soap, s); + for (t = s; *t; t++) + { + if (soap_coblank((soap_wchar)*t)) + { + char *r; + *t = ' '; + for (r = t + 1; *r && soap_coblank((soap_wchar)*r); r++) + continue; + if (r > t + 1) + (void)soap_memmove(t + 1, n - (t-s), r, n - (r-s) + 1); + } + } + t--; + if (t >= s && *t == 32) + *t = '\0'; + } + return s; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2QName(struct soap *soap, const char *s, char **t, long minlen, long maxlen, const char *pattern) +{ + *t = NULL; + if (s) + { + const char *r = soap_QName(soap, s, minlen, maxlen, pattern); + if (r && (*t = soap_strdup(soap, r)) == NULL) + return soap->error = SOAP_EOM; + } + return soap->error; +} + +/******************************************************************************/ + +#ifndef WITH_COMPAT +#ifdef __cplusplus +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2stdQName(struct soap *soap, const char *s, std::string *t, long minlen, long maxlen, const char *pattern) +{ + t->clear(); + if (s) + { + const char *r = soap_QName(soap, s, minlen, maxlen, pattern); + if (r) + t->assign(r); + } + return soap->error; +} +#endif +#endif + +/******************************************************************************/ + +static const char* +soap_QName(struct soap *soap, const char *s, long minlen, long maxlen, const char *pattern) +{ + if (s) + { + char *b; + if (maxlen < 0 && soap->maxlength > 0) + maxlen = soap->maxlength; + if (minlen > 0 || maxlen >= 0) + { + size_t l; + if ((soap->mode & SOAP_C_UTFSTRING)) + l = soap_utf8len(s); + else + l = strlen(s); + if ((maxlen >= 0 && l > (size_t)maxlen) || (minlen > 0 && l < (size_t)minlen)) + { + soap->error = SOAP_LENGTH; + return NULL; + } + } +#ifdef WITH_FAST + soap->labidx = 0; +#else + if (soap_alloc_block(soap) == NULL) + return NULL; +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Normalized namespace(s) of QNames '%s'", s)); + /* convert (by prefix normalize prefix) all QNames in s */ + for (;;) + { + size_t n; + struct soap_nlist *np; + const char *p = NULL; + short flag = 0; + const char *r = NULL; + size_t m = 0; +#ifndef WITH_FAST + size_t k = 0; +#endif + /* skip blanks */ + while (*s && soap_coblank((soap_wchar)*s)) + s++; + if (!*s) + break; + /* find next QName */ + n = 1; + while (s[n] && !soap_coblank((soap_wchar)s[n])) + n++; + np = soap->nlist; + /* if there is no namespace stack, or prefix is "#" or "xml" then copy string */ + if (!np || *s == '#' || !strncmp(s, "xml:", 4)) + { + r = s; + m = n; + } + else /* we normalize the QName by replacing its prefix */ + { + const char *q; + for (p = s; *p && p < s + n; p++) + if (*p == ':') + break; + if (*p == ':') + { + size_t k = p - s; + while (np && (strncmp(np->id, s, k) || np->id[k])) + np = np->next; + p++; + } + else + { + while (np && *np->id) + np = np->next; + p = s; + } + /* replace prefix */ + if (np) + { + if (np->index >= 0 && soap->local_namespaces && (q = soap->local_namespaces[np->index].id) != NULL) + { + size_t k = strlen(q); + if (q[k-1] != '_') + { + r = q; + m = k; + } + else + { + flag = 1; + r = soap->local_namespaces[np->index].ns; + m = strlen(r); + } + } + else if (np->ns) + { + flag = 1; + r = np->ns; + m = strlen(r); + } + 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)); + soap->error = SOAP_NAMESPACE; + return NULL; + } + } + else if (s[n]) /* no namespace, part of string */ + { + r = s; + m = n; + } + else /* no namespace: assume "" namespace */ + { + flag = 1; + } + } +#ifdef WITH_FAST + if ((flag && soap_append_lab(soap, "\"", 1)) + || (m && soap_append_lab(soap, r, m)) + || (flag && soap_append_lab(soap, "\"", 1)) + || (p && (soap_append_lab(soap, ":", 1) || soap_append_lab(soap, p, n - (p-s))))) + return NULL; +#else + k = 2*flag + m + (p ? n - (p-s) + 1 : 0) + (s[n] != '\0'); + b = (char*)soap_push_block(soap, NULL, k); + if (!b) + return NULL; + if (flag) + *b++ = '"'; + if (m) + { + if (soap_memcpy((void*)b, k, (const void*)r, m)) + { + soap->error = SOAP_EOM; + return NULL; + } + b += m; + } + if (flag) + *b++ = '"'; + if (p) + { + *b++ = ':'; + if (soap_memcpy((void*)b, k - m - flag - 1, (const void*)p, n - (p-s))) + { + soap->error = SOAP_EOM; + return NULL; + } + b += n - (p-s); + } +#endif + /* advance to next and add spacing */ + s += n; + while (*s && soap_coblank(*s)) + s++; + if (*s) + { +#ifdef WITH_FAST + if (soap_append_lab(soap, " ", 1)) + return NULL; +#else + *b = ' '; +#endif + } + } +#ifdef WITH_FAST + if (soap_append_lab(soap, SOAP_STR_EOS, 1)) + return NULL; + b = soap->labbuf; +#else + b = (char*)soap_push_block(soap, NULL, 1); + if (!b) + return NULL; + *b = '\0'; + b = (char*)soap_save_block(soap, NULL, NULL, 0); +#endif +#ifndef WITH_LEANER + if (pattern && soap->fsvalidate) + { + soap->error = soap->fsvalidate(soap, pattern, b); + if (soap->error) + return NULL; + } +#else + (void)pattern; +#endif + return b; + } + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_QName2s(struct soap *soap, const char *s) +{ + const char *t = NULL; + if (s) + { +#ifdef WITH_FAST + soap_store_lab(soap, SOAP_STR_EOS, 1); + soap->labidx = 0; +#else + char *b = NULL; + if (soap_alloc_block(soap) == NULL) + return NULL; +#endif + for (;;) + { + size_t n; + const char *q = NULL; + const char *r = NULL; + size_t m = 0; +#ifndef WITH_FAST + size_t k = 0; +#endif + /* skip blanks */ + while (*s && soap_coblank((soap_wchar)*s)) + s++; + if (!*s) + { +#ifdef WITH_FAST + soap->labbuf[soap->labidx > 0 ? soap->labidx - 1 : 0] = '\0'; +#else + if (!b) + return soap_strdup(soap, SOAP_STR_EOS); + --b; + *b = '\0'; +#endif + break; + } + /* find next QName */ + n = 0; + while (s[n] && !soap_coblank((soap_wchar)s[n])) + { + if (s[n] == ':') + r = s; + n++; + } + if (*s != '"') /* non-quoted: pass string as is */ + { +#ifndef WITH_LEAN + if (r && (soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_XML_CANONICAL_NA)) + soap_utilize_ns(soap, s, 1); +#endif + r = s; + m = n + 1; + } + else /* prefix quoted URI-based string */ + { + q = strchr(s + 1, '"'); + if (q) + { + struct Namespace *p = soap->local_namespaces; + if (p) + { + for (; p->id; p++) + { + if (p->ns) + if (!soap_tag_cmp(s + 1, p->ns)) + break; + if (p->in) + if (!soap_tag_cmp(s + 1, p->in)) + break; + } + } + q++; + /* URL is in the namespace table? */ + if (p && p->id) + { + r = p->id; + m = strlen(r); + } + else /* not in namespace table: create xmlns binding */ + { + char *x = soap_strdup(soap, s + 1); + if (!x) + return NULL; + x[q - s - 2] = '\0'; + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 27), "xmlns:_%d", soap->idnum++); + soap_set_attr(soap, soap->tmpbuf, x, 1); + r = soap->tmpbuf + 6; + m = strlen(r); + } + } + } + /* copy normalized QName into buffer, including the ending blank or NUL */ +#ifdef WITH_FAST + if ((m && soap_append_lab(soap, r, m)) + || (q && soap_append_lab(soap, q, n - (q - s) + 1))) + return NULL; +#else + k = m + (q ? n - (q - s) + 1 : 0); + b = (char*)soap_push_block(soap, NULL, k); + if (!b) + { + soap->error = SOAP_EOM; + return NULL; + } + if (soap_memcpy((void*)b, k, (const void*)r, m)) + { + soap->error = SOAP_EOM; + return NULL; + } + b += m; + if (q) + { + if (soap_memcpy((void*)b, k - m, (const void*)q, n - (q - s) + 1)) + { + soap->error = SOAP_EOM; + return NULL; + } + b += n - (q - s) + 1; + } +#endif + /* advance to next */ + s += n; + } +#ifdef WITH_FAST + t = soap_strdup(soap, soap->labbuf); + if (!t) + soap->error = SOAP_EOM; +#else + t = (char*)soap_save_block(soap, NULL, NULL, 0); +#endif + } + return t; +} + +/******************************************************************************/ + +#ifndef WITH_LEAN +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2wchar(struct soap *soap, const char *s, wchar_t **t, int flag, long minlen, long maxlen, const char *pattern) +{ + if (s) + { + const wchar_t *r = soap_wstring(soap, s, flag, minlen, maxlen, pattern); + if (r && (*t = soap_wstrdup(soap, r)) == NULL) + return soap->error = SOAP_EOM; + } + return soap->error; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_COMPAT +#ifdef __cplusplus +#ifndef WITH_LEAN +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2stdwchar(struct soap *soap, const char *s, std::wstring *t, int flag, long minlen, long maxlen, const char *pattern) +{ + if (s) + { + const wchar_t *r = soap_wstring(soap, s, flag, minlen, maxlen, pattern); + if (r) + t->assign(r); + } + return soap->error; +} +#endif +#endif +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +static const wchar_t* +soap_wstring(struct soap *soap, const char *s, int flag, long minlen, long maxlen, const char *pattern) +{ + if (s) + { + size_t l; + soap_wchar c; + wchar_t *t; + if (maxlen < 0 && soap->maxlength > 0) + maxlen = soap->maxlength; + soap->labidx = 0; + if ((soap->mode & SOAP_ENC_LATIN)) + { + wchar_t *r; + if (soap_append_lab(soap, NULL, sizeof(wchar_t) * (strlen(s) + 1))) + return NULL; + r = (wchar_t*)(void*)soap->labbuf; + while (*s) + *r++ = (wchar_t)*s++; + } + else + { + /* Convert UTF8 to wchar_t */ + while (*s) + { + c = (unsigned char)*s++; + if (c >= 0x80) + { +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + soap_wchar c1, c2, c3; + c1 = (unsigned char)*s; + if (c <= 0xC1 || (c1 & 0xC0) != 0x80) + { + c = SOAP_UNKNOWN_UNICODE_CHAR; + } + else + { + ++s; + c1 &= 0x3F; + if (c < 0xE0) + { + c = (((c & 0x1F) << 6) | c1); + } + else + { + c2 = (unsigned char)*s; + if ((c == 0xE0 && c1 < 0x20) || (c2 & 0xC0) != 0x80) + { + c = SOAP_UNKNOWN_UNICODE_CHAR; + } + else + { + ++s; + c2 &= 0x3F; + if (c < 0xF0) + { + c = (((c & 0x0F) << 12) | (c1 << 6) | c2); + } + else + { + c3 = (unsigned char)*s; + if ((c == 0xF0 && c1 < 0x10) || (c == 0xF4 && c1 >= 0x10) || c >= 0xF5 || (c3 & 0xC0) != 0x80) + { + c = SOAP_UNKNOWN_UNICODE_CHAR; + } + else + { + ++s; + c = (((c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | (c3 & 0x3F)); + } + } + } + } + } +#else + soap_wchar c1, c2, c3, c4; + c1 = (unsigned char)*s; + if (c1) + { + s++; + c1 &= 0x3F; + if (c < 0xE0) + { + c = (wchar_t)(((soap_wchar)(c & 0x1F) << 6) | c1); + } + else + { + c2 = (unsigned char)*s; + if (c2) + { + s++; + c2 &= 0x3F; + if (c < 0xF0) + { + c = (wchar_t)(((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2); + } + else + { + c3 = (unsigned char)*s; + if (c3) + { + s++; + c3 &= 0x3F; + if (c < 0xF8) + { + c = (wchar_t)(((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3); + } + else + { + c4 = (unsigned char)*s; + if (c4) + { + s++; + c4 &= 0x3F; + if (c < 0xFC) + { + c = (wchar_t)(((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4); + } + else + { + c = (wchar_t)(((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (unsigned char)(*s & 0x3F)); + if (*s) + s++; + } + } + } + } + } + } + } + } +#endif + } + /* use UTF16 encoding when wchar_t is too small to hold UCS */ + if (sizeof(wchar_t) < 4 && c > 0xFFFF) + { + wchar_t c1, c2; + c1 = 0xD800 - (0x10000 >> 10) + (c >> 10); + c2 = 0xDC00 + (c & 0x3FF); + if (soap_append_lab(soap, (const char*)&c1, sizeof(wchar_t)) || soap_append_lab(soap, (const char*)&c2, sizeof(wchar_t))) + return NULL; + } + else if (soap_append_lab(soap, (const char*)&c, sizeof(wchar_t))) + { + return NULL; + } + } + } + l = soap->labidx / sizeof(wchar_t); + c = L'\0'; + if (soap_append_lab(soap, (const char*)&c, sizeof(wchar_t))) + return NULL; + if ((maxlen >= 0 && l > (size_t)maxlen) || (minlen > 0 && l < (size_t)minlen)) + { + soap->error = SOAP_LENGTH; + return NULL; + } + t = (wchar_t*)(void*)soap->labbuf; +#ifndef WITH_LEAN + if (flag >= 4 && t) + t = soap_wcollapse(soap, t, flag, 1); +#endif +#ifndef WITH_LEANER + if (pattern && soap->fwvalidate) + { + soap->error = soap->fwvalidate(soap, pattern, t); + if (soap->error) + return NULL; + } +#endif + return t; + } + return NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +static wchar_t* +soap_wcollapse(struct soap *soap, wchar_t *s, int flag, int insitu) +{ + /* flag 4=normalizedString (replace), 5=token (collapse) */ + wchar_t *t; + size_t n; + if (!s) + return NULL; + if (flag == 4) + { + for (t = s; *t && (!soap_coblank((soap_wchar)*t) || *t == 32); t++) + continue; + if (*t) + { + /* replace blanks and control char by space */ + if (!insitu) + s = soap_wstrdup(soap, s); + if (s) + for (t = s; *t; t++) + if (soap_coblank((soap_wchar)*t)) + *t = L' '; + } + return s; + } + /* collapse white space */ + for (t = s; *t && soap_coblank((soap_wchar)*t); t++) + continue; + n = 0; + while (t[n]) + n++; + if (insitu && s < t) + (void)soap_memmove(s, n + 1, t, n + 1); + else + s = t; + if (n > 0) + { + if (!soap_coblank((soap_wchar)s[n-1])) + { + for (t = s; (*t && !soap_coblank((soap_wchar)*t)) || (*t == 32 && (!t[1] || !soap_coblank((soap_wchar)t[1]))); t++) + continue; + if (!*t) + return s; + } + if (!insitu) + s = soap_wstrdup(soap, s); + if (s) + { + for (t = s; *t; t++) + { + if (soap_coblank((soap_wchar)*t)) + { + wchar_t *r; + *t = L' '; + for (r = t + 1; *r && soap_coblank((soap_wchar)*r); r++) + continue; + if (r > t + 1) + (void)soap_memmove(t + 1, sizeof(wchar_t) * (n - (t-s)), r, sizeof(wchar_t) * (n - (r-s) + 1)); + } + } + t--; + if (t >= s && *t == 32) + *t = L'\0'; + } + } + return s; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_wchar2s(struct soap *soap, const wchar_t *s) +{ + soap_wchar c; + char *r, *t; + const wchar_t *q = s; + size_t n = 0; + if (!s) + return NULL; + while ((c = *q++)) + { + if (c > 0 && c < 0x80) + n++; + else +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + n += 4; +#else + n += 6; +#endif + } + r = t = (char*)soap_malloc(soap, n + 1); + if (r) + { + /* Convert wchar to UTF8 (chars above U+10FFFF are silently converted, but should not be used) */ + while ((c = *s++)) + { + if (c > 0 && c < 0x80) + { + *t++ = (char)c; + } + else + { + /* check for UTF16 encoding when wchar_t is too small to hold UCS */ + if (sizeof(wchar_t) < 4 && (c & 0xFC00) == 0xD800) + { + soap_wchar d = *s; + if ((d & 0xFC00) == 0xDC00) + { + c = ((c - 0xD800) << 10) + (d - 0xDC00) + 0x10000; + s++; + } +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + else + { + c = SOAP_UNKNOWN_UNICODE_CHAR; /* Malformed UTF-16 */ + } +#endif + } + if (c < 0x0800) + { + *t++ = (char)(0xC0 | ((c >> 6) & 0x1F)); + } + else + { +#ifdef WITH_REPLACE_ILLEGAL_UTF8 + if (!((c >= 0x80 && c <= 0xD7FF) || (c >= 0xE000 && c <= 0xFFFD) || (c >= 0x10000 && c <= 0x10FFFF))) + c = SOAP_UNKNOWN_UNICODE_CHAR; +#endif + if (c < 0x010000) + { + *t++ = (char)(0xE0 | ((c >> 12) & 0x0F)); + } + else + { + if (c < 0x200000) + { + *t++ = (char)(0xF0 | ((c >> 18) & 0x07)); + } + else + { + if (c < 0x04000000) + { + *t++ = (char)(0xF8 | ((c >> 24) & 0x03)); + } + else + { + *t++ = (char)(0xFC | ((c >> 30) & 0x01)); + *t++ = (char)(0x80 | ((c >> 24) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 18) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 12) & 0x3F)); + } + *t++ = (char)(0x80 | ((c >> 6) & 0x3F)); + } + *t++ = (char)(0x80 | (c & 0x3F)); + } + } + *t = '\0'; + } + return r; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outstring(struct soap *soap, const char *tag, int id, char *const*p, const char *type, int n) +{ + id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n, NULL); + if (id < 0) + return soap->error; + if (!**p) + { + if ((soap->mode & SOAP_C_NILSTRING)) + return soap_element_null(soap, tag, id, type); + return soap_element_empty(soap, tag, id, type); + } + if (soap_element_begin_out(soap, tag, id, type) + || soap_string_out(soap, *p, 0) + || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} + +/******************************************************************************/ + +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, const char *pattern) +{ + (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; + } + if (!p) + { + p = (char**)soap_malloc(soap, sizeof(char*)); + if (!p) + return NULL; + } + if (soap->null) + { + *p = NULL; + } + else if (soap->body) + { + *p = soap_string_in(soap, flag, minlen, maxlen, pattern); + if (!*p || !(char*)soap_id_enter(soap, soap->id, *p, t, sizeof(char*), NULL, NULL, NULL, NULL)) + return NULL; + if (!**p && tag && *tag == '-') + { + soap->error = SOAP_NO_TAG; + return NULL; + } + } + else if (tag && *tag == '-') + { + soap->error = SOAP_NO_TAG; + return NULL; + } + else if (*soap->href != '#') + { + if (minlen > 0) + { + soap->error = SOAP_LENGTH; + return NULL; + } + *p = soap_strdup(soap, SOAP_STR_EOS); + if (!*p) + return NULL; + } + if (*soap->href == '#') + p = (char**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(char**), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return p; +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outwstring(struct soap *soap, const char *tag, int id, wchar_t *const*p, const char *type, int n) +{ + id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n, NULL); + if (id < 0) + return soap->error; + if (!**p) + { + if ((soap->mode & SOAP_C_NILSTRING)) + return soap_element_null(soap, tag, id, type); + return soap_element_empty(soap, tag, id, type); + } + if (soap_element_begin_out(soap, tag, id, type) + || soap_wstring_out(soap, *p, 0) + || soap_element_end_out(soap, tag)) + return soap->error; + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +wchar_t ** +SOAP_FMAC2 +soap_inwstring(struct soap *soap, const char *tag, wchar_t **p, const char *type, int t, int flag, long minlen, long maxlen, const char *pattern) +{ + (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; + } + if (!p) + { + p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*)); + if (!p) + return NULL; + } + if (soap->null) + { + *p = NULL; + } + else if (soap->body) + { + *p = soap_wstring_in(soap, flag, minlen, maxlen, pattern); + if (!*p || !(wchar_t*)soap_id_enter(soap, soap->id, *p, t, sizeof(wchar_t*), NULL, NULL, NULL, NULL)) + return NULL; + if (!**p && tag && *tag == '-') + { + soap->error = SOAP_NO_TAG; + return NULL; + } + } + else if (tag && *tag == '-') + { + soap->error = SOAP_NO_TAG; + return NULL; + } + else if (*soap->href != '#') + { + if (minlen > 0) + { + soap->error = SOAP_LENGTH; + return NULL; + } + *p = soap_wstrdup(soap, L""); + } + if (*soap->href == '#') + p = (wchar_t**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(wchar_t**), 0, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return p; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +#ifdef UNDER_CE +/* WinCE mktime (based on the mingw-runtime, public domain) */ +#define __FILETIME_to_ll(f) ((long long)(f).dwHighDateTime << 32 | (long long)(f).dwLowDateTime) +static time_t +mktime(struct tm *pt) +{ + SYSTEMTIME s, s1, s2; + FILETIME f, f1, f2; + long long diff; + GetSystemTime(&s1); + GetLocalTime(&s2); + SystemTimeToFileTime(&s1, &f1); + SystemTimeToFileTime(&s2, &f2); + diff = (__FILETIME_to_ll(f2) - __FILETIME_to_ll(f1)) / 10000000LL; + s.wYear = pt->tm_year + 1900; + s.wMonth = pt->tm_mon + 1; + s.wDayOfWeek = pt->tm_wday; + s.wDay = pt->tm_mday; + s.wHour = pt->tm_hour; + s.wMinute = pt->tm_min; + s.wSecond = pt->tm_sec; + s.wMilliseconds = 0; + SystemTimeToFileTime(&s, &f); + return (time_t)((__FILETIME_to_ll(f) - 116444736000000000LL) / 10000000LL) - (time_t)diff; +} +#endif +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +#ifdef UNDER_CE +/* WinCE gmtime_r (based on the mingw-runtime, public domain) */ +#define HAVE_GMTIME_R +static struct tm* +gmtime_r(const time_t *t, struct tm *pt) +{ + FILETIME f, f1, f2; + SYSTEMTIME s, s1 = {0}; + long long time = (long long)(*t) * 10000000LL + 116444736000000000LL; + f.dwHighDateTime = (DWORD)((time >> 32) & 0x00000000FFFFFFFF); + f.dwLowDateTime = (DWORD)(time & 0x00000000FFFFFFFF); + FileTimeToSystemTime(&f, &s); + pt->tm_year = s.wYear - 1900; + pt->tm_mon = s.wMonth - 1; + pt->tm_wday = s.wDayOfWeek; + pt->tm_mday = s.wDay; + s1.wYear = s.wYear; + s1.wMonth = 1; + s1.wDayOfWeek = 1; + s1.wDay = 1; + SystemTimeToFileTime(&s1, &f1); + SystemTimeToFileTime(&s, &f2); + pt->tm_yday = (((__FILETIME_to_ll(f2) - __FILETIME_to_ll(f1)) / 10000000LL) / (60 * 60 * 24)); + pt->tm_hour = s.wHour; + pt->tm_min = s.wMinute; + pt->tm_sec = s.wSecond; + pt->tm_isdst = 0; + return pt; +} +#endif +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +#ifdef UNDER_CE +/* WinCE very simple strftime for format "%Y-%m-%dT%H:%M:%SZ", note: %F and %T not supported by MS */ +static size_t +strftime(char *buf, size_t len, const char *format, const struct tm *pT) +{ + (void)len; (void)format; +#ifndef WITH_NOZONE + (SOAP_SNPRINTF(buf, len, 20), "%04d-%02d-%02dT%02d:%02d:%02dZ", pT->tm_year + 1900, pT->tm_mon + 1, pT->tm_mday, pT->tm_hour, pT->tm_min, pT->tm_sec); +#else + (SOAP_SNPRINTF(buf, len, 20), "%04d-%02d-%02dT%02d:%02d:%02d", pT->tm_year + 1900, pT->tm_mon + 1, pT->tm_mday, pT->tm_hour, pT->tm_min, pT->tm_sec); +#endif + return len; +} +#endif +#endif + +/******************************************************************************/ + +#if !defined(WITH_LEAN) || defined(WITH_COOKIES) +SOAP_FMAC1 +time_t +SOAP_FMAC2 +soap_timegm(struct tm *T) +{ +#if defined(HAVE_TIMEGM) + return timegm(T); +#else + time_t t, g, z; + struct tm tm; +#ifndef HAVE_GMTIME_R + struct tm *tp; +#endif + t = mktime(T); + if (t == (time_t)-1) + return (time_t)-1; +#ifdef HAVE_GMTIME_R + if (gmtime_r(&t, &tm) == SOAP_FUNC_R_ERR) + return (time_t)-1; +#else + tp = gmtime(&t); + if (!tp) + return (time_t)-1; + tm = *tp; +#endif + tm.tm_isdst = 0; + g = mktime(&tm); + if (g == (time_t)-1) + return (time_t)-1; + z = g - t; + return t - z; +#endif +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_dateTime2s(struct soap *soap, time_t n) +{ + struct tm T, *pT = &T; + size_t l = 0; +#if defined(HAVE_GMTIME_R) && !defined(WITH_NOZONE) + if (gmtime_r(&n, pT) != SOAP_FUNC_R_ERR) + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT); +#elif defined(HAVE_GMTIME) && !defined(WITH_NOZONE) + pT = gmtime(&n); + if (pT) + l = 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)) && !defined(WITH_NOZONE) +#if defined(HAVE_LOCALTIME_R) + if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR) + { + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S%z", pT); + if (l) + { + (void)soap_memmove(soap->tmpbuf + 23, sizeof(soap->tmpbuf) - 23, soap->tmpbuf + 22, 3); /* 2000-03-01T02:00:00+0300 */ + soap->tmpbuf[22] = ':'; /* 2000-03-01T02:00:00+03:00 */ + } + } +#else + pT = localtime(&n); + if (pT) + { + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S%z", pT); + if (l) + { + (void)soap_memmove(soap->tmpbuf + 23, sizeof(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) && !defined(WITH_NOZONE) +#if defined(HAVE_LOCALTIME_R) + if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR) + { + struct timeval tv; + struct timezone tz; + memset((void*)&tz, 0, sizeof(tz)); + gettimeofday(&tv, &tz); + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); + if (l) + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60); + } +#else + pT = localtime(&n); + if (pT) + { + struct timeval tv; + struct timezone tz; + memset((void*)&tz, 0, sizeof(tz)); + gettimeofday(&tv, &tz); + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); + if (l) + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60); + } +#endif +#elif defined(HAVE_FTIME) && !defined(WITH_NOZONE) +#if defined(HAVE_LOCALTIME_R) + if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR) + { + struct timeb t; + memset((void*)&t, 0, sizeof(t)); +#ifdef __BORLANDC__ + ::ftime(&t); +#else + ftime(&t); +#endif + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); + if (l) + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60); + } +#else + pT = localtime(&n); + if (pT) + { + struct timeb t; + memset((void*)&t, 0, sizeof(t)); +#ifdef __BORLANDC__ + ::ftime(&t); +#else + ftime(&t); +#endif + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); + if (l) + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, 7), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60); + } +#endif +#elif defined(HAVE_LOCALTIME_R) + if (localtime_r(&n, pT) != SOAP_FUNC_R_ERR) + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); +#else + pT = localtime(&n); + if (pT) + l = strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT); +#endif + if (!l) + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), "1969-12-31T23:59:59Z"); + return soap->tmpbuf; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outdateTime(struct soap *soap, const char *tag, int id, const time_t *p, const char *type, int n) +{ + if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type) + || soap_string_out(soap, soap_dateTime2s(soap, *p), 0)) + return soap->error; + return soap_element_end_out(soap, tag); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_s2dateTime(struct soap *soap, const char *s, time_t *p) +{ + *p = 0; + if (s) + { + unsigned long d; + struct tm T; + char *t; + if (!*s) + return soap->error = SOAP_EMPTY; + memset((void*)&T, 0, sizeof(T)); + d = soap_strtoul(s, &t, 10); + if (*t == '-') + { + /* YYYY-MM-DD */ + T.tm_year = (int)d; + T.tm_mon = (int)soap_strtoul(t + 1, &t, 10); + T.tm_mday = (int)soap_strtoul(t + 1, &t, 10); + } + else if (!(soap->mode & SOAP_XML_STRICT)) + { + /* YYYYMMDD */ + T.tm_year = (int)(d / 10000); + T.tm_mon = (int)(d / 100 % 100); + T.tm_mday = (int)(d % 100); + } + else + { + return soap->error = SOAP_TYPE; + } + if (*t == 'T' || ((*t == 't' || *t == ' ') && !(soap->mode & SOAP_XML_STRICT))) + { + d = soap_strtoul(t + 1, &t, 10); + if (*t == ':') + { + /* Thh:mm:ss */ + T.tm_hour = (int)d; + T.tm_min = (int)soap_strtoul(t + 1, &t, 10); + T.tm_sec = (int)soap_strtoul(t + 1, &t, 10); + } + else if (!(soap->mode & SOAP_XML_STRICT)) + { + /* Thhmmss */ + T.tm_hour = (int)(d / 10000); + T.tm_min = (int)(d / 100 % 100); + T.tm_sec = (int)(d % 100); + } + else + { + return soap->error = SOAP_TYPE; + } + } + if (T.tm_year == 1) + T.tm_year = 70; + else + T.tm_year -= 1900; + T.tm_mon--; + if (*t == '.') + { + for (t++; *t; t++) + if (*t < '0' || *t > '9') + break; + } + if (*t == ' ' && !(soap->mode & SOAP_XML_STRICT)) + t++; + if (*t) + { +#ifndef WITH_NOZONE + if (*t == '+' || *t == '-') + { + int h, m; + m = (int)soap_strtol(t, &t, 10); + if (*t == ':') + { + /* +hh:mm */ + h = m; + m = (int)soap_strtol(t + 1, &t, 10); + if (h < 0) + m = -m; + } + else if (!(soap->mode & SOAP_XML_STRICT)) + { + /* +hhmm */ + h = m / 100; + m = m % 100; + } + else + { + /* +hh */ + h = m; + m = 0; + } + if (*t) + return soap->error = SOAP_TYPE; + T.tm_min -= m; + T.tm_hour -= h; + /* put hour and min in range */ + T.tm_hour += T.tm_min / 60; + T.tm_min %= 60; + if (T.tm_min < 0) + { + T.tm_min += 60; + T.tm_hour--; + } + T.tm_mday += T.tm_hour / 24; + T.tm_hour %= 24; + if (T.tm_hour < 0) + { + T.tm_hour += 24; + T.tm_mday--; + } + /* note: day of the month may be out of range, timegm() handles it */ + } + else if (*t != 'Z') + { + return soap->error = SOAP_TYPE; + } +#endif + *p = soap_timegm(&T); + } + else /* no UTC or timezone, so assume we got a localtime */ + { + T.tm_isdst = -1; + *p = mktime(&T); + } + } + return soap->error; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +SOAP_FMAC1 +time_t * +SOAP_FMAC2 +soap_indateTime(struct soap *soap, const char *tag, time_t *p, const char *type, int t) +{ + if (soap_element_begin_in(soap, tag, 0, NULL)) + return NULL; + if (*soap->type + && soap_match_tag(soap, soap->type, type) + && soap_match_tag(soap, soap->type, ":dateTime")) + { + soap->error = SOAP_TYPE; + soap_revert(soap); + return NULL; + } + p = (time_t*)soap_id_enter(soap, soap->id, p, t, sizeof(time_t), NULL, NULL, NULL, NULL); + if (!p) + return NULL; + if (*soap->href != '#') + { + int err = soap_s2dateTime(soap, soap_value(soap), p); + if ((soap->body && soap_element_end_in(soap, tag)) || err) + return NULL; + } + else + { + p = (time_t*)soap_id_forward(soap, soap->href, p, 0, t, t, sizeof(time_t), 0, NULL, NULL); + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + } + return p; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outliteral(struct soap *soap, const char *tag, char *const*p, const char *type) +{ + if (tag && *tag != '-') + if (soap_element_begin_out(soap, tag, 0, type)) + return soap->error; + if (p && *p) + if (soap_send(soap, *p)) /* send as-is */ + return soap->error; + if (tag && *tag != '-') + return soap_element_end_out(soap, tag); + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char ** +SOAP_FMAC2 +soap_inliteral(struct soap *soap, const char *tag, char **p) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + { + if (soap->error != SOAP_NO_TAG || soap_peek(soap) == SOAP_TT) + return NULL; + soap->error = SOAP_OK; + } + if (!p) + { + p = (char**)soap_malloc(soap, sizeof(char*)); + if (!p) + return NULL; + } + if (soap->body || (tag && *tag == '-')) + { + if (tag && *tag != '-') + *p = soap_string_in(soap, 0, -1, -1, NULL); + else + *p = soap_string_in(soap, -1, -1, -1, NULL); + if (!*p) + return NULL; + if (!**p && tag && *tag == '-') + { + soap->error = SOAP_NO_TAG; + return NULL; + } + } + else if (soap->null) + { + *p = NULL; + } + else + { + *p = soap_strdup(soap, SOAP_STR_EOS); + } + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return p; +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_outwliteral(struct soap *soap, const char *tag, wchar_t *const*p, const char *type) +{ + if (tag && *tag != '-') + if (soap_element_begin_out(soap, tag, 0, type)) + return soap->error; + if (p) + { + wchar_t c; + const wchar_t *s = *p; + while ((c = *s++)) + { + if (soap_pututf8(soap, (unsigned long)c)) /* send as-is in UTF8 */ + return soap->error; + } + } + if (tag && *tag != '-') + return soap_element_end_out(soap, tag); + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +wchar_t ** +SOAP_FMAC2 +soap_inwliteral(struct soap *soap, const char *tag, wchar_t **p) +{ + if (soap_element_begin_in(soap, tag, 1, NULL)) + { + if (soap->error != SOAP_NO_TAG || soap_peek(soap) == SOAP_TT) + return NULL; + soap->error = SOAP_OK; + } + if (!p) + { + p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*)); + if (!p) + return NULL; + } + if (soap->body) + { + if (tag && *tag != '-') + *p = soap_wstring_in(soap, 0, -1, -1, NULL); + else + *p = soap_wstring_in(soap, -1, -1, -1, NULL); + if (!*p) + return NULL; + if (!**p && tag && *tag == '-') + { + soap->error = SOAP_NO_TAG; + return NULL; + } + } + else if (tag && *tag == '-') + { + soap->error = SOAP_NO_TAG; + return NULL; + } + else if (soap->null) + { + *p = NULL; + } + else + { + *p = soap_wstrdup(soap, L""); + } + if (soap->body && soap_element_end_in(soap, tag)) + return NULL; + return p; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_value(struct soap *soap) +{ + size_t i; + soap_wchar c = 0; + char *s = soap->tmpbuf; + if (!soap->body) + return SOAP_STR_EOS; + do + { + c = soap_get(soap); + } while (soap_coblank(c)); + for (i = 0; i < sizeof(soap->tmpbuf) - 1; i++) + { + if (c == SOAP_TT || c == SOAP_LT || (int)c == EOF) + break; + *s++ = (char)c; + c = soap_get(soap); + } + for (s--; i > 0; i--, s--) + { + if (!soap_coblank((soap_wchar)*s)) + 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); + } + else + { + soap->error = SOAP_LENGTH; + return NULL; + } +#ifdef WITH_DOM + if ((soap->mode & SOAP_XML_DOM) && soap->dom) + { + soap->dom->text = soap_strdup(soap, soap->tmpbuf); + if (!soap->dom->text) + return NULL; + } +#endif + return soap->tmpbuf; /* return non-null pointer */ +} + +/******************************************************************************/ + +#if !defined(WITH_LEANER) || !defined(WITH_NOHTTP) +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getline(struct soap *soap, char *buf, int len) +{ + char *s = buf; + int i = len; + soap_wchar c = 0; + for (;;) + { + while (i > 1) + { + c = soap_getchar(soap); + if (c == '\r' || c == '\n') + break; + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + *s++ = (char)c; + i--; + } + *s = '\0'; + if (c != '\n') + c = soap_getchar(soap); /* got \r or something else, now get \n */ + if (c == '\n') + { + if (i == 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_CHK_EOF; + } + else if (i <= 1) + { + return soap->error = SOAP_HDR; + } + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +static ULONG64 +soap_count_attachments(struct soap *soap) +{ +#ifndef WITH_LEANER + struct soap_multipart *content; + ULONG64 count = soap->count; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the message size with attachments, current count=" SOAP_ULONG_FORMAT "\n", count)); + if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of DIME attachments\n")); + for (content = soap->dime.first; content; content = content->next) + { + count += 12 + ((content->size+3)&(~3)); + if (content->id) + count += ((strlen(content->id)+3)&(~3)); + if (content->type) + count += ((strlen(content->type)+3)&(~3)); + if (content->options) + count += ((((unsigned char)content->options[2] << 8) | ((unsigned char)content->options[3]))+7)&(~3); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of DIME attachment content is %lu bytes\n", (unsigned long)content->size)); + } + } + if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary) + { + size_t n = strlen(soap->mime.boundary); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of MIME attachments\n")); + for (content = soap->mime.first; content; content = content->next) + { + const char *s; + /* count \r\n--boundary\r\n */ + count += 6 + n; + /* count Content-Type: ...\r\n */ + if (content->type) + count += 16 + strlen(content->type); + /* count Content-Transfer-Encoding: ...\r\n */ + s = soap_code_str(mime_codes, content->encoding); + if (s) + count += 29 + strlen(s); + /* count Content-ID: ...\r\n */ + if (content->id) + count += 14 + strlen(content->id); + /* count Content-Location: ...\r\n */ + if (content->location) + count += 20 + strlen(content->location); + /* count Content-Description: ...\r\n */ + if (content->description) + count += 23 + strlen(content->description); + /* count \r\n...content */ + count += 2 + content->size; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of MIME attachment content is %lu bytes\n", (unsigned long)content->size)); + } + /* count \r\n--boundary-- */ + count += 6 + n; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New count=" SOAP_ULONG_FORMAT "\n", count)); + return count; +#else + return soap->count; +#endif +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +static int +soap_putdimefield(struct soap *soap, const char *s, size_t n) +{ + if (soap_send_raw(soap, s, n)) + return soap->error; + return soap_send_raw(soap, SOAP_STR_PADDING, -(long)n&3); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_dime_option(struct soap *soap, unsigned short optype, const char *option) +{ + size_t n; + char *s = NULL; + if (option) + { + n = strlen(option); + s = (char*)soap_malloc(soap, n + 5); + if (s) + { + s[0] = (char)(optype >> 8); + s[1] = (char)(optype & 0xFF); + s[2] = (char)(n >> 8); + s[3] = (char)(n & 0xFF); + soap_strcpy(s + 4, n + 1, option); + } + } + return s; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_putdimehdr(struct soap *soap) +{ + unsigned char tmp[12]; + size_t optlen = 0, idlen = 0, typelen = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Put DIME header id='%s'\n", soap->dime.id ? soap->dime.id : SOAP_STR_EOS)); + if (soap->dime.options) + optlen = (((unsigned char)soap->dime.options[2] << 8) | ((unsigned char)soap->dime.options[3])) + 4; + if (soap->dime.id) + { + idlen = strlen(soap->dime.id); + if (idlen > 0x0000FFFF) + idlen = 0x0000FFFF; + } + if (soap->dime.type) + { + typelen = strlen(soap->dime.type); + if (typelen > 0x0000FFFF) + typelen = 0x0000FFFF; + } + tmp[0] = SOAP_DIME_VERSION | (soap->dime.flags & 0x7); + tmp[1] = soap->dime.flags & 0xF0; + tmp[2] = (char)(optlen >> 8); + tmp[3] = (char)(optlen & 0xFF); + tmp[4] = (char)(idlen >> 8); + tmp[5] = (char)(idlen & 0xFF); + tmp[6] = (char)(typelen >> 8); + tmp[7] = (char)(typelen & 0xFF); + tmp[8] = (char)(soap->dime.size >> 24); + tmp[9] = (char)((soap->dime.size >> 16) & 0xFF); + tmp[10] = (char)((soap->dime.size >> 8) & 0xFF); + tmp[11] = (char)(soap->dime.size & 0xFF); + if (soap_send_raw(soap, (char*)tmp, 12) + || soap_putdimefield(soap, soap->dime.options, optlen) + || soap_putdimefield(soap, soap->dime.id, idlen) + || soap_putdimefield(soap, soap->dime.type, typelen)) + return soap->error; + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_putdime(struct soap *soap) +{ + struct soap_multipart *content; + if (!(soap->mode & SOAP_ENC_DIME)) + return SOAP_OK; + for (content = soap->dime.first; content; content = content->next) + { + void *handle; + soap->dime.size = content->size; + soap->dime.id = content->id; + soap->dime.type = content->type; + soap->dime.options = content->options; + soap->dime.flags = SOAP_DIME_VERSION | SOAP_DIME_MEDIA; + if (soap->fdimereadopen && ((handle = soap->fdimereadopen(soap, (void*)content->ptr, content->id, content->type, content->options)) != NULL || soap->error)) + { + size_t size = content->size; + if (!handle) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadopen failed\n")); + return soap->error; + } + if (!size && ((soap->mode & SOAP_ENC_PLAIN) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE)) + { + size_t chunksize = sizeof(soap->tmpbuf); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming DIME\n")); + do + { + size = soap->fdimeread(soap, handle, soap->tmpbuf, chunksize); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread returned %lu bytes\n", (unsigned long)size)); + if (size < chunksize) + { + soap->dime.flags &= ~SOAP_DIME_CF; + if (!content->next) + soap->dime.flags |= SOAP_DIME_ME; + } + else + { + soap->dime.flags |= SOAP_DIME_CF; + } + soap->dime.size = size; + if (soap_putdimehdr(soap) + || soap_putdimefield(soap, soap->tmpbuf, size)) + break; + if (soap->dime.id) + { + soap->dime.flags &= ~(SOAP_DIME_MB | SOAP_DIME_MEDIA); + soap->dime.id = NULL; + soap->dime.type = NULL; + soap->dime.options = NULL; + } + } while (size >= chunksize); + } + else + { + if (!content->next) + soap->dime.flags |= SOAP_DIME_ME; + if (soap_putdimehdr(soap)) + return soap->error; + do + { + size_t bufsize; + if (size < sizeof(soap->tmpbuf)) + bufsize = size; + else + bufsize = sizeof(soap->tmpbuf); + bufsize = soap->fdimeread(soap, handle, soap->tmpbuf, bufsize); + if (!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_CHK_EOF; + break; + } + if (soap_send_raw(soap, soap->tmpbuf, bufsize)) + break; + size -= bufsize; + } while (size); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n")); + if (soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3)) + return soap->error; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n")); + if (soap->fdimereadclose) + soap->fdimereadclose(soap, handle); + } + else + { + if (!content->next) + soap->dime.flags |= SOAP_DIME_ME; + if (soap_putdimehdr(soap) + || soap_putdimefield(soap, (char*)content->ptr, content->size)) + return soap->error; + } + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +static char * +soap_getdimefield(struct soap *soap, size_t n) +{ + char *p = NULL; + if (n > 0) + { + p = (char*)soap_malloc(soap, n + 1 > n ? n + 1 : n); + if (p) + { + char *s = p; + size_t i; + for (i = n; i > 0; i--) + { + soap_wchar c = soap_get1(soap); + if ((int)c == EOF) + { + soap->error = SOAP_CHK_EOF; + return NULL; + } + *s++ = (char)c; + } + if (n + 1 > n) + *s = '\0'; /* force NUL terminated */ + soap->error = soap_move(soap, (size_t)(-(long)n&3)); + if (soap->error) + return NULL; + } + else + { + soap->error = SOAP_EOM; + } + } + return p; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getdimehdr(struct soap *soap) +{ + soap_wchar c; + char *s; + int i; + unsigned char tmp[12]; + size_t optlen, idlen, typelen; + if (!(soap->mode & SOAP_ENC_DIME)) + return soap->error = SOAP_DIME_END; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME header\n")); + s = (char*)tmp; + for (i = 12; i > 0; i--) + { + c = soap_getchar(soap); + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + *s++ = (char)c; + } + if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION) + return soap->error = SOAP_DIME_MISMATCH; + soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0); + optlen = (tmp[2] << 8) | tmp[3]; + idlen = (tmp[4] << 8) | tmp[5]; + typelen = (tmp[6] << 8) | tmp[7]; + soap->dime.size = ((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)); + soap->dime.options = soap_getdimefield(soap, optlen); + if (!soap->dime.options && soap->error) + return soap->error; + soap->dime.id = soap_getdimefield(soap, idlen); + if (!soap->dime.id && soap->error) + return soap->error; + soap->dime.type = soap_getdimefield(soap, typelen); + if (!soap->dime.type && soap->error) + return soap->error; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME flags=%x id='%s', type='%s', options='%s'\n", soap->dime.flags, soap->dime.id ? soap->dime.id : SOAP_STR_EOS, soap->dime.type ? soap->dime.type : "", soap->dime.options ? soap->dime.options+4 : SOAP_STR_EOS)); + if ((soap->dime.flags & SOAP_DIME_ME)) + soap->mode &= ~SOAP_ENC_DIME; + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getdime(struct soap *soap) +{ + if (soap->dime.buflen || soap->dime.chunksize) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip remainder of SOAP in DIME (%u bytes or %u bytes in chunk left)\n", (unsigned int)soap->dime.buflen, (unsigned int)soap->dime.chunksize)); + do + if (soap_get1(soap) == (int)EOF) + return soap->error = SOAP_CHK_EOF; + while (soap->dime.buflen || soap->dime.chunksize); + if (soap_move(soap, (size_t)(-(long)soap->dime.size&3))) + return soap->error = SOAP_CHK_EOF; + if (!(soap->mode & SOAP_ENC_DIME)) + return SOAP_OK; + } + else + { + if (soap_move(soap, (size_t)(((soap->dime.size+3)&(~3)) - soap_tell(soap)))) + return soap->error = SOAP_CHK_EOF; + } + for (;;) + { + struct soap_multipart *content; + if (soap_getdimehdr(soap)) + break; + if (soap->fdimewriteopen && ((soap->dime.ptr = (char*)soap->fdimewriteopen(soap, soap->dime.id, soap->dime.type, soap->dime.options)) != NULL || soap->error)) + { + const char *id, *type, *options; + size_t size, n; + if (!soap->dime.ptr) + return soap->error; + id = soap->dime.id; + type = soap->dime.type; + options = soap->dime.options; + for (;;) + { + size = soap->dime.size; + for (;;) + { + n = soap->buflen - soap->bufidx; + if (size < n) + n = size; + soap->error = soap->fdimewrite(soap, (void*)soap->dime.ptr, soap->buf + soap->bufidx, n); + if (soap->error) + break; + size -= n; + if (!size) + { + soap->bufidx += n; + break; + } + if (soap_recv(soap)) + { + soap->error = SOAP_EOF; + goto end; + } + } + if (soap_move(soap, (size_t)(-(long)soap->dime.size&3))) + { + soap->error = SOAP_EOF; + break; + } + if (!(soap->dime.flags & SOAP_DIME_CF)) + break; + if (soap_getdimehdr(soap)) + break; + } +end: + if (soap->fdimewriteclose) + soap->fdimewriteclose(soap, (void*)soap->dime.ptr); + soap->dime.size = 0; + soap->dime.id = id; + soap->dime.type = type; + soap->dime.options = options; + } + else if ((soap->dime.flags & SOAP_DIME_CF)) + { + const char *id, *type, *options; + id = soap->dime.id; + type = soap->dime.type; + options = soap->dime.options; + if (soap_alloc_block(soap) == NULL) + return soap->error = SOAP_EOM; + for (;;) + { + soap_wchar c; + size_t i; + 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; + for (i = soap->dime.size; i > 0; i--) + { + c = soap_get1(soap); + if ((int)c == EOF) + return soap->error = SOAP_EOF; + *s++ = (char)c; + } + 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; + if (soap->dime.size + 1 > soap->dime.size) + soap->blist->size++; /* allocate one more byte in blist for the terminating '\0' */ + soap->dime.ptr = (char*)soap_save_block(soap, NULL, NULL, 0); + if (!soap->dime.ptr) + return soap->error; + if (soap->dime.size + 1 > soap->dime.size) + soap->dime.ptr[soap->dime.size] = '\0'; /* make 0-terminated, just in case even though this is binary data */ + soap->dime.id = id; + soap->dime.type = type; + soap->dime.options = options; + } + else + { + soap->dime.ptr = soap_getdimefield(soap, soap->dime.size); + } + content = soap_alloc_multipart(soap, &soap->dime.first, &soap->dime.last, soap->dime.ptr, soap->dime.size); + if (!content) + return soap->error = SOAP_EOM; + content->id = soap->dime.id; + content->type = soap->dime.type; + content->options = soap->dime.options; + if (soap->error) + return soap->error; + soap_resolve_attachment(soap, content); + } + if (soap->error != SOAP_DIME_END) + return soap->error; + return soap->error = SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getmimehdr(struct soap *soap) +{ + struct soap_multipart *content; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get MIME header\n")); + do + { + if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf))) + return soap->error; + } while (!*soap->msgbuf); + if (soap->msgbuf[0] == '-' && soap->msgbuf[1] == '-') + { + char *s = soap->msgbuf + strlen(soap->msgbuf) - 1; + /* remove white space */ + while (soap_coblank((soap_wchar)*s)) + s--; + s[1] = '\0'; + if (soap->mime.boundary) + { + if (strcmp(soap->msgbuf + 2, soap->mime.boundary)) + return soap->error = SOAP_MIME_ERROR; + } + else + { + soap->mime.boundary = soap_strdup(soap, soap->msgbuf + 2); + if (!soap->mime.boundary) + return soap->error = SOAP_EOM; + } + if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf))) + return soap->error; + } + if (soap_set_mime_attachment(soap, NULL, 0, SOAP_MIME_NONE, NULL, NULL, NULL, NULL)) + return soap->error = SOAP_EOM; + content = soap->mime.last; + for (;;) + { + char *key = soap->msgbuf; + char *val; + if (!*key) + break; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME header: %s\n", key)); + val = strchr(soap->msgbuf, ':'); + if (val) + { + *val = '\0'; + do + { + val++; + } while (*val && *val <= 32); + if (!soap_tag_cmp(key, "Content-ID")) + content->id = soap_strdup(soap, val); + else if (!soap_tag_cmp(key, "Content-Location")) + content->location = soap_strdup(soap, val); + else if (!content->id && !soap_tag_cmp(key, "Content-Disposition")) + content->id = soap_strdup(soap, soap_http_header_attribute(soap, val, "name")); + else if (!soap_tag_cmp(key, "Content-Type")) + content->type = soap_strdup(soap, val); + else if (!soap_tag_cmp(key, "Content-Description")) + content->description = soap_strdup(soap, val); + else if (!soap_tag_cmp(key, "Content-Transfer-Encoding")) + content->encoding = (enum soap_mime_encoding)soap_code_int(mime_codes, val, (LONG64)SOAP_MIME_NONE); + } + if (soap_getline(soap, key, sizeof(soap->msgbuf))) + return soap->error; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_getmime(struct soap *soap) +{ + while (soap_recv_mime_attachment(soap, NULL)) + continue; + return soap->error; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_post_check_mime_attachments(struct soap *soap) +{ + soap->imode |= SOAP_MIME_POSTCHECK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_check_mime_attachments(struct soap *soap) +{ + if ((soap->mode & SOAP_MIME_POSTCHECK)) + return soap_recv_mime_attachment(soap, NULL) != NULL; + return 0; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +struct soap_multipart * +SOAP_FMAC2 +soap_recv_mime_attachment(struct soap *soap, void *handle) +{ + soap_wchar c = 0; + size_t i, m = 0; + char *s, *t = NULL; + struct soap_multipart *content; + short flag = 0; + if (!(soap->mode & SOAP_ENC_MIME)) + goto post_check_exit; + content = soap->mime.last; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get MIME (%p)\n", (void*)content)); + if (!content) + { + if (soap_getmimehdr(soap)) + goto post_check_exit; + content = soap->mime.last; + } + else if (content != soap->mime.first) + { + if (soap->fmimewriteopen && ((content->ptr = (char*)soap->fmimewriteopen(soap, (void*)handle, content->id, content->type, content->description, content->encoding)) != NULL || soap->error)) + { + if (!content->ptr) + goto post_check_exit; + } + } + 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_alloc_block(soap) == NULL) + { + soap->error = SOAP_EOM; + goto post_check_exit; + } + for (;;) + { + if (content->ptr) + { + s = soap->tmpbuf; + } + else + { + s = (char*)soap_push_block(soap, NULL, sizeof(soap->tmpbuf)); + if (!s) + { + soap->error = SOAP_EOM; + goto post_check_exit; + } + } + for (i = 0; i < sizeof(soap->tmpbuf); i++) + { + if (m > 0) + { + *s++ = *t++; + m--; + } + else + { + if (!flag) + { + c = soap_getchar(soap); + if ((int)c == EOF) + { + if (content->ptr && soap->fmimewriteclose) + soap->fmimewriteclose(soap, (void*)content->ptr); + soap->error = SOAP_CHK_EOF; + goto post_check_exit; + } + } + if (flag || c == '\r') + { + memset((void*)soap->msgbuf, 0, sizeof(soap->msgbuf)); + soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), "\n--"); + if (soap->mime.boundary) + { + if (soap_strncat(soap->msgbuf, sizeof(soap->msgbuf), soap->mime.boundary, sizeof(soap->msgbuf) - 4)) + { + soap->error = SOAP_MIME_ERROR; + goto post_check_exit; + } + } + t = soap->msgbuf; + do + { + c = soap_getchar(soap); + } while (c == *t++); + if ((int)c == EOF) + { + if (content->ptr && soap->fmimewriteclose) + soap->fmimewriteclose(soap, (void*)content->ptr); + soap->error = SOAP_CHK_EOF; + goto post_check_exit; + } + if (!*--t) + goto end; + *t = (char)c; + flag = (c == '\r'); + m = t - soap->msgbuf + 1 - flag; + t = soap->msgbuf; + c = '\r'; + } + *s++ = (char)c; + } + } + if (content->ptr && soap->fmimewrite) + { + soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i); + if (soap->error) + break; + } + } +end: + if (content->ptr) + { + if (!soap->error && soap->fmimewrite) + soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i); + if (soap->fmimewriteclose) + soap->fmimewriteclose(soap, (void*)content->ptr); + if (soap->error) + goto post_check_exit; + } + else + { + *s = '\0'; /* make 0-terminated, just in case even though this is binary data */ + content->size = soap_size_block(soap, NULL, i + 1) - 1; /* last block with '\0' */ + content->ptr = (char*)soap_save_block(soap, NULL, NULL, 0); + } + soap_resolve_attachment(soap, content); + if (c == '-' && soap_getchar(soap) == '-') + { + soap->mode &= ~SOAP_ENC_MIME; + if ((soap->mode & SOAP_MIME_POSTCHECK)) + { + if (soap_end_recv(soap)) + goto post_check_exit; + if (soap->keep_alive == -2) /* special case to keep alive */ + soap->keep_alive = 0; + (void)soap_closesock(soap); + } + } + else + { + while (c != '\r' && (int)c != EOF && soap_coblank(c)) + c = soap_getchar(soap); + if (c != '\r' || soap_getchar(soap) != '\n') + { + soap->error = SOAP_MIME_ERROR; + goto post_check_exit; + } + if (soap_getmimehdr(soap)) + goto post_check_exit; + } + return content; +post_check_exit: + if ((soap->mode & SOAP_MIME_POSTCHECK)) + { + if (soap->keep_alive == -2) /* special case to keep alive */ + soap->keep_alive = 0; + (void)soap_closesock(soap); + } + return NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_match_cid(struct soap *soap, const char *s, const char *t) +{ + size_t n; + if (!s) + return 1; + if (!strcmp(s, t)) + return 0; + if (!strncmp(s, "cid:", 4)) + s += 4; + n = strlen(t); + if (*t == '<') + { + t++; + n -= 2; + } + if (!strncmp(s, t, n) && !s[n]) + return 0; + (void)soap_decode(soap->tmpbuf, sizeof(soap->tmpbuf), s, SOAP_STR_EOS); + if (!strncmp(soap->tmpbuf, t, n) && !soap->tmpbuf[n]) + return 0; + return 1; +} +#endif + +/******************************************************************************/ + +/* return UUID "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" in a temporary buffer */ +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_rand_uuid(struct soap *soap, const char *prefix) +{ + int r1, r2, r3, r4; +#ifdef WITH_OPENSSL + r1 = soap_random; + r2 = soap_random; +#else + size_t i; + static int k = 0xFACEB00C; + int lo = k % 127773; + int hi = k / 127773; +# if defined(HAVE_GETTIMEOFDAY) + struct timeval tv; + gettimeofday(&tv, NULL); + r1 = 10000000 * tv.tv_sec + tv.tv_usec; +# elif defined(UNDER_CE) + r1 = (int)Random(); +# elif !defined(WITH_LEAN) + r1 = (int)time(NULL); +# else + r1 = k; +# endif + k = 16807 * lo - 2836 * hi; + if (k <= 0) + k += 0x7FFFFFFF; + r2 = k; + /* k &= 0x8FFFFFFF; */ + for (i = 0; i < (sizeof(soap->buf) < 16UL ? sizeof(soap->buf) : 16UL); i++) + r2 += soap->buf[i]; +#endif + r3 = soap_random; + r4 = soap_random; + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), prefix ? strlen(prefix) + 37 : 37), "%s%8.8x-%4.4hx-4%3.3hx-%4.4hx-%4.4hx%8.8x", prefix ? prefix : SOAP_STR_EOS, r1, (short)(r2 >> 16), (short)(((short)r2 >> 4) & 0x0FFF), (short)(((short)(r3 >> 16) & 0x3FFF) | 0x8000), (short)r3, r4); + return soap->tmpbuf; +} + +/******************************************************************************/ + +#ifndef WITH_LEANER +static void +soap_resolve_attachment(struct soap *soap, struct soap_multipart *content) +{ + if (content->id) + { + struct soap_xlist **xp = &soap->xlist; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving attachment data for id='%s'\n", content->id)); + while (*xp) + { + struct soap_xlist *xq = *xp; + if (!soap_match_cid(soap, 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; + *xq->type = (char*)content->type; + if (content->options) + *xq->options = (char*)content->options; + else + *xq->options = (char*)content->description; + SOAP_FREE(soap, xq); + } + else + { + xp = &(*xp)->next; + } + } + } +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_putmimehdr(struct soap *soap, struct soap_multipart *content) +{ + const char *s; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME attachment type='%s'\n", content->type ? content->type : SOAP_STR_EOS)); + if (soap_send3(soap, "\r\n--", soap->mime.boundary, "\r\n")) + return soap->error; + if (content->type && soap_send3(soap, "Content-Type: ", content->type, "\r\n")) + return soap->error; + s = soap_code_str(mime_codes, content->encoding); + if (s && soap_send3(soap, "Content-Transfer-Encoding: ", s, "\r\n")) + return soap->error; + if (content->id && soap_send3(soap, "Content-ID: ", content->id, "\r\n")) + return soap->error; + if (content->location && soap_send3(soap, "Content-Location: ", content->location, "\r\n")) + return soap->error; + if (content->description && soap_send3(soap, "Content-Description: ", content->description, "\r\n")) + return soap->error; + return soap_send_raw(soap, "\r\n", 2); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_putmime(struct soap *soap) +{ + struct soap_multipart *content; + if (!(soap->mode & SOAP_ENC_MIME) || !soap->mime.boundary) + return SOAP_OK; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending MIME attachments\n")); + for (content = soap->mime.first; content; content = content->next) + { + int err = SOAP_OK; + void *handle; + if (soap->fmimereadopen && ((handle = soap->fmimereadopen(soap, (void*)content->ptr, content->id, content->type, content->description)) != NULL || soap->error)) + { + size_t size = content->size; + if (!handle) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimereadopen failed\n")); + if (!soap->error) + soap->error = SOAP_MIME_ERROR; + return soap->error; + } + if (soap_putmimehdr(soap, content)) + return soap->error; + if (!size) /* streaming MIME is indicated by size zero content size when streaming MIME callbacks are set */ + { + if ((soap->mode & SOAP_ENC_PLAIN) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming MIME\n")); + do + { + size = soap->fmimeread(soap, handle, soap->tmpbuf, sizeof(soap->tmpbuf)); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread returned %lu bytes\n", (unsigned long)size)); + err = soap_send_raw(soap, soap->tmpbuf, size); + } while (!err && size); + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error: cannot chunk streaming MIME (no HTTP chunking)\n")); + } + } + else + { + do + { + size_t bufsize; + if (size < sizeof(soap->tmpbuf)) + bufsize = size; + else + bufsize = sizeof(soap->tmpbuf); + bufsize = soap->fmimeread(soap, handle, soap->tmpbuf, bufsize); + if (!bufsize) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)content->size)); + err = SOAP_MIME_ERROR; /* used to be EOF, SOAP_MIME_ERROR is more appropriaate */ + break; + } + err = soap_send_raw(soap, soap->tmpbuf, bufsize); + size -= bufsize; + } while (!err && size); + } + if (soap->fmimereadclose) + soap->fmimereadclose(soap, handle); + if (err) + return soap->error = err; + } + else + { + if (soap_putmimehdr(soap, content) + || soap_send_raw(soap, content->ptr, content->size)) + return soap->error; + } + } + return soap_send3(soap, "\r\n--", soap->mime.boundary, "--"); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_dime(struct soap *soap) +{ + soap->omode |= SOAP_ENC_DIME; + soap->dime.first = NULL; + soap->dime.last = NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_mime(struct soap *soap, const char *boundary, const char *start) +{ + soap->omode |= SOAP_ENC_MIME; + soap->mime.first = NULL; + soap->mime.last = NULL; + soap->mime.boundary = soap_strdup(soap, boundary); + soap->mime.start = soap_strdup(soap, start); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_clr_dime(struct soap *soap) +{ + soap->omode &= ~SOAP_ENC_DIME; + soap->dime.first = NULL; + soap->dime.last = NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_clr_mime(struct soap *soap) +{ + soap->omode &= ~SOAP_ENC_MIME; + soap->mime.first = NULL; + soap->mime.last = NULL; + soap->mime.boundary = NULL; + soap->mime.start = NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +static int +soap_begin_attachments(struct soap *soap) +{ + if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->mime.start) + { + const char *s; + if (strlen(soap->mime.boundary) + strlen(soap->mime.start) + 140 > sizeof(soap->tmpbuf)) + return soap->error = SOAP_EOM; + if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM)) + { + s = "application/dime"; + } + else if (soap->version == 2) + { + if ((soap->mode & SOAP_ENC_MTOM)) + s = "application/xop+xml; charset=utf-8; type=\"application/soap+xml\""; + else + s = "application/soap+xml; charset=utf-8"; + } + else if ((soap->mode & SOAP_ENC_MTOM)) + { + s = "application/xop+xml; charset=utf-8; type=\"text/xml\""; + } + else + { + s = "text/xml; charset=utf-8"; + } + (SOAP_SNPRINTF_SAFE(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); + if (soap_send(soap, soap->tmpbuf)) + return soap->error; + } + if ((soap->mode & SOAP_IO_LENGTH)) + soap->dime.size = (size_t)soap->count; /* DIME in MIME correction, soap->count is small */ + if (!(soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME)) + { + if (soap_putdimehdr(soap)) + return soap->error; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +static int +soap_end_attachments(struct soap *soap) +{ + if ((soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM)) + { + if (soap->count > 0xFFFFFFFF) + return soap->error = SOAP_DIME_ERROR; + soap->dime.size = (size_t)soap->count - soap->dime.size; /* DIME in MIME correction */ + (SOAP_SNPRINTF(soap->id, sizeof(soap->id), strlen(soap->dime_id_format) + 20), soap->dime_id_format, 0); + soap->dime.id = soap->id; + if (soap->local_namespaces && soap->local_namespaces[0].id) + { + if (soap->local_namespaces[0].out) + soap->dime.type = (char*)soap->local_namespaces[0].out; + else + soap->dime.type = (char*)soap->local_namespaces[0].ns; + } + soap->dime.options = NULL; + soap->dime.flags = SOAP_DIME_MB | SOAP_DIME_ABSURI; + if (!soap->dime.first) + soap->dime.flags |= SOAP_DIME_ME; + soap->count += 12 + ((strlen(soap->dime.id)+3)&(~3)) + (soap->dime.type ? ((strlen(soap->dime.type)+3)&(~3)) : 0); + } + if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM)) + return soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3); + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +static struct soap_multipart* +soap_alloc_multipart(struct soap *soap, struct soap_multipart **first, struct soap_multipart **last, const char *ptr, size_t size) +{ + struct soap_multipart *content; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New DIME/MIME attachment %p (%lu)\n", (void*)ptr, (unsigned long)size)); + content = (struct soap_multipart*)soap_malloc(soap, sizeof(struct soap_multipart)); + if (content) + { + content->next = NULL; + content->ptr = ptr; + content->size = size; + content->id = NULL; + content->type = NULL; + content->options = NULL; + content->encoding = SOAP_MIME_NONE; + content->location = NULL; + content->description = NULL; + if (!*first) + *first = content; + if (*last) + (*last)->next = content; + *last = content; + } + return content; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_dime_attachment(struct soap *soap, const char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option) +{ + struct soap_multipart *content = soap_alloc_multipart(soap, &soap->dime.first, &soap->dime.last, ptr, size); + if (!content) + return SOAP_EOM; + content->id = soap_strdup(soap, id); + content->type = soap_strdup(soap, type); + content->options = soap_dime_option(soap, optype, option); + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_mime_attachment(struct soap *soap, const char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description) +{ + struct soap_multipart *content = soap_alloc_multipart(soap, &soap->mime.first, &soap->mime.last, ptr, size); + if (!content) + return SOAP_EOM; + content->id = soap_strdup(soap, id); + content->type = soap_strdup(soap, type); + content->encoding = encoding; + content->location = soap_strdup(soap, location); + content->description = soap_strdup(soap, description); + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +SOAP_FMAC1 +struct soap_multipart* +SOAP_FMAC2 +soap_next_multipart(struct soap_multipart *content) +{ + if (content) + return content->next; + return NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +static void +soap_select_mime_boundary(struct soap *soap) +{ + while (!soap->mime.boundary || soap_valid_mime_boundary(soap)) + { + char *s = soap->mime.boundary; + size_t n = 0; + if (s) + n = strlen(s); + if (n < 16) + { + n = 64; + s = soap->mime.boundary = (char*)soap_malloc(soap, n + 1); + if (!s) + return; + } + *s++ = '='; + *s++ = '='; + n -= 4; + while (n) + { + *s++ = soap_base64o[soap_random & 0x3F]; + n--; + } + *s++ = '='; + *s++ = '='; + *s = '\0'; + } + if (!soap->mime.start) + soap->mime.start = ""; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER +static int +soap_valid_mime_boundary(struct soap *soap) +{ + struct soap_multipart *content; + size_t k; + if (soap->fmimeread) + return SOAP_OK; + k = strlen(soap->mime.boundary); + for (content = soap->mime.first; content; content = content->next) + { + if (content->ptr && content->size >= k) + { + const char *p = (const char*)content->ptr; + size_t i; + for (i = 0; i < content->size - k; i++, p++) + { + if (!strncmp(p, soap->mime.boundary, k)) + return SOAP_ERR; + } + } + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +#ifdef WITH_GZIP +static int +soap_getgziphdr(struct soap *soap) +{ + int i; + soap_wchar c = 0, f = 0; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get gzip header\n")); + for (i = 0; i < 9; i++) + { + c = soap_get1(soap); + if (i == 1 && c == 8) + soap->z_dict = 0; + if (i == 2) + f = c; + } + if (f & 0x04) /* FEXTRA */ + { + i = soap_get1(soap); + i |= soap_get1(soap) << 8; + while (i-- > 0) + { + if ((int)soap_get1(soap) == EOF) + return soap->error = SOAP_ZLIB_ERROR; + } + } + if (f & 0x08) /* skip FNAME */ + { + do + { + c = soap_get1(soap); + } while (c && (int)c != EOF); + } + if ((int)c != EOF && (f & 0x10)) /* skip FCOMMENT */ + { + do + { + c = soap_get1(soap); + } while (c && (int)c != EOF); + } + if ((int)c != EOF && (f & 0x02)) /* skip FHCRC (CRC32 is used) */ + { + c = soap_get1(soap); + if ((int)c != EOF) + c = soap_get1(soap); + } + if ((int)c == EOF) + return soap->error = SOAP_ZLIB_ERROR; + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +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 + (void)soap_send_fault(soap); +#else + return soap_send_fault(soap); +#endif + } + return soap_closesock(soap); + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_begin_recv(struct soap *soap) +{ + soap_wchar c; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for input from socket=%d/fd=%d\n", (int)soap->socket, soap->recvfd)); + soap->error = SOAP_OK; +#ifndef WITH_LEANER + soap->recverror = SOAP_OK; +#endif + soap_free_temp(soap); + soap_set_local_namespaces(soap); + soap->version = 0; /* don't assume we're parsing SOAP content by default */ +#ifndef WITH_NOIDREF + soap_free_iht(soap); +#endif + if ((soap->imode & SOAP_IO) == SOAP_IO_CHUNK) + { + soap->imode &= ~SOAP_IO; + soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_CHUNK; + } + soap->imode &= ~(SOAP_ENC_DIME | SOAP_ENC_MIME | SOAP_ENC_ZLIB); + soap->mode = soap->imode; + if (!(soap->mode & SOAP_IO_KEEPALIVE)) + soap->keep_alive = 0; + if (!soap->keep_alive) + soap->buflen = soap->bufidx = 0; + soap->null = 0; + soap->position = 0; + soap->mustUnderstand = 0; + soap->shaky = 0; + soap->ahead = 0; + soap->peeked = 0; + soap->level = 0; + soap->part = SOAP_BEGIN_RECV; + soap->count = 0; + soap->length = 0; + soap->cdata = 0; + if (!(soap->mode & SOAP_ENC_PLAIN)) + { + *soap->endpoint = '\0'; + soap->action = NULL; + soap->fform = NULL; + } + soap->header = NULL; + soap->fault = NULL; + soap->status = 0; + soap->body = 1; +#ifndef WITH_LEANER + soap->dom = NULL; + soap->dime.count = 0; + soap->dime.chunksize = 0; + soap->dime.buflen = 0; + soap->dime.list = NULL; + soap->dime.first = NULL; + soap->dime.last = NULL; + soap->mime.list = NULL; + soap->mime.first = NULL; + soap->mime.last = NULL; + soap->mime.boundary = NULL; + soap->mime.start = NULL; +#endif +#ifdef WIN32 +#ifndef UNDER_CE +#ifndef WITH_FASTCGI + if (!soap_valid_socket(soap->socket) && !soap->is && soap->recvfd >= 0) /* Set win32 stdin or soap->recvfd to BINARY, e.g. to support DIME */ +#ifdef __BORLANDC__ + setmode(soap->recvfd, _O_BINARY); +#else + _setmode(soap->recvfd, _O_BINARY); +#endif +#endif +#endif +#endif +#ifdef WITH_ZLIB + soap->zlib_in = SOAP_ZLIB_NONE; + soap->zlib_out = SOAP_ZLIB_NONE; + if (!soap->d_stream) + { + soap->d_stream = (z_stream*)SOAP_MALLOC(soap, sizeof(z_stream)); + if (!soap->d_stream) + return soap->error = SOAP_EOM; + soap->d_stream->zalloc = Z_NULL; + soap->d_stream->zfree = Z_NULL; + soap->d_stream->opaque = Z_NULL; + soap->d_stream->next_in = Z_NULL; + soap->d_stream->msg = Z_NULL; + } + soap->d_stream->avail_in = 0; + soap->d_stream->next_out = (Byte*)soap->buf; + soap->d_stream->avail_out = sizeof(soap->buf); + soap->z_ratio_in = 1.0; +#endif +#ifdef WITH_OPENSSL + if (soap->ssl) + ERR_clear_error(); +#endif +#ifndef WITH_LEAN + soap->start = (ULONG64)time(NULL); +#endif +#ifndef WITH_LEANER + if (soap->fprepareinitrecv && (soap->error = soap->fprepareinitrecv(soap)) != SOAP_OK) + return soap->error; +#endif + c = soap_getchar(soap); +#ifdef WITH_GZIP + if (c == 0x1F) + { + if (soap_getgziphdr(soap)) + return soap->error; + if (inflateInit2(soap->d_stream, -MAX_WBITS) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + if (soap->z_dict) + { + if (inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + } + soap->zlib_state = SOAP_ZLIB_INFLATE; + soap->mode |= SOAP_ENC_ZLIB; + soap->zlib_in = SOAP_ZLIB_GZIP; + soap->z_crc = crc32(0L, NULL, 0); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n")); + if (!soap->z_buf) + soap->z_buf = (char*)SOAP_MALLOC(soap, sizeof(soap->buf)); + (void)soap_memcpy((void*)soap->z_buf, sizeof(soap->buf), (const void*)soap->buf, sizeof(soap->buf)); + /* should not chunk over plain transport, so why bother to check? */ + /* if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) */ + /* soap->z_buflen = soap->bufidx; */ + /* else */ + soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx); + soap->d_stream->avail_in = (unsigned int)(soap->buflen - soap->bufidx); + soap->z_buflen = soap->buflen; + soap->buflen = soap->bufidx; + c = ' '; + } +#endif + while (soap_coblank(c)) + c = soap_getchar(soap); +#ifndef WITH_LEANER + if (c == '-' && soap_get0(soap) == '-') + { + soap->mode |= SOAP_ENC_MIME; + } + else if ((c & 0xFFFC) == (SOAP_DIME_VERSION | SOAP_DIME_MB) && (soap_get0(soap) & 0xFFF0) == 0x20) + { + soap->mode |= SOAP_ENC_DIME; + } + else +#endif + { + /* skip BOM */ + if (c == 0xEF && soap_get0(soap) == 0xBB) + { + soap_get1(soap); + c = soap_get1(soap); + if (c == 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_coblank(c)) + c = soap_getchar(soap); + } + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + soap_unget(soap, c); +#ifndef WITH_NOHTTP + /* 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_PLAIN))) + { + soap_mode m = soap->imode; + soap->error = soap->fparse(soap); + soap->mode = soap->imode; /* if imode is changed, effectuate */ + soap->imode = m; /* restore imode */ + if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) + { + soap->chunkbuflen = soap->buflen; + soap->buflen = soap->bufidx; + soap->chunksize = 0; + } +#ifdef WITH_ZLIB + soap->mode &= ~SOAP_ENC_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; + if (inflateInit2(soap->d_stream, -MAX_WBITS) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + soap->z_crc = crc32(0L, NULL, 0); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n")); + } + else + { + soap_revget1(soap); + if (inflateInit(soap->d_stream) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + soap->zlib_in = SOAP_ZLIB_DEFLATE; + } + } + else +#endif + if (inflateInit(soap->d_stream) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + if (soap->z_dict) + { + if (inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len) != Z_OK) + return soap->error = SOAP_ZLIB_ERROR; + } + soap->zlib_state = SOAP_ZLIB_INFLATE; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate initialized\n")); + soap->mode |= SOAP_ENC_ZLIB; + if (!soap->z_buf) + soap->z_buf = (char*)SOAP_MALLOC(soap, sizeof(soap->buf)); + (void)soap_memcpy((void*)soap->z_buf, sizeof(soap->buf), (const void*)soap->buf, sizeof(soap->buf)); + soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx); + soap->d_stream->avail_in = (unsigned int)(soap->buflen - soap->bufidx); + soap->z_buflen = soap->buflen; + soap->buflen = soap->bufidx; + } +#endif +#ifndef WITH_LEANER + if (soap->fpreparerecv && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK && soap->buflen > soap->bufidx) + { + int r; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking fpreparerecv\n")); + r = soap->fpreparerecv(soap, soap->buf + soap->bufidx, soap->buflen - soap->bufidx); + if (r) + return soap->error = r; + } +#endif + if (soap->error && soap->error < SOAP_STOP) + { + if (soap->status >= 200 && soap->status < 600) + { + const char *s = soap_http_get_body(soap, NULL); + (void)soap_end_recv(soap); + if (soap->status >= 300) + soap->keep_alive = 0; /* to force close */ + return soap_set_receiver_error(soap, "HTTP Error", s, soap->status); + } + return soap->error; + } + if (!soap->body && soap->status >= 200 && soap->status < 600) + return soap->error = soap->status; /* client side received HTTP status code */ + if (soap->status > SOAP_POST) + { + soap->fform = NULL; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking http method handler\n")); + switch (soap->status) + { + case SOAP_GET: + if (soap_http_skip_body(soap) || soap_end_recv(soap)) + return soap->error; + soap->error = soap->fget(soap); + break; + case SOAP_PUT: + soap->error = soap->fput(soap); + break; + case SOAP_PATCH: + soap->error = soap->fpatch(soap); + break; + case SOAP_DEL: + if (soap_http_skip_body(soap) || soap_end_recv(soap)) + return soap->error; + soap->error = soap->fdel(soap); + break; + case SOAP_HEAD: + if (soap_http_skip_body(soap) || soap_end_recv(soap)) + return soap->error; + soap->error = soap->fhead(soap); + break; + case SOAP_OPTIONS: + if (soap_http_skip_body(soap) || soap_end_recv(soap)) + return soap->error; + soap->error = soap->fopt(soap); + break; + default: + if (soap_http_skip_body(soap) || soap_end_recv(soap)) + return soap->error; + return 405; + } + if (soap->error == SOAP_OK) + return soap->error = SOAP_STOP; /* prevents further processing and calls soap_closesock() */ + if (soap->error != SOAP_FORM || !soap->fform) /* continue if handler returned SOAP_FORM */ + return soap->error; + soap->error = SOAP_OK; + } + if (soap->fform) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking http post/form handler\n")); + soap->error = soap->fform(soap); + soap->fform = NULL; + if (soap->error == SOAP_OK) + return soap->error = SOAP_STOP; /* prevents further processing */ + if (soap->status != SOAP_POST || soap->error != 404) /* continue with POST if handler returned HTTP not found */ + return soap->error; + soap->error = SOAP_OK; + } + if (!soap->body) + return soap->error = SOAP_NO_DATA; + } + else if (soap->fform) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Invoking http form handler\n")); + soap->error = soap->fform(soap); + soap->fform = NULL; + if (soap->error == SOAP_OK) + return soap->error = SOAP_STOP; /* prevents further processing */ + if (soap->error != 404) /* continue with POST if handler returned HTTP not found */ + return soap->error; + soap->error = SOAP_OK; + } +#endif +#ifndef WITH_LEANER + if ((soap->mode & SOAP_ENC_MIME)) + { + do /* skip preamble */ + { + c = soap_getchar(soap); + if ((int)c == EOF) + return soap->error = SOAP_CHK_EOF; + } while (c != '-' || soap_get0(soap) != '-'); + soap_unget(soap, c); + if (soap_getmimehdr(soap)) + return soap->error; + if (soap->mime.start) + { + do + { + if (!soap->mime.last->id) + break; + if (!soap_match_cid(soap, soap->mime.start, soap->mime.last->id)) + break; + } while (soap_recv_mime_attachment(soap, NULL)); + } + if (soap_http_header_attribute(soap, soap->mime.first->type, "application/dime")) + soap->mode |= SOAP_ENC_DIME; + } + if ((soap->mode & SOAP_ENC_DIME)) + { + if (soap_getdimehdr(soap)) + return soap->error; + if ((soap->dime.flags & SOAP_DIME_CF)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked SOAP in DIME message\n")); + soap->dime.chunksize = soap->dime.size; + if (soap->buflen - soap->bufidx >= soap->dime.chunksize) + { + soap->dime.buflen = soap->buflen; + soap->buflen = soap->bufidx + soap->dime.chunksize; + } + else + { + soap->dime.chunksize -= soap->buflen - soap->bufidx; + } + } + soap->count = soap->buflen - soap->bufidx; + if (soap->recv_maxlength && soap->count > soap->recv_maxlength) + return soap->error = SOAP_EOF; + } +#endif + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_envelope_begin_out(struct soap *soap) +{ + if (soap->version == 0) + return SOAP_OK; + soap->part = SOAP_IN_ENVELOPE; + return soap_element_begin_out(soap, "SOAP-ENV:Envelope", 0, NULL); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_envelope_end_out(struct soap *soap) +{ + 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; + soap->part = SOAP_END_ENVELOPE; + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_http_has_body(struct soap *soap) +{ + return soap->length || (soap->mode & SOAP_ENC_ZLIB) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_http_skip_body(struct soap *soap) +{ + ULONG64 k = soap->length; + /* check HTTP body, return "" if none */ + if (!k && !(soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK) + return SOAP_OK; + /* do not consume DIME or MIME attachments, leave this to soap_end_recv */ + if ((soap->mode & SOAP_ENC_DIME) || (soap->mode & SOAP_ENC_MIME)) + return SOAP_OK; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skipping HTTP body (mode=0x%x)\n", soap->mode)); + if (k && !(soap->mode & SOAP_ENC_ZLIB)) + { + ULONG64 i; + soap->length = 0; + for (i = 0; i < k; i++) + { + soap_wchar c = soap_get1(soap); + if ((int)c == EOF) + break; + } + } + else + { + for (;;) + { + soap_wchar c = soap_get1(soap); + if ((int)c == EOF) + break; + } + } + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_http_get_body(struct soap *soap, size_t *len) +{ + return soap_http_get_body_prefix(soap, len, NULL); +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_http_get_form(struct soap *soap) +{ + return soap_http_get_body_prefix(soap, NULL, "?"); +} + +/******************************************************************************/ + +SOAP_FMAC1 +char * +SOAP_FMAC2 +soap_http_get_body_prefix(struct soap *soap, size_t *len, const char *prefix) +{ + char *s; + ULONG64 k = soap->length; + size_t n = 0; + if (!prefix) + prefix = SOAP_STR_EOS; + else + n = strlen(prefix); + if (len) + *len = 0; + /* check HTTP body, return "" if none */ + if (!k && !(soap->mode & SOAP_ENC_PLAIN) && !(soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK) + return soap_strdup(soap, prefix); + /* do not consume DIME or MIME attachments, leave this to soap_end_recv */ + if ((soap->mode & SOAP_ENC_DIME) || (soap->mode & SOAP_ENC_MIME)) + return soap_strdup(soap, prefix); + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Parsing HTTP body, prefixed with '%s' (mode=0x%x)\n", prefix, soap->mode)); + if (k && !(soap->mode & SOAP_ENC_ZLIB)) + { + char *t; + size_t j; + soap->length = 0; + /* http content length != 0 and uncompressed body and body length does not exceed size_t max size */ + if ((SOAP_MAXALLOCSIZE != 0 && n + k > SOAP_MAXALLOCSIZE) || n + k > (ULONG64)((size_t)-2)) + { + soap->error = SOAP_EOM; + return NULL; + } + j = (size_t)k; /* safe cast: k is in size_t range as guarded above */ + s = t = (char*)soap_malloc(soap, j + n + 1); + if (s) + { + size_t i = 0; + if (n) + { + (void)soap_memcpy(t, n, prefix, n); + t += n; + } + if (soap->ahead && j > 0) + { + *t++ = soap->ahead; + ++i; + soap->ahead = 0; + } + while (i < j) + { + size_t m; + if (soap->bufidx >= soap->buflen) + if (soap_recv(soap)) + break; + if (soap->buflen - soap->bufidx > j - i) + m = j - i; + else + m = soap->buflen - soap->bufidx; + (void)soap_memcpy(t, j + n + 1 - i, soap->buf + soap->bufidx, m); + soap->bufidx += m; + t += m; + i += m; + } + *t = '\0'; + if (len) + *len = n + i; + } + else + { + soap->error = SOAP_EOM; + return NULL; + } + } + else + { + size_t i, l = 0; + if (soap_alloc_block(soap) == NULL) + return NULL; + if (n) + { + s = (char*)soap_push_block(soap, NULL, n); + if (!s) + return NULL; + (void)soap_memcpy(s, n, prefix, n); + l += n; + } + if (soap->ahead) + { + s = (char*)soap_push_block(soap, NULL, 1); + if (!s) + return NULL; + *s = soap->ahead; + ++l; + soap->ahead = 0; + } + for (;;) + { + size_t k = SOAP_BLKLEN; + s = (char*)soap_push_block(soap, NULL, k); + if (!s) + return NULL; + i = 0; + while (i < k) + { + size_t m; + if (soap->bufidx >= soap->buflen) + if (soap_recv(soap)) + goto end; + if (soap->buflen - soap->bufidx > k - i) + m = k - i; + else + m = soap->buflen - soap->bufidx; + (void)soap_memcpy(s, k - i, soap->buf + soap->bufidx, m); + soap->bufidx += m; + s += m; + i += m; + if (l + m < l) + { + soap->error = SOAP_EOM; + return NULL; + } + l += m; + } + } +end: + *s = '\0'; + if (len) + *len = l; + soap_size_block(soap, NULL, i + 1); + s = (char*)soap_save_block(soap, NULL, NULL, 0); + } + return s; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_envelope_begin_in(struct soap *soap) +{ + soap->part = SOAP_IN_ENVELOPE; + if (soap_element_begin_in(soap, "SOAP-ENV:Envelope", 0, NULL)) + { + if (soap->error == SOAP_TAG_MISMATCH) + { + if (!soap_element_begin_in(soap, ":Envelope", 0, NULL)) + return soap->error = SOAP_VERSIONMISMATCH; + if (soap->status == 0 + || (soap->status >= 200 && soap->status <= 299) + || soap->status == 400 + || soap->status == 500 + || soap->status >= SOAP_POST) + return soap->error = SOAP_OK; /* allow non-SOAP (REST) XML content to be captured */ + soap->error = soap->status; + } + else if (soap->status) + { + soap->error = soap->status; + } + return soap->error; + } + soap_version(soap); + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_envelope_end_in(struct soap *soap) +{ + if (soap->version == 0) + return SOAP_OK; + soap->part = SOAP_END_ENVELOPE; + return soap_element_end_in(soap, "SOAP-ENV:Envelope"); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_body_begin_out(struct soap *soap) +{ + if (soap->version == 1) + soap->encoding = 1; +#ifndef WITH_LEAN + if ((soap->mode & SOAP_SEC_WSUID) && soap_set_attr(soap, "wsu:Id", "Body", 1)) + return soap->error; +#endif + if (soap->version == 0) + return SOAP_OK; + soap->part = SOAP_IN_BODY; + return soap_element_begin_out(soap, "SOAP-ENV:Body", 0, NULL); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_body_end_out(struct soap *soap) +{ + 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; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_body_begin_in(struct soap *soap) +{ + 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) + soap->part = SOAP_NO_BODY; + return SOAP_OK; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_body_end_in(struct soap *soap) +{ + 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"); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_recv_header(struct soap *soap) +{ + if (soap_getheader(soap) && soap->error == SOAP_TAG_MISMATCH) + soap->error = SOAP_OK; + if (soap->error == SOAP_OK && soap->fheader) + soap->error = soap->fheader(soap); + return soap->error; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_endpoint(struct soap *soap, const char *endpoint) +{ + const char *s, *t; + size_t i, n; + soap->endpoint[0] = '\0'; + soap->host[0] = '\0'; + soap->path[0] = '/'; + soap->path[1] = '\0'; + soap->port = 80; + if (!endpoint || !*endpoint) + return; +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) + if (!soap_tag_cmp(endpoint, "https:*")) + soap->port = 443; +#endif + soap_strcpy(soap->endpoint, sizeof(soap->endpoint), endpoint); + s = strchr(endpoint, ':'); + if (s && s[1] == '/' && s[2] == '/') + s += 3; + else + s = endpoint; +#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER) + t = strchr(s, '@'); + if (t && *s != ':' && *s != '@') + { + size_t l = t - s + 1; + char *r = (char*)soap_malloc(soap, l); + n = s - endpoint; + if (r) + { + s = soap_decode(r, l, s, ":@"); + soap->userid = r; + soap->passwd = SOAP_STR_EOS; + if (*s == ':') + { + s++; + if (*s != '@' && s < t) + { + l = t - s + 1; + r = r + strlen(r) + 1; + s = soap_decode(r, l, s, "@"); + soap->passwd = r; + } + } + } + s++; + soap_strcpy(soap->endpoint + n, sizeof(soap->endpoint) - n, s); + } +#endif + n = strlen(s); + if (n >= sizeof(soap->host)) + n = sizeof(soap->host) - 1; +#ifdef WITH_IPV6 + if (s[0] == '[') + { + s++; + for (i = 0; i < n; i++) + { + if (s[i] == ']') + { + s++; + --n; + break; + } + soap->host[i] = s[i]; + } + } + else + { + for (i = 0; i < n; i++) + { + soap->host[i] = s[i]; + if (s[i] == '/' || s[i] == ':' || s[i] == '?') + break; + } + } +#else + for (i = 0; i < n; i++) + { + soap->host[i] = s[i]; + if (s[i] == '/' || s[i] == ':' || s[i] == '?') + break; + } +#endif + soap->host[i] = '\0'; + if (s[i] == ':') + { + soap->port = (int)soap_strtol(s + i + 1, NULL, 10); + for (i++; i < n; i++) + if (s[i] == '/') + break; + } + if (i < n && s[i]) + soap_strcpy(soap->path, sizeof(soap->path), s + i); + if (soap->override_host && *soap->override_host) + { + soap_strcpy(soap->host, sizeof(soap->host), soap->override_host); + if (soap->override_port) + soap->port = soap->override_port; + } + if (soap->userid && !soap->authrealm) + soap->authrealm = soap->host; +} + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_GET(struct soap *soap, const char *endpoint, const char *action) +{ + return soap_connect_command(soap, SOAP_GET, endpoint, action); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_PUT(struct soap *soap, const char *endpoint, const char *action, const char *type) +{ + if (!soap->http_content) + soap->http_content = type; + if ((soap->omode & SOAP_IO) != SOAP_IO_CHUNK) + { + soap->omode &= ~SOAP_IO; + soap->omode |= SOAP_IO_STORE; + } + return soap_connect_command(soap, SOAP_PUT, endpoint, action); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_POST(struct soap *soap, const char *endpoint, const char *action, const char *type) +{ + if (!soap->http_content) + soap->http_content = type; + if ((soap->omode & SOAP_IO) != SOAP_IO_CHUNK) + { + soap->omode &= ~SOAP_IO; + soap->omode |= SOAP_IO_STORE; + } + return soap_connect_command(soap, SOAP_POST_FILE, endpoint, action); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_PATCH(struct soap *soap, const char *endpoint, const char *action, const char *type) +{ + if (!soap->http_content) + soap->http_content = type; + if ((soap->omode & SOAP_IO) != SOAP_IO_CHUNK) + { + soap->omode &= ~SOAP_IO; + soap->omode |= SOAP_IO_STORE; + } + return soap_connect_command(soap, SOAP_PATCH, endpoint, action); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_DELETE(struct soap *soap, const char *endpoint) +{ + if (soap_connect_command(soap, SOAP_DEL, endpoint, NULL) + || soap_recv_empty_response(soap)) + return soap_closesock(soap); + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_connect(struct soap *soap, const char *endpoint, const char *action) +{ + return soap_connect_command(soap, SOAP_POST, endpoint, action); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_connect_command(struct soap *soap, int http_command, const char *endpoints, const char *action) +{ + if (endpoints) + { + int retry = soap->connect_retry; + unsigned int backoff = 1; + for (;;) + { + struct timeval tv; + const char *s; + s = strchr(endpoints, ' '); + if (s) + { + size_t l = strlen(endpoints); + char *endpoint = NULL; + if (SOAP_MAXALLOCSIZE == 0 || l <= SOAP_MAXALLOCSIZE) + endpoint = (char*)SOAP_MALLOC(soap, l + 1); + if (!endpoint) + return soap->error = SOAP_EOM; + for (;;) + { + (void)soap_strncpy(endpoint, l + 1, endpoints, s - endpoints); + endpoint[s - endpoints] = '\0'; + if (soap_try_connect_command(soap, http_command, endpoint, action) != SOAP_TCP_ERROR) + break; + while (*s == ' ') + s++; + if (!*s) + break; + soap->error = SOAP_OK; + endpoints = s; + s = strchr(endpoints, ' '); + if (!s) + s = endpoints + strlen(endpoints); + } + SOAP_FREE(soap, endpoint); + } + else + { + soap_try_connect_command(soap, http_command, endpoints, action); + } + if (soap->error != SOAP_TCP_ERROR || retry <= 0) + break; + soap->error = SOAP_OK; + tv.tv_sec = backoff; + tv.tv_usec = 0; + select(0, NULL, NULL, NULL, &tv); + if (backoff < 32) + backoff *= 2; + --retry; + } + } + return soap->error; +} + +/******************************************************************************/ + +static int +soap_try_connect_command(struct soap *soap, int http_command, const char *endpoint, const char *action) +{ + char host[sizeof(soap->host)]; + int port; + ULONG64 count; + soap->error = SOAP_OK; + soap_reset_errno; + soap->errnum = 0; + (void)soap_memcpy(host, sizeof(host), soap->host, sizeof(soap->host)); /* save previous host name: if != then reconnect */ + port = soap->port; /* save previous port to compare */ + soap->status = http_command; + soap_set_endpoint(soap, endpoint); + soap->action = soap_strdup(soap, action); +#ifndef WITH_LEANER + if (soap->fconnect) + { + soap->error = soap->fconnect(soap, endpoint, soap->host, soap->port); + if (soap->error) + return soap->error; + } + else +#endif + if (soap->fopen && *soap->host) + { + if (!soap->keep_alive || !soap_valid_socket(soap->socket) || strcmp(soap->host, host) || soap->port != port || !soap->fpoll || soap->fpoll(soap)) + { + soap->error = SOAP_OK; +#ifndef WITH_LEAN + if (!strncmp(endpoint, "soap.udp:", 9) || !strncmp(endpoint, "udp:", 4)) + { + soap->omode |= SOAP_IO_UDP; + } + else +#endif + { + soap->keep_alive = 0; /* to force close */ + soap->omode &= ~SOAP_IO_UDP; /* to force close */ + } + (void)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_valid_socket(soap->socket) || soap->error) + { + if (soap->error) + return soap->error; + return soap->error = SOAP_TCP_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_init_send(soap)) + return soap->error; +#ifndef WITH_NOHTTP + if (http_command == SOAP_GET || http_command == SOAP_DEL || http_command == SOAP_HEAD || http_command == SOAP_OPTIONS) + { + soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB); + soap->mode |= SOAP_IO_BUFFER; + } + if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_PLAIN) && endpoint) + { + soap_mode k = soap->mode; + soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB); + if ((k & SOAP_IO) != SOAP_IO_FLUSH) + soap->mode |= SOAP_IO_BUFFER; + soap->error = soap->fpost(soap, endpoint, soap->host, soap->port, soap->path, action, count); + if (soap->error) + return soap->error; + if ((k & SOAP_IO) == SOAP_IO_CHUNK) + { + if (soap_flush(soap)) + return soap->error; + } + soap->mode = k; + } + if (http_command == SOAP_GET || http_command == SOAP_DEL || http_command == SOAP_HEAD || http_command == SOAP_OPTIONS) + return soap_end_send_flush(soap); +#endif +#ifndef WITH_LEANER + if (soap_begin_attachments(soap)) + return soap->error; +#endif + return SOAP_OK; +} + +/******************************************************************************/ + +#ifdef WITH_NTLM +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; + int keep_alive = soap->keep_alive; + ULONG64 length = soap->length; + ULONG64 count = soap->count; + soap_mode m = soap->mode; + soap_mode om = soap->omode; + int status = soap->status; + char *action = soap->action; + short version = soap->version; + const char *http_content = soap->http_content; + const char *http_extra_header = soap->http_extra_header; + const char *bearer = soap->bearer; + 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*)(void*)&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_init_send(soap)) + return soap->error; + if (!soap->keep_alive) + soap->keep_alive = -1; /* client keep alive */ + soap->status = command; /* GET or CONNECT for proxy */ + 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 = keep_alive; + 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; + (void)soap_end_recv(soap); + soap->header = oldheader; + soap->length = length; + 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*)(void*)&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 = keep_alive; + soap->length = length; + soap->count = count; + soap->mode = m; + soap->omode = om; + soap->status = status; + soap->action = action; + soap->version = version; + soap->http_content = http_content; + soap->http_extra_header = http_extra_header; + soap->bearer = bearer; + } + return SOAP_OK; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +char* +SOAP_FMAC2 +soap_s2base64(struct soap *soap, const unsigned char *s, char *t, int n) +{ + int i; + unsigned long m; + char *p; + if (!t) + t = (char*)soap_malloc(soap, (n + 2) / 3 * 4 + 1); + if (!t) + return NULL; + p = t; + t[0] = '\0'; + if (!s) + return p; + for (; n > 2; n -= 3, s += 3) + { + m = s[0]; + m = (m << 8) | s[1]; + m = (m << 8) | s[2]; + for (i = 4; i > 0; m >>= 6) + t[--i] = soap_base64o[m & 0x3F]; + t += 4; + } + t[0] = '\0'; + if (n > 0) /* 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 = 4; i > 0; m >>= 6) + t[--i] = soap_base64o[m & 0x3F]; + for (i = 3; i > n; i--) + t[i] = '='; + t[4] = '\0'; + } + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n) +{ + size_t i, j; + soap_wchar c; + unsigned long m; + const char *p; + if (n) + *n = 0; + if (!s || !*s) + { + if (soap->error) + return NULL; + return SOAP_NON_NULL; + } + if (!t) + { + l = (strlen(s) + 3) / 4 * 3 + 1; /* space for raw binary and \0 */ + t = (char*)soap_malloc(soap, l); + } + if (!t) + return NULL; + p = t; + 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 = (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++; + } + else if (!soap_coblank(c + '+')) + { + soap->error = SOAP_TYPE; + return NULL; + } + } + 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); + } +} + +/******************************************************************************/ + +SOAP_FMAC1 +char* +SOAP_FMAC2 +soap_s2hex(struct soap *soap, const unsigned char *s, char *t, int n) +{ + char *p; + if (!t) + t = (char*)soap_malloc(soap, 2 * n + 1); + if (!t) + return NULL; + p = t; + t[0] = '\0'; + if (s) + { + for (; n > 0; n--) + { + int m = *s++; + *t++ = (char)((m >> 4) + (m > 159 ? 'a' - 10 : '0')); + m &= 0x0F; + *t++ = (char)(m + (m > 9 ? 'a' - 10 : '0')); + } + } + *t++ = '\0'; + return p; +} + +/******************************************************************************/ + +SOAP_FMAC1 +const char* +SOAP_FMAC2 +soap_hex2s(struct soap *soap, const char *s, char *t, size_t l, int *n) +{ + const char *p; + if (n) + *n = 0; + if (!s || !*s) + { + if (soap->error) + return NULL; + return SOAP_NON_NULL; + } + if (!t) + { + l = strlen(s) / 2 + 1; /* make sure enough space for \0 */ + t = (char*)soap_malloc(soap, l); + } + if (!t) + return NULL; + p = t; + while (l) + { + int d1, d2; + d1 = *s++; + if (!d1) + break; + d2 = *s++; + if (!d2) + break; + *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; +} + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +const char * +SOAP_FMAC2 +soap_http_content_type(struct soap *soap, int status) +{ + if (soap->status != SOAP_GET && soap->status != SOAP_DEL && soap->status != SOAP_CONNECT) + { + const char *s = "text/xml; charset=utf-8"; +#ifndef WITH_LEANER + const char *r = NULL; + size_t n; +#endif + if (((status >= SOAP_FILE && status < SOAP_FILE + 600) || soap->status == SOAP_PUT || soap->status == SOAP_POST_FILE || soap->status == SOAP_PATCH) && soap->http_content && *soap->http_content && !strchr(soap->http_content, 10) && !strchr(soap->http_content, 13)) + s = soap->http_content; + else if (status == SOAP_HTML) + s = "text/html; charset=utf-8"; + else if (soap->version == 2) + s = "application/soap+xml; charset=utf-8"; + soap->http_content = NULL; /* use http_content once (assign new value before each call) */ +#ifndef WITH_LEANER + if (soap->mode & (SOAP_ENC_DIME | SOAP_ENC_MTOM)) + { + if ((soap->mode & SOAP_ENC_MTOM)) + { + if (soap->version == 2) + r = "application/soap+xml"; + else + r = "text/xml"; + s = "application/xop+xml"; + } + else + { + s = "application/dime"; + } + } + if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary) + { + const char *t; + size_t l; + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), strlen(soap->mime.boundary) + 53), "multipart/related; charset=utf-8; boundary=\"%s\"; type=\"", soap->mime.boundary); + t = strchr(s, ';'); + if (t) + n = t - s; + else + n = strlen(s); + l = strlen(soap->tmpbuf); + if (sizeof(soap->tmpbuf) > l + n) + (void)soap_strncpy(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, s, n); + if (soap->mime.start) + { + l = strlen(soap->tmpbuf); + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, strlen(soap->mime.start) + 10), "\"; start=\"%s", soap->mime.start); + } + if (r) + { + l = strlen(soap->tmpbuf); + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, strlen(r) + 15), "\"; start-info=\"%s", r); + } + l = strlen(soap->tmpbuf); + if (sizeof(soap->tmpbuf) > l) + soap_strcpy(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, "\""); + } + else + { + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), s); + } + if (status == SOAP_OK && soap->version == 2 && soap->action) + { + size_t l = strlen(soap->tmpbuf); + n = strlen(soap->action); + (SOAP_SNPRINTF(soap->tmpbuf + l, sizeof(soap->tmpbuf) - l, n + 11), "; action=\"%s\"", soap->action); + } +#else + soap_strcpy(soap->tmpbuf, sizeof(soap->tmpbuf), s); +#endif + return soap->tmpbuf; + } + return NULL; +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_puthttphdr(struct soap *soap, int status, ULONG64 count) +{ + int err = SOAP_OK; + if (soap_http_content_type(soap, status)) + { + err = soap->fposthdr(soap, "Content-Type", soap->tmpbuf); + if (err) + return err; +#ifdef WITH_ZLIB + if ((soap->omode & SOAP_ENC_ZLIB)) + { +#ifdef WITH_GZIP + err = soap->fposthdr(soap, "Content-Encoding", soap->zlib_out == SOAP_ZLIB_DEFLATE ? "deflate" : "gzip"); +#else + err = soap->fposthdr(soap, "Content-Encoding", "deflate"); +#endif + if (err) + return err; + } +#endif +#ifndef WITH_LEANER + if ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK) + { + err = soap->fposthdr(soap, "Transfer-Encoding", "chunked"); + } + else +#endif + { + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), SOAP_ULONG_FORMAT, count); + err = soap->fposthdr(soap, "Content-Length", soap->tmpbuf); + } + if (err) + return err; + } + if (soap->http_extra_header) + { + const char *header = soap->http_extra_header; + soap->http_extra_header = NULL; /* use http_extra_header once (assign new value before each call) */ + while (*header) + { + const char *s = strchr(header, ':'); + const char *t = strchr(header, '\n'); + if (t == NULL) + t = header + strlen(header); + if (s != NULL && s < t && t < header + sizeof(soap->tmpbuf)) + { + while (s < t && isspace(*(t - 1))) + --t; + soap_strncpy(soap->tmpbuf, sizeof(soap->tmpbuf), header, t - header); + soap->tmpbuf[s - header] = '\0'; + while (s < t && isspace(*++s)) + continue; + err = soap->fposthdr(soap, soap->tmpbuf, soap->tmpbuf + (s - header)); + if (err) + return err; + } + while (isspace(*t)) + ++t; + header = t; + } + } + if (soap->keep_alive) + { + if (soap->keep_alive > 0 && soap->recv_timeout) + { + int t = soap->recv_timeout; + if (t < 0) + t = 1; + (SOAP_SNPRINTF(soap->tmpbuf, sizeof(soap->tmpbuf), 20), "timeout=%d, max=%d", soap->recv_timeout, soap->keep_alive); + err = soap->fposthdr(soap, "Keep-Alive", soap->tmpbuf); + if (err) + return err; + } + return soap->fposthdr(soap, "Connection", "keep-alive"); + } + return soap->fposthdr(soap, "Connection", "close"); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +static const char* +soap_set_validation_fault(struct soap *soap, const char *s, const char *t) +{ + if (!t) + t = SOAP_STR_EOS; + if (*soap->tag) + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(s) + strlen(t) + strlen(soap->tag) + 47), "Validation constraint violation: %s%s in element '%s'", s, t, soap->tag); + else + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(s) + strlen(t) + 33), "Validation constraint violation: %s%s", s, t); + return soap->msgbuf; +} +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_set_fault(struct soap *soap) +{ + const char **c; + const char **s; + if (soap->version == 0) + soap_version(soap); + c = soap_faultcode(soap); + s = soap_faultstring(soap); + if (soap->fseterror) + soap->fseterror(soap, c, s); + if (!*c) + { + if (soap->version == 2) + *c = "SOAP-ENV:Sender"; + else if (soap->version == 1) + *c = "SOAP-ENV:Client"; + else + *c = ""; + } + if (*s) + return; + if (soap->error >= SOAP_POST) + soap->error = SOAP_HTTP_METHOD; + switch (soap->error) + { +#ifndef WITH_LEAN + case SOAP_CLI_FAULT: + *s = "Client fault"; + break; + case SOAP_SVR_FAULT: + *s = "Server fault"; + break; + case SOAP_TAG_MISMATCH: + *s = soap_set_validation_fault(soap, "tag name or namespace mismatch", NULL); + break; + case SOAP_TYPE: + if (*soap->type) + *s = soap_set_validation_fault(soap, "type mismatch ", soap->type); + else if (*soap->arrayType) + *s = soap_set_validation_fault(soap, "array type mismatch", NULL); + else + *s = soap_set_validation_fault(soap, "invalid value", NULL); + break; + case SOAP_SYNTAX_ERROR: + *s = soap_set_validation_fault(soap, "syntax error", NULL); + break; + case SOAP_NO_TAG: + if (soap->version == 0 && soap->level == 0) + *s = soap_set_validation_fault(soap, "root element expected", NULL); + else if (soap->level == 0) + *s = soap_set_validation_fault(soap, "SOAP message expected", NULL); + else + *s = soap_set_validation_fault(soap, "element tag expected", NULL); + break; + case SOAP_END_TAG: + *s = soap_set_validation_fault(soap, "closing tag expected", NULL); + break; + case SOAP_MUSTUNDERSTAND: + *c = "SOAP-ENV:MustUnderstand"; + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(soap->tag) + 65), "The data in element '%s' must be understood but cannot be processed", soap->tag); + *s = soap->msgbuf; + break; + case SOAP_VERSIONMISMATCH: + *c = "SOAP-ENV:VersionMismatch"; + *s = "Invalid SOAP message or SOAP version mismatch"; + break; + case SOAP_DATAENCODINGUNKNOWN: + *c = "SOAP-ENV:DataEncodingUnknown"; + *s = "Unsupported SOAP data encoding"; + break; + case SOAP_NAMESPACE: + *s = soap_set_validation_fault(soap, "namespace error", NULL); + break; + case SOAP_USER_ERROR: + *s = "User data access error"; + break; + case SOAP_NO_METHOD: + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(soap->tag) + 66), "Method '%s' not implemented: method name or namespace not recognized", soap->tag); + *s = soap->msgbuf; + break; + case SOAP_NO_DATA: + *s = "Data required for operation"; + break; + case SOAP_GET_METHOD: + *s = "HTTP GET method not implemented"; + break; + case SOAP_PUT_METHOD: + *s = "HTTP PUT method not implemented"; + break; + case SOAP_PATCH_METHOD: + *s = "HTTP PATCH method not implemented"; + break; + case SOAP_DEL_METHOD: + *s = "HTTP DELETE method not implemented"; + break; + case SOAP_HTTP_METHOD: + *s = "HTTP method error"; + break; + case SOAP_EOM: + *s = "Out of memory"; + break; + case SOAP_MOE: + *s = "Memory overflow or memory corruption error"; + break; + case SOAP_HDR: + *s = "Header line too long"; + break; + case SOAP_IOB: + *s = "Array index out of bounds"; + break; + case SOAP_NULL: + *s = soap_set_validation_fault(soap, "nil not allowed", NULL); + break; + case SOAP_DUPLICATE_ID: + *s = soap_set_validation_fault(soap, "multiple elements (use the SOAP_XML_TREE flag) with duplicate id ", soap->id); + if (soap->version == 2) + *soap_faultsubcode(soap) = "SOAP-ENC:DuplicateID"; + break; + case SOAP_MISSING_ID: + *s = soap_set_validation_fault(soap, "missing id for ref ", soap->id); + if (soap->version == 2) + *soap_faultsubcode(soap) = "SOAP-ENC:MissingID"; + break; + case SOAP_HREF: + *s = soap_set_validation_fault(soap, "incompatible object type id-ref ", soap->id); + break; + case SOAP_FAULT: + break; +#ifndef WITH_NOIO + case SOAP_UDP_ERROR: + *s = "Message too large for UDP packet"; + break; + case SOAP_TCP_ERROR: + *s = tcp_error(soap); + break; +#endif + case SOAP_HTTP_ERROR: + *s = "An HTTP processing error occurred"; + break; + case SOAP_NTLM_ERROR: + *s = "An HTTP NTLM authentication error occurred"; + break; + case SOAP_SSL_ERROR: +#if defined(WITH_OPENSSL) || defined(WITH_GNUTLS) || defined(WITH_WOLFSSL) || defined(WITH_SYSTEMSSL) + *s = "SSL/TLS error"; +#else + *s = "OpenSSL not installed: recompile with -DWITH_OPENSSL"; +#endif + break; + case SOAP_PLUGIN_ERROR: + *s = "Plugin registry error"; + break; + case SOAP_DIME_ERROR: + *s = "DIME format error or max DIME size exceeds SOAP_MAXDIMESIZE currently set to " SOAP_XSTRINGIFY(SOAP_MAXDIMESIZE); + break; + case SOAP_DIME_HREF: + *s = "DIME href to missing attachment"; + break; + case SOAP_DIME_MISMATCH: + *s = "DIME version/transmission error"; + break; + case SOAP_DIME_END: + *s = "End of DIME error"; + break; + case SOAP_MIME_ERROR: + *s = "MIME format error"; + break; + case SOAP_MIME_HREF: + *s = "MIME href to missing attachment"; + break; + case SOAP_MIME_END: + *s = "End of MIME error"; + break; + case SOAP_ZLIB_ERROR: +#ifdef WITH_ZLIB + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), (soap->d_stream && soap->d_stream->msg ? strlen(soap->d_stream->msg) : 0) + 19), "Zlib/gzip error: '%s'", soap->d_stream && soap->d_stream->msg ? soap->d_stream->msg : SOAP_STR_EOS); + *s = soap->msgbuf; +#else + *s = "Zlib/gzip not installed for (de)compression: recompile with -DWITH_GZIP"; +#endif + break; + case SOAP_REQUIRED: + *s = soap_set_validation_fault(soap, "missing required attribute", NULL); + break; + case SOAP_PROHIBITED: + *s = soap_set_validation_fault(soap, "prohibited attribute present", NULL); + break; + case SOAP_LEVEL: + *s = "Maximum XML nesting depth level exceeded: increase maxlevel"; + break; + case SOAP_LENGTH: + *s = soap_set_validation_fault(soap, "value range or content length violation", NULL); + break; + case SOAP_OCCURS: + *s = soap_set_validation_fault(soap, "occurrence constraint violation", NULL); + break; + case SOAP_FIXED: + *s = soap_set_validation_fault(soap, "value does not match the fixed value required", NULL); + break; + case SOAP_EMPTY: + *s = soap_set_validation_fault(soap, "empty value provided where a value is required", NULL); + break; + case SOAP_FD_EXCEEDED: + *s = "Maximum number of open connections was reached: increase FD_SETSIZE or define HAVE_POLL"; + break; + case SOAP_UTF_ERROR: + *s = "UTF content encoding error"; + break; + case SOAP_STOP: + *s = "Stopped: service request already handled by plugin (informative)"; + break; +#endif + case SOAP_EOF: +#ifndef WITH_NOIO + *s = soap_strerror(soap); /* *s = soap->msgbuf */ +#ifndef WITH_LEAN + if (strlen(soap->msgbuf) + 25 < sizeof(soap->msgbuf)) + { + (void)soap_memmove((void*)(soap->msgbuf + 25), sizeof(soap->tmpbuf) - 25, (const void*)soap->msgbuf, strlen(soap->msgbuf) + 1); + if (soap->is) +#if defined(__cplusplus) && !defined(WITH_COMPAT) + (void)soap_memcpy((void*)soap->msgbuf, sizeof(soap->msgbuf), (const void*)"End or bad std::istream: ", 25); +#else + (void)soap_memcpy((void*)soap->msgbuf, sizeof(soap->msgbuf), (const void*)"End at NUL buffer input: ", 25); +#endif + else + (void)soap_memcpy((void*)soap->msgbuf, sizeof(soap->msgbuf), (const void*)"End of file or no input: ", 25); + } +#endif + break; +#else + *s = "End of file or no input"; + break; +#endif + case SOAP_ERR: + *s = "An unspecified error occurred"; + break; + default: +#ifndef WITH_NOHTTP +#ifndef WITH_LEAN + if (soap->error >= 200 && soap->error < 600) + { + const char *t = http_error(soap, soap->error); + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), strlen(t) + 54), "Error %d: HTTP %d %s", soap->error, soap->error, t); + *s = soap->msgbuf; + } + else +#endif +#endif + { + (SOAP_SNPRINTF(soap->msgbuf, sizeof(soap->msgbuf), 26), "Error %d", soap->error); + *s = soap->msgbuf; + } + } +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_send_fault(struct soap *soap) +{ + int status = soap->error; + if (status == SOAP_OK || status == SOAP_STOP) + return soap_closesock(soap); +#ifndef WITH_NOHTTP + if (status >= 200 && status <= 299) + return soap_send_empty_response(soap, status); +#endif + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending back fault struct for error code %d\n", soap->error)); + soap->keep_alive = 0; /* error: close connection later by disabling keep-alive here */ + soap_set_fault(soap); + if (soap->error < 200 && soap->error != SOAP_FAULT) + soap->header = NULL; + if (status != SOAP_EOF || (!soap->recv_timeout && !soap->send_timeout)) + { + int r = 1; +#ifndef WITH_NOIO + if (soap->fpoll && soap->fpoll(soap)) + { + r = 0; + } +#ifndef WITH_LEAN + else if (soap_valid_socket(soap->socket)) + { + r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_SND, 0); + if (r > 0) + { + int t; + if (!(r & SOAP_TCP_SELECT_SND) + || ((r & SOAP_TCP_SELECT_RCV) + && recv(soap->socket, (char*)&t, 1, MSG_PEEK) < 0)) + r = 0; + } + } +#endif +#endif + if (r > 0) + { + soap->error = SOAP_OK; + if (soap->version > 0) + { + soap->encodingStyle = NULL; /* no encodingStyle in Faults */ + soap_serializeheader(soap); + soap_serializefault(soap); + (void)soap_begin_count(soap); + if ((soap->mode & SOAP_IO_LENGTH)) + { + if (soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_putfault(soap) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap)) + return soap_closesock(soap); + } + (void)soap_end_count(soap); + if (soap_response(soap, status) + || soap_envelope_begin_out(soap) + || soap_putheader(soap) + || soap_body_begin_out(soap) + || soap_putfault(soap) + || soap_body_end_out(soap) + || soap_envelope_end_out(soap) + || soap_end_send(soap)) + return soap_closesock(soap); + } + else + { + const char *s = *soap_faultstring(soap); + const char **d = soap_faultdetail(soap); + (void)soap_begin_count(soap); + if ((soap->mode & SOAP_IO_LENGTH)) + if (soap_element_begin_out(soap, "fault", 0, NULL) + || soap_outstring(soap, "reason", 0, (char*const*)&s, NULL, 0) + || (d && *d && soap_outliteral(soap, "detail", (char*const*)d, NULL)) + || soap_element_end_out(soap, "fault")) + return soap_closesock(soap); + (void)soap_end_count(soap); + if (soap_response(soap, status) + || soap_element_begin_out(soap, "fault", 0, NULL) + || soap_outstring(soap, "reason", 0, (char*const*)&s, NULL, 0) + || (d && *d && soap_outliteral(soap, "detail", (char*const*)d, NULL)) + || soap_element_end_out(soap, "fault") + || soap_end_send(soap)) + return soap_closesock(soap); + } + } + } + soap->error = status; + return soap_closesock(soap); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_recv_fault(struct soap *soap, int check) +{ + int status = soap->status; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Check (%d) if receiving SOAP Fault (status = %d)\n", check, status)); + if (!check) + { + /* try getfault when no tag or tag mismatched at level 2, otherwise close and return SOAP_TAG_MISMATCH or HTTP error code */ + if (soap->error != SOAP_NO_TAG && (soap->error != SOAP_TAG_MISMATCH || soap->level != 2)) + { + if (soap->error == SOAP_TAG_MISMATCH && soap->level == 0) + { + soap->error = SOAP_OK; + if (!soap_element_begin_in(soap, "fault", 0, NULL)) + { + char *s = NULL, *d = NULL; + (void)soap_instring(soap, "reason", &s, NULL, 0, 1, 0, -1, NULL); + (void)soap_inliteral(soap, "detail", &d); + if (!soap_element_end_in(soap, "fault") && !soap_end_recv(soap)) + { + *soap_faultstring(soap) = s; + if (d && *d) + *soap_faultdetail(soap) = d; + if (status) + soap->error = status; + else + soap->error = SOAP_FAULT; + soap_set_fault(soap); + return soap_closesock(soap); + } + } + soap->error = SOAP_TAG_MISMATCH; + } + if (status && (status < 200 || status > 299)) + soap->error = status; + return soap_closesock(soap); + } + } + soap->error = SOAP_OK; + if (soap_getfault(soap)) + { + /* if check>0 and no SOAP Fault is present and no HTTP error then just return to parse request */ + if (check + && (status == 0 || (status >= 200 && status <= 299)) + && ((soap->error == SOAP_TAG_MISMATCH && soap->level <= 2) || soap->error == SOAP_NO_TAG)) + return soap->error = SOAP_OK; + /* if check=0 and empty SOAP Body and encodingStyle is NULL and no HTTP error then just return */ + if (!check + && (status == 0 || (status >= 200 && status <= 299)) + && !soap->encodingStyle + && (soap->error == SOAP_NO_TAG && soap->level <= 2)) + return soap->error = SOAP_OK; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error: soap_get_soapfault() failed with error %d at level %u tag '%s'\n", soap->error, soap->level, soap->tag)); + *soap_faultcode(soap) = (soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client"); + if (status) + soap->error = status; + else + soap->error = status = SOAP_NO_DATA; + soap_set_fault(soap); + } + else + { + const char *s = *soap_faultcode(soap); + if (!soap_match_tag(soap, s, "SOAP-ENV:Server") + || !soap_match_tag(soap, s, "SOAP-ENV:Receiver")) + { + status = SOAP_SVR_FAULT; + } + else if (!soap_match_tag(soap, s, "SOAP-ENV:Client") + || !soap_match_tag(soap, s, "SOAP-ENV:Sender")) + { + status = SOAP_CLI_FAULT; + } + else if (!soap_match_tag(soap, s, "SOAP-ENV:MustUnderstand")) + { + status = SOAP_MUSTUNDERSTAND; + } + else if (!soap_match_tag(soap, s, "SOAP-ENV:VersionMismatch")) + { + status = SOAP_VERSIONMISMATCH; + } + else + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Received SOAP Fault code %s\n", s)); + status = SOAP_FAULT; + } + if (!soap_body_end_in(soap)) + soap_envelope_end_in(soap); + } + (void)soap_end_recv(soap); + soap->error = status; + return soap_closesock(soap); +} + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_send_empty_response(struct soap *soap, int httpstatuscode) +{ + soap_mode m = soap->omode; + if (!(m & SOAP_IO_UDP)) + { + soap->count = 0; + if ((m & SOAP_IO) == SOAP_IO_CHUNK) + soap->omode = (m & ~SOAP_IO) | SOAP_IO_BUFFER; + (void)soap_response(soap, httpstatuscode); + (void)soap_end_send(soap); /* force end of sends */ + soap->error = SOAP_STOP; /* stops the server from returning another response */ + soap->omode = m; + } + return soap_closesock(soap); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOHTTP +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_recv_empty_response(struct soap *soap) +{ + soap->error = SOAP_OK; + if (!(soap->omode & SOAP_IO_UDP) && !(soap->omode & SOAP_ENC_PLAIN)) + { + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Receiving empty response\n")); + if (soap_begin_recv(soap) == SOAP_OK) + { + if (soap_http_skip_body(soap) || soap_end_recv(soap)) + return soap_closesock(soap); + if (soap->status < SOAP_STOP) + soap->error = soap->status; + } + if (soap->error == 200 || soap->error == 201 || soap->error == 202 || soap->error == 204) + { + soap->error = SOAP_OK; + } + } +#ifndef WITH_LEANER + else if ((soap->fprepareinitrecv && (soap->error = soap->fprepareinitrecv(soap))) + || (soap->fpreparefinalrecv && (soap->error = soap->fpreparefinalrecv(soap)))) + { + return soap->error; + } +#endif + return soap_closesock(soap); +} +#endif + +/******************************************************************************/ + +#ifndef WITH_NOIO +static const char* +soap_strerror(struct soap *soap) +{ + int err = soap->errnum; + *soap->msgbuf = '\0'; + if (err) + { +#ifndef WIN32 +# ifdef HAVE_STRERROR_R +// # if !defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && ((!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600))) + err = strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* XSI-compliant */ + if (err != 0) + soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), "unknown error"); +// # else +// return strerror_r(err, soap->msgbuf, sizeof(soap->msgbuf)); /* GNU-specific */ +// # endif +# else + return strerror(err); +# endif +#else +#ifndef UNDER_CE + DWORD len; + *soap->msgbuf = '\0'; + len = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)soap->msgbuf, (DWORD)sizeof(soap->msgbuf), NULL); +#else + DWORD i, len; + *soap->msgbuf = '\0'; + len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, (LPTSTR)soap->msgbuf, (DWORD)(sizeof(soap->msgbuf)/sizeof(TCHAR)), NULL); + for (i = 0; i <= len; i++) + { + if (((TCHAR*)soap->msgbuf)[i] < 0x80) + soap->msgbuf[i] = (char)((TCHAR*)soap->msgbuf)[i]; + else + soap->msgbuf[i] = '?'; + } +#endif +#endif + } + else + { + if (soap->recv_maxlength && soap->count > soap->recv_maxlength) + { + soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), "max message length exceeded"); + } + else + { + int tt = soap->transfer_timeout, rt = soap->recv_timeout, st = soap->send_timeout; +#ifndef WITH_LEAN + int tu = ' ', ru = ' ', su = ' '; +#endif + soap_strcpy(soap->msgbuf, sizeof(soap->msgbuf), "message transfer interrupted"); + if (tt | rt || st) + soap_strcpy(soap->msgbuf + 28, sizeof(soap->msgbuf) - 28, " or timed out"); +#ifndef WITH_LEAN + if (tt < 0) + { + tt = -tt; + tu = 'u'; + } + if (rt < 0) + { + rt = -rt; + ru = 'u'; + } + if (st < 0) + { + st = -st; + su = 'u'; + } + if (tt) + { + size_t l = strlen(soap->msgbuf); + (SOAP_SNPRINTF(soap->msgbuf + l, sizeof(soap->msgbuf) - l, 43), " (%d%csec max transfer time)", tt, tu); + } + if (rt) + { + size_t l = strlen(soap->msgbuf); + (SOAP_SNPRINTF(soap->msgbuf + l, sizeof(soap->msgbuf) - l, 40), " (%d%csec max recv delay)", rt, ru); + } + if (st) + { + size_t l = strlen(soap->msgbuf); + (SOAP_SNPRINTF(soap->msgbuf + l, sizeof(soap->msgbuf) - l, 40), " (%d%csec max send delay)", st, su); + } +#endif + } + } + return soap->msgbuf; +} +#endif + +/******************************************************************************/ + +static int +soap_set_error(struct soap *soap, const char *faultcode, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML, int soaperror) +{ + *soap_faultcode(soap) = faultcode; + if (faultsubcodeQName) + *soap_faultsubcode(soap) = faultsubcodeQName; + *soap_faultstring(soap) = faultstring; + if (faultdetailXML && *faultdetailXML) + { + const char **s = soap_faultdetail(soap); + if (s) + *s = faultdetailXML; + } + return soap->error = soaperror; +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_sender_error(struct soap *soap, const char *faultstring, const char *faultdetailXML, int soaperror) +{ + return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Sender" : soap->version == 1 ? "SOAP-ENV:Client" : "at sender", NULL, faultstring, faultdetailXML, soaperror); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_set_receiver_error(struct soap *soap, const char *faultstring, const char *faultdetailXML, int soaperror) +{ + return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : soap->version == 1 ? "SOAP-ENV:Server" : "detected", NULL, faultstring, faultdetailXML, soaperror); +} + +/******************************************************************************/ + +static int +soap_copy_fault(struct soap *soap, const char *faultcode, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML) +{ + char *r = NULL, *s = NULL, *t = NULL; + DBGFUN2("soap_copy_fault", "code=%s", faultcode ? faultcode : "(null)", "string=%s", faultstring ? faultstring : "(null)") + if (faultsubcodeQName) + r = soap_strdup(soap, faultsubcodeQName); + if (faultstring) + s = soap_strdup(soap, faultstring); + if (faultdetailXML) + t = soap_strdup(soap, faultdetailXML); + return soap_set_error(soap, faultcode, r, s, t, SOAP_FAULT); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_sender_fault(struct soap *soap, const char *faultstring, const char *faultdetailXML) +{ + return soap_sender_fault_subcode(soap, NULL, faultstring, faultdetailXML); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_sender_fault_subcode(struct soap *soap, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML) +{ + return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Sender" : soap->version == 1 ? "SOAP-ENV:Client" : "at source", faultsubcodeQName, faultstring, faultdetailXML); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_receiver_fault(struct soap *soap, const char *faultstring, const char *faultdetailXML) +{ + return soap_receiver_fault_subcode(soap, NULL, faultstring, faultdetailXML); +} + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_receiver_fault_subcode(struct soap *soap, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML) +{ + return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : soap->version == 1 ? "SOAP-ENV:Server" : "is internal", faultsubcodeQName, faultstring, faultdetailXML); +} + +/******************************************************************************/ + +#ifndef WITH_NOSTDLIB +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_print_fault(struct soap *soap, FILE *fd) +{ + if (soap_check_state(soap)) + { + fprintf(fd, "Error: soap struct state not initialized\n"); + } + else if (soap->error) + { + const char **c, *v = NULL, *s, *d; + c = soap_faultcode(soap); + if (!*c) + { + soap_set_fault(soap); + c = soap_faultcode(soap); + } + if (soap->version == 2) + v = soap_fault_subcode(soap); + s = soap_fault_string(soap); + d = soap_fault_detail(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 + +/******************************************************************************/ + +#ifdef __cplusplus +#ifndef WITH_LEAN +#ifndef WITH_NOSTDLIB +#ifndef WITH_COMPAT +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_stream_fault(struct soap *soap, std::ostream& os) +{ + if (soap_check_state(soap)) + { + os << "Error: soap struct state not initialized\n"; + } + else if (soap->error) + { + const char **c, *v = NULL, *s, *d; + c = soap_faultcode(soap); + if (!*c) + { + soap_set_fault(soap); + c = soap_faultcode(soap); + } + if (soap->version == 2) + v = soap_fault_subcode(soap); + s = soap_fault_string(soap); + d = soap_fault_detail(soap); + os << (soap->version ? "SOAP 1." : "Error ") + << (soap->version ? (int)soap->version : soap->error) + << " fault " << *c + << "[" << (v ? v : "no subcode") << "]" + << std::endl + << "\"" << (s ? s : "[no reason]") << "\"" + << std::endl + << "Detail: " << (d ? d : "[no detail]") + << std::endl; + } +} +#endif +#endif +#endif +#endif + +/******************************************************************************/ + +#ifndef WITH_LEAN +#ifndef WITH_NOSTDLIB +SOAP_FMAC1 +char* +SOAP_FMAC2 +soap_sprint_fault(struct soap *soap, char *buf, size_t len) +{ + if (soap_check_state(soap)) + { + soap_strcpy(buf, len, "Error: soap struct not initialized"); + } + else if (soap->error) + { + const char **c, *v = NULL, *s, *d; + c = soap_faultcode(soap); + if (!*c) + { + soap_set_fault(soap); + c = soap_faultcode(soap); + } + if (soap->version == 2) + v = soap_fault_subcode(soap); + if (!v) + v = "no subcode"; + s = soap_fault_string(soap); + if (!s) + s = "[no reason]"; + d = soap_fault_detail(soap); + if (!d) + d = "[no detail]"; + (SOAP_SNPRINTF(buf, len, strlen(*c) + strlen(v) + strlen(s) + strlen(d) + 72), "%s%d fault %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, *c, v, s, d); + } + else if (len > 0) + { + *buf = '\0'; + } + return buf; +} +#endif +#endif + +/******************************************************************************/ + +#ifndef WITH_NOSTDLIB +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_print_fault_location(struct soap *soap, FILE *fd) +{ +#ifndef WITH_LEAN + int i, j, c1, c2; + if (soap_check_state(soap) == SOAP_OK && soap->error && soap->error != SOAP_STOP && soap->bufidx <= soap->buflen && soap->buflen > 0 && soap->buflen <= sizeof(soap->buf)) + { + i = (int)soap->bufidx - 1; + if (i <= 0) + i = 0; + c1 = soap->buf[i]; + soap->buf[i] = '\0'; + if ((int)soap->buflen >= i + 1024) + j = i + 1023; + else + j = (int)soap->buflen - 1; + c2 = soap->buf[j]; + soap->buf[j] = '\0'; + fprintf(fd, "%s%c\n\n", soap->buf, c1); + if (soap->bufidx < soap->buflen) + fprintf(fd, "%s\n", soap->buf + soap->bufidx); + soap->buf[i] = (char)c1; + soap->buf[j] = (char)c2; + } +#else + (void)soap; + (void)fd; +#endif +} +#endif + +/******************************************************************************/ + +#ifdef __cplusplus +#ifndef WITH_LEAN +#ifndef WITH_NOSTDLIB +#ifndef WITH_COMPAT +SOAP_FMAC1 +void +SOAP_FMAC2 +soap_stream_fault_location(struct soap *soap, std::ostream& os) +{ + int i, j, c1, c2; + if (soap_check_state(soap) == SOAP_OK && soap->error && soap->error != SOAP_STOP && soap->bufidx <= soap->buflen && soap->buflen > 0 && soap->buflen <= sizeof(soap->buf)) + { + i = (int)soap->bufidx - 1; + if (i <= 0) + i = 0; + c1 = soap->buf[i]; + soap->buf[i] = '\0'; + if ((int)soap->buflen >= i + 1024) + j = i + 1023; + else + j = (int)soap->buflen - 1; + c2 = soap->buf[j]; + soap->buf[j] = '\0'; + os << soap->buf << (char)c1 << std::endl << "" << std::endl; + if (soap->bufidx < soap->buflen) + os << soap->buf + soap->bufidx << std::endl; + soap->buf[i] = (char)c1; + soap->buf[j] = (char)c2; + } +} +#endif +#endif +#endif +#endif + +/******************************************************************************/ + +SOAP_FMAC1 +int +SOAP_FMAC2 +soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void *arg) +{ + struct soap_plugin *p; + int err; + p = (struct soap_plugin*)SOAP_MALLOC(soap, sizeof(struct soap_plugin)); + if (!p) + return soap->error = SOAP_EOM; + p->id = NULL; + p->data = NULL; + p->fcopy = NULL; + p->fdelete = NULL; + err = fcreate(soap, p, arg); + if (!err && p->fdelete && p->id) + { + if (!soap_lookup_plugin(soap, p->id)) + { + p->next = soap->plugins; + soap->plugins = p; + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Registered '%s' plugin\n", p->id)); + return SOAP_OK; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin with the same ID already registered\n", p->id)); + p->fdelete(soap, p); + SOAP_FREE(soap, p); + return SOAP_OK; + } + DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin returned error %d or plugin ID not set or fdelete callback not set\n", p->id ? p->id : "plugin ID not set", err)); + SOAP_FREE(soap, p); + soap->error = err ? err : SOAP_PLUGIN_ERROR; + return soap->error; +} + +/******************************************************************************/ + +static void * +fplugin(struct soap *soap, const char *id) +{ + struct soap_plugin *p; + for (p = soap->plugins; p; p = p->next) + if (p->id == id || !strcmp(p->id, id)) + return p->data; + return NULL; +} + +/******************************************************************************/ + +SOAP_FMAC1 +void * +SOAP_FMAC2 +soap_lookup_plugin(struct soap *soap, const char *id) +{ + return soap->fplugin(soap, id); +} + +/******************************************************************************/ + +#ifdef __cplusplus +} +#endif + +/******************************************************************************\ + * + * C++ soap struct methods + * +\******************************************************************************/ + +#ifdef __cplusplus +soap::soap() +{ + soap_init(this); + /* no logs to prevent DEBUG mode leaks when the user calls a soap_init() on this context */ + soap_set_test_logfile(this, NULL); + soap_set_sent_logfile(this, NULL); + soap_set_recv_logfile(this, NULL); +} +#endif + +/******************************************************************************/ + +#ifdef __cplusplus +soap::soap(soap_mode m) +{ + soap_init1(this, m); +} +#endif + +/******************************************************************************/ + +#ifdef __cplusplus +soap::soap(soap_mode im, soap_mode om) +{ + soap_init2(this, im, om); +} +#endif + +/******************************************************************************/ + +#ifdef __cplusplus +soap::soap(const struct soap& soap) +{ + soap_copy_context(this, &soap); +} +#endif + +/******************************************************************************/ + +#ifdef __cplusplus +struct soap& soap::operator=(const struct soap& soap) +{ + soap_done(this); + soap_copy_context(this, &soap); + return *this; +} +#endif + +/******************************************************************************/ + +#ifdef __cplusplus +void soap::destroy() +{ + soap_destroy(this); + soap_end(this); +} +#endif + +/******************************************************************************/ + +#ifdef __cplusplus +soap::~soap() +{ + soap_done(this); +} +#endif + +/******************************************************************************/ diff --git a/unit_test/test/onvif/onvif-discover/stdsoap2.h b/unit_test/test/onvif/onvif-discover/stdsoap2.h new file mode 100644 index 0000000..f8b89f7 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/stdsoap2.h @@ -0,0 +1,3729 @@ +/* + stdsoap2.h 2.8.125 + + gSOAP runtime engine + +gSOAP XML Web services tools +Copyright (C) 2000-2024, 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. +-------------------------------------------------------------------------------- +Contributors: + +Wind River Systems, Inc., for the following addition licensed under the gSOAP +public license: + - vxWorks compatible, enabled with compiler option -DVXWORKS +-------------------------------------------------------------------------------- +gSOAP public license. + +The contents of this file are subject to the gSOAP Public License Version 1.3 +(the "License"); you may not use this file except in compliance with the +License. You may obtain a copy of the License at +http://www.cs.fsu.edu/~engelen/soaplicense.html +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +for the specific language governing rights and limitations under the License. + +The Initial Developer of the Original Code is Robert A. van Engelen. +Copyright (C) 2000-2024, Robert van Engelen, Genivia Inc., All Rights Reserved. +-------------------------------------------------------------------------------- +GPL license. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +Author contact information: +engelen@genivia.com / engelen@acm.org + +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia, Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#define GSOAP_VERSION 208135 + +#ifdef WITH_SOAPDEFS_H +# include "soapdefs.h" /* include user-defined stuff in soapdefs.h */ +#endif + +#ifndef _THREAD_SAFE +# define _THREAD_SAFE +#endif + +#ifndef OPENSERVER +# ifndef _REENTRANT +# define _REENTRANT +# endif +#endif + +#ifdef _WIN32 +# ifndef WIN32 +# define WIN32 +# endif +#endif + +/* for legacy purposes we use WIN32 macro, even when WIN64 is supported */ +#ifdef _WIN64 +# ifndef WIN32 +# define WIN32 +# endif +#endif + +#ifdef WIN32 +# ifdef SOAP_STD_EXPORTS /* dllexport the API functions and classes */ +# ifndef SOAP_STD_API +# define SOAP_STD_API __declspec(dllexport) +# endif +# ifndef SOAP_CMAC +# define SOAP_CMAC SOAP_STD_API /* export soap struct and generated classes */ +# endif +# ifndef SOAP_FMAC1 +# define SOAP_FMAC1 SOAP_STD_API /* export stdsoap2.cpp API */ +# endif +# ifndef SOAP_FMAC3 +# define SOAP_FMAC3 SOAP_STD_API /* export soapC.cpp serializers API */ +# endif +# ifndef SOAP_FMAC5 +# define SOAP_FMAC5 SOAP_STD_API /* export soapClient.cpp and soapServer.cpp API */ +# endif +# endif +#endif + +#ifndef SOAP_FMAC1 /* stdsoap2.h declaration macro */ +# define SOAP_FMAC1 +#endif + +#ifndef SOAP_FMAC2 /* stdsoap2.h declaration macro */ +# define SOAP_FMAC2 +#endif + +#ifndef SOAP_FMAC3 /* (de)serializer declaration macro */ +# define SOAP_FMAC3 +#endif + +#ifndef SOAP_FMAC3S /* string converter for (de)serializer declaration macro */ +# define SOAP_FMAC3S SOAP_FMAC3 +#endif + +#ifndef SOAP_FMAC4 /* (de)serializer declaration macro */ +# define SOAP_FMAC4 +#endif + +#ifndef SOAP_FMAC4S /* string converter for (de)serializer declaration macro */ +# define SOAP_FMAC4S SOAP_FMAC4 +#endif + +#ifndef SOAP_FMAC5 /* stub/skeleton declaration macro */ +# define SOAP_FMAC5 +#endif + +#ifndef SOAP_FMAC6 /* stub/skeleton declaration macro */ +# define SOAP_FMAC6 +#endif + +#ifndef SOAP_CMAC /* class declaration macro */ +# define SOAP_CMAC +#endif + +#ifndef SOAP_NMAC /* namespace table declaration macro */ +# define SOAP_NMAC +#endif + +#ifndef SOAP_SOURCE_STAMP +# define SOAP_SOURCE_STAMP(str) +#endif + +#ifndef STDSOAP_H +#define STDSOAP_H + +#define SOAP_XSTRINGIFY(s) SOAP_STRINGIFY(s) +#define SOAP_STRINGIFY(s) #s + +#if defined(SOAPDEFS_H) && !defined(WITH_SOAPDEFS_H) +# include SOAP_XSTRINGIFY(SOAPDEFS_H) /* include user-defined "SOAPDEFS_H" */ +#endif + +#if defined(__vxworks) || defined(__VXWORKS__) +# ifndef VXWORKS +# define VXWORKS +# endif +#endif + +#ifdef _WIN32_WCE +# ifndef UNDER_CE +# define UNDER_CE _WIN32_WCE +# endif +#endif + +#ifdef UNDER_CE +# ifndef WIN32 +# define WIN32 +# endif +#endif + +#ifdef __BORLANDC__ +# ifdef __clang__ +# ifdef _WIN32 +# ifndef WIN32 +# define WIN32 +# endif +# endif +# else +# ifdef __WIN32__ +# ifndef WIN32 +# define WIN32 +# endif +# endif +# endif +#endif + +#if defined(__CYGWIN__) || defined(__CYGWIN32__) +# ifndef CYGWIN +# define CYGWIN +# endif +#endif + +#ifdef __SYMBIAN32__ +# define SYMBIAN +# undef WIN32 +#endif + +#if defined(__hpux) +# ifndef HP_UX +# define HP_UX +# endif +#endif + +#if defined(__digital__) && defined(__unix__) +# ifndef TRU64 +# define TRU64 +# endif +#endif + +#ifdef __MVS__ +# ifndef OS390 +# define OS390 +# endif +#endif + +#if defined(__sun) && defined(__SVR4) +# ifndef SUN_OS +# define SUN_OS +# endif +#endif + +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# if defined(UNDER_CE) +# define SOAP_BUFLEN (2048) +# define SOAP_PTRHASH (32) +# define SOAP_IDHASH (19) +# define SOAP_BLKLEN (32) +# define SOAP_TAGLEN (256) +# define SOAP_HDRLEN (1024) +# define SOAP_MAXDIMS (4) +# define HAVE_SSCANF +# elif defined(CYGWIN) +# define HAVE_POLL +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_SYS_TIMEB_H +# define HAVE_FTIME +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_STRERROR_R +# define HAVE_INTTYPES_H +# define HAVE_LOCALE_H +# define HAVE_SOCKLEN_T +# elif defined(WIN32) +# ifdef __BORLANDC__ +# ifdef __clang__ +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOD_L +# define HAVE_STRTOL +# define HAVE_SYS_TIMEB_H +# define HAVE_FTIME +# define HAVE_GMTIME +# define SOAP_LONG_FORMAT "%lld" +# define SOAP_ULONG_FORMAT "%llu" +# else +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOD_L +# define HAVE_STRTOL +# define HAVE_SYS_TIMEB_H +# define HAVE_FTIME +# define HAVE_GMTIME +# define SOAP_LONG_FORMAT "%I64d" +# define SOAP_ULONG_FORMAT "%I64u" +# endif +# else +# if _MSC_VER >= 1400 +# define HAVE_SNPRINTF +# endif +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOD_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 +# define SOAP_LONG_FORMAT "%I64d" +# define SOAP_ULONG_FORMAT "%I64u" +# define HAVE_LOCALE_H +# endif +# elif defined(__APPLE__) +# define HAVE_POLL +# define HAVE_SNPRINTF +# define HAVE_STRLCPY +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOD_L +# define HAVE_SSCANF_L +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_STRTOLL +# define HAVE_STRTOULL +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_TM_GMTOFF +# define HAVE_GETTIMEOFDAY +# define HAVE_LOCALTIME_R +# define HAVE_STRERROR_R +# define HAVE_TIMEGM +# define HAVE_INTTYPES_H +# define HAVE_LOCALE_H +# define HAVE_XLOCALE_H +# define HAVE_RANDOM +# define HAVE_SOCKLEN_T +# elif defined(_AIX41) +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_LOCALE_H +# elif defined(_AIX) +# 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_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_LOCALE_H +# define HAVE_SOCKLEN_T +# elif defined(HP_UX) +# include +# if 0 /* enable if __strtoll and __strtoull are available */ +extern intmax_t __strtoll(const char*, char**, int); +extern intmax_t __strtoull(const char*, char**, int); +# define strtoll __strtoll +# define strtoull __strtoull +# endif +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_STRTOLL +# define HAVE_STRTOULL +# define HAVE_SYS_TIMEB_H +# define HAVE_FTIME +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_ISNAN +# define HAVE_LOCALE_H +# elif defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) +# define HAVE_POLL +# define HAVE_SNPRINTF +# define HAVE_STRLCPY +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOD_L +# define HAVE_SSCANF_L +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_STRTOLL +# define HAVE_STRTOULL +# define HAVE_GETTIMEOFDAY +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_STRERROR_R +# define SOAP_LONG_FORMAT "%qd" +# define SOAP_ULONG_FORMAT "%qu" +# define HAVE_ISNAN +# define HAVE_ISINF +# define HAVE_INTTYPES_H +# define HAVE_LOCALE_H +# define HAVE_XLOCALE_H +# define HAVE_RANDOM +# define HAVE_SOCKLEN_T +# elif defined(__VMS) +# include +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_SYS_TIMEB_H +# define HAVE_FTIME +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# elif defined(TRU64) +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_GETTIMEOFDAY +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define __USE_STD_IOSTREAM +# define SOAP_LONG_FORMAT "%ld" +# define SOAP_ULONG_FORMAT "%lu" +# define HAVE_LOCALE_H +# elif defined(MAC_CARBON) +# define WITH_NOIO +# 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_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_STRERROR_R +# elif defined(SYMBIAN) +# define WITH_LEAN +# define WITH_NONAMESPACES +# define HAVE_STRTOD /* use STRTOD since sscanf doesn't seem to work */ +# include +# include +# elif defined(VXWORKS) +# ifdef _WRS_KERNEL +# define _POSIX_THREADS 1 +# endif +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_GMTIME +# define HAVE_LOCALTIME +# define HAVE_MKTIME +# elif defined(OS390) +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_SYS_TIMEB_H +# define HAVE_FTIME +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_SOCKLEN_T +# elif defined(AS400) +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_SYS_TIMEB_H +# define HAVE_FTIME +# define HAVE_RAND_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# elif defined(__QNX__) || defined(QNX) +/* QNX does not have a working version of strtof */ +# undef HAVE_STRTOF +# define HAVE_POLL +# define HAVE_SNPRINTF +# define HAVE_STRLCPY +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_STRTOLL +# define HAVE_STRTOULL +# define HAVE_GETTIMEOFDAY +# define HAVE_RAND_R +# define HAVE_GETHOSTBYNAME_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_STRERROR_R +# define HAVE_SOCKLEN_T +# 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_ASCTIME_R +# define HAVE_LOCALTIME_R +# elif defined(__GLIBC__) || defined(__GNU__) || defined(__GNUC__) +# define HAVE_POLL +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_STRTOLL +# define HAVE_STRTOULL +# define HAVE_GETTIMEOFDAY +# define HAVE_RAND_R +# define HAVE_GETHOSTBYNAME_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_STRERROR_R +# define HAVE_TIMEGM +# define HAVE_ISNAN +# define HAVE_ISINF +# if !defined(__GNUC__) || __GNUC__ >= 4 /* gcc 3 and earlier often refuse to compile _l functions */ +# define HAVE_STRTOD_L +# define HAVE_SSCANF_L +# define HAVE_LOCALE_H +# endif +# define HAVE_SOCKLEN_T +# else /* Default assumptions for supported library functions when not including config.h */ +# ifndef WITH_C_LOCALE +# ifndef WITH_NO_C_LOCALE +# define WITH_NO_C_LOCALE /* turn locale support off by default */ +# endif +# endif +# define HAVE_SNPRINTF +# define HAVE_STRRCHR +# define HAVE_STRTOD +# define HAVE_SSCANF +# define HAVE_STRTOL +# define HAVE_STRTOUL +# define HAVE_STRTOLL +# define HAVE_STRTOULL +# define HAVE_GETTIMEOFDAY +# define HAVE_RAND_R +# define HAVE_GETHOSTBYNAME_R +# define HAVE_GMTIME_R +# define HAVE_ASCTIME_R +# define HAVE_LOCALTIME_R +# define HAVE_STRERROR_R +# define HAVE_INTTYPES_H +# define HAVE_LOCALE_H +# endif +#endif + +#ifdef WITH_LEANER +# ifndef WITH_LEAN +# define WITH_LEAN +# endif +#endif + +/* gSOAP 2.7.15 and higher: always use FAST and retain CDATA in literal XML, unless WITH_LEAN or WITH_NOCDATA */ +#ifndef WITH_LEAN +# ifndef WITH_FAST +# define WITH_FAST +# endif +# ifndef WITH_NOCDATA +# ifndef WITH_CDATA +# define WITH_CDATA +# endif +# endif +#endif + +#if !defined(__cplusplus) +/* allowing empty struct/union in C is a GNU extension */ +# if !defined(__GNU__) && !defined(__GNUC__) +# define WITH_NOEMPTYSTRUCT +# endif +#endif + +/* silence clang's C99 variadic macro warnings */ +#ifdef __clang__ +# pragma clang diagnostic ignored "-Wvariadic-macros" +#endif + +#if defined(WITH_PURE_VIRTUAL) +# define SOAP_PURE_VIRTUAL = 0 +# define SOAP_PURE_VIRTUAL_COPY = 0 +#elif defined(WITH_DEFAULT_VIRTUAL) +# define SOAP_PURE_VIRTUAL { return SOAP_NO_METHOD; } +# define SOAP_PURE_VIRTUAL_COPY +#else +# define SOAP_PURE_VIRTUAL +# define SOAP_PURE_VIRTUAL_COPY +#endif + +/* older OpenVMS TCP/IP stacks cannot handle 65536 bytes */ +#ifdef __VMS +# ifndef SOAP_BUFLEN +# define SOAP_BUFLEN (65535) +# endif +#endif + +/* small buffer, to accelerate base64 and hex binary output */ +#ifndef SOAP_BINARY_BUFLEN +# define SOAP_BINARY_BUFLEN (128) +#endif + +/* if we have locale.h then we should use it WITH_C_LOCALE enabled to avoid decimal point conversion issues */ +#ifdef HAVE_LOCALE_H +# ifndef WITH_NO_C_LOCALE +# ifndef WITH_C_LOCALE +# define WITH_C_LOCALE +# endif +# endif +#endif + +/* MinGW does not support uselocale() and xlocale.h and gettimeofday() */ +#if defined(__MINGW32__) || defined(__MINGW64__) +# if !defined(WITH_NO_C_LOCALE) +# define WITH_NO_C_LOCALE +# endif +# undef HAVE_GETTIMEOFDAY +#endif + +/* user can set WITH_NO_C_LOCALE to force removal of locale (e.g. in case of compiler errors) */ +#ifdef WITH_NO_C_LOCALE +# undef WITH_C_LOCALE +#endif + +#ifndef WITH_NOSTDLIB +# include +# include +# include +# include +# if !defined(HAVE_CONFIG_H) || defined(HAVE_CTYPE_H) +# include +# endif +# if !defined(HAVE_CONFIG_H) || defined(HAVE_LIMITS_H) +# include /* for MB_LEN_MAX strtol strtoll strtoul strtoull */ +# endif +# if !defined(HAVE_CONFIG_H) || defined(HAVE_FLOAT_H) +# include /* for INFINITY */ +# endif +# if !defined(HAVE_CONFIG_H) || defined(HAVE_MATH_H) +# include /* for isnan() and isinf() */ +# endif +#endif + +/* force inclusion of xlocale.h when WITH_INCLUDE_XLOCALE_H is defined by the user for systems that require xlocale.h */ +#ifdef WITH_INCLUDE_XLOCALE_H +# ifndef HAVE_XLOCALE_H +# define HAVE_XLOCALE_H +# endif +#endif + +#ifdef WITH_C_LOCALE +# include +# if defined(WIN32) && !defined(CYGWIN) +# define SOAP_LOCALE_T _locale_t +# define SOAP_LOCALE(soap) ((soap)->c_locale ? (soap)->c_locale : ((soap)->c_locale = _create_locale(LC_ALL, "C"))) +# define SOAP_FREELOCALE(soap) (void)((soap)->c_locale && (_free_locale((soap)->c_locale), ((soap)->c_locale = NULL))) +# else +# if defined(HAVE_XLOCALE_H) +# include +# endif +# define SOAP_LOCALE_T locale_t +# define SOAP_LOCALE(soap) ((soap)->c_locale ? (soap)->c_locale : ((soap)->c_locale = newlocale(LC_ALL_MASK, "C", NULL))) +# define SOAP_FREELOCALE(soap) (void)((soap)->c_locale && (freelocale((soap)->c_locale), ((soap)->c_locale = NULL))) +# if defined(CYGWIN) +# undef HAVE_STRTOF_L /* Cygwin does not support strtof_l strtod_l */ +# undef HAVE_STRTOD_L +# endif +# endif +#else +# undef HAVE_STRTOF_L +# undef HAVE_STRTOD_L +# undef HAVE_SSCANF_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 unsigned long long +# define DBL_PINFTY (1.1579208923716189e77) +# undef HAVE_GMTIME_R +# undef HAVE_ASCTIME_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 + +#ifdef WITH_NTLM +# include +#endif + +#ifdef HAVE_POLL +# include +#endif + +#ifdef __cplusplus +# include +# include +# include +# ifndef WITH_COMPAT +# include +# include +# endif +#endif + +#ifdef WITH_NOHTTP +# ifndef WITH_NOIO +# define WITH_NOIO +# undef WITH_COOKIES +# endif +#endif + +/* Suggestion when SOAP_FD_EXCEEDED error occurs: + Some systems allow increasing FD_SETSIZE before including sys/types.h: +#define FD_SETSIZE (2048) +*/ + +#ifndef UNDER_CE +# ifndef WITH_NOIO +# include +# include +# endif +# ifndef WITH_LEAN +# ifdef HAVE_SYS_TIMEB_H +# ifdef HAVE_FTIME +# include /* for ftime() */ +# endif +# endif +# include +# endif +#endif + +#ifdef OPENSERVER +# include +# include +# include + extern int h_errno; +#endif + +#ifdef HAVE_GETTIMEOFDAY +# ifndef WIN32 +# ifdef VXWORKS +# ifdef _WRS_KERNEL +# include +# endif +# else +# include /* for timeval and gettimeofday() */ +# endif +# endif +#endif + +#ifndef WITH_NOIO +# ifndef WIN32 +# include +# ifdef VXWORKS +# include +# include +# ifndef _WRS_KERNEL +# include +# endif +# else +# ifndef SYMBIAN +# include +# endif +# endif +# ifdef SUN_OS +# include /* SUN */ +# include /* only needed with SUN < 2.8 ? */ +# endif +# ifdef VXWORKS +# ifdef _WRS_KERNEL +# include +# endif +# endif +# include +# ifdef OS390 +# include +# else +# include /* TCP_NODELAY, TCP_FASTOPEN */ +# endif +# include +# endif +#endif + +#ifdef WIN32 +# define SOAP_WINSOCKINT int +#else +# define SOAP_WINSOCKINT size_t +#endif + +#ifdef WIN32 +# undef WITH_SELF_PIPE +#endif + +#if defined(WITH_IPV6_V6ONLY) +# ifndef WITH_IPV6 +# define WITH_IPV6 +# endif +#endif + +#ifdef WIN32 +# ifndef UNDER_CE +# 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 +# define SOAP_GAI_STRERROR gai_strerrorA +# endif +#else +# ifdef VXWORKS +# include +# include +# include +# endif +# ifndef WITH_NOIO +# include +# include +# include +# include +# ifdef _AIX41 +# include +# endif +# endif +#endif + +#ifdef WITH_FASTCGI +# include +#endif + +#ifdef WITH_OPENSSL +# ifdef __VMS +# pragma names save +# pragma names uppercase +# endif +# undef WITH_GNUTLS +# define OPENSSL_NO_KRB5 +# include +# include +# include +# include +# include +# include +# include +# include +# ifndef ALLOW_OLD_VERSIONS +# if (OPENSSL_VERSION_NUMBER < 0x00905100L) +# error "Must use OpenSSL 0.9.6 or later" +# endif +# endif +# ifdef __VMS +# pragma names restore +# endif +#endif + +#ifdef WITH_GNUTLS +# include +# include +# if GNUTLS_VERSION_NUMBER < 0x020b00 +/* deprecated since GNUTLS 2.11.0 */ +# include +# endif +# ifndef HAVE_PTHREAD_H +# ifdef _POSIX_THREADS +# define HAVE_PTHREAD_H /* make GNUTLS thread safe */ +# endif +# endif +#endif + +#ifdef WITH_WOLFSSL +# include +#endif + +#ifdef WITH_SYSTEMSSL +# include +#endif + +#ifdef WITH_GZIP +# ifndef WITH_ZLIB +# define WITH_ZLIB +# endif +#endif + +#ifdef WITH_CASEINSENSITIVETAGS +# define SOAP_STRCMP soap_tag_cmp /* case insensitive XML element/attribute names */ +#else +# define SOAP_STRCMP strcmp /* case sensitive XML element/attribute names */ +#endif + +#ifdef WITH_ZLIB +# include +#endif + +/* #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 (X/Open, BSD sockets etc): define SOAP_SOCKLEN_T as socklen_t or int or ... */ +#if defined(HAVE_SOCKLEN_T) +# define SOAP_SOCKLEN_T socklen_t +#elif defined(_AIX) || defined(AIX) || defined(HP_UX) +# if defined(_AIX43) +# define SOAP_SOCKLEN_T socklen_t +# else +# define SOAP_SOCKLEN_T int +# endif +#elif defined(SOCKLEN_T) +# define SOAP_SOCKLEN_T SOCKLEN_T +#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(__ANDROID__) || !defined(_GNU_SOURCE) || (!(~_GNU_SOURCE+1) && !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)) || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 +# define SOAP_SOCKLEN_T socklen_t +#elif defined(IRIX) || defined(WIN32) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) +# define SOAP_SOCKLEN_T int +#elif !defined(SOAP_SOCKLEN_T) +# define SOAP_SOCKLEN_T socklen_t +#endif + +/* AIX DCE threads portability: define SOAP_FUNC_R_ERR gmtime_r and localtime_r err ret val as -1 */ +#ifdef _AIX32_THREADS +# define SOAP_FUNC_R_ERR (-1) +#elif !defined(SOAP_FUNC_R_ERR) +# define SOAP_FUNC_R_ERR (NULL) +#endif + +#ifndef SOAP_SOCKET +# ifdef WIN32 +# define SOAP_SOCKET SOCKET +# define soap_closesocket(n) closesocket(n) +# else +# define SOAP_SOCKET int +# define soap_closesocket(n) close(n) +# endif +#endif + +#define SOAP_INVALID_SOCKET ((SOAP_SOCKET)-1) +#define soap_valid_socket(sk) ((sk) != SOAP_INVALID_SOCKET) + +#define SOAP_SHUT_WR (1) +#define SOAP_SHUT_RDWR (2) + +#ifndef SOAP_GAI_STRERROR +# define SOAP_GAI_STRERROR gai_strerror +#endif + +#ifndef FD_SETSIZE +# 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) +# warning "Symbian build: removing 64 bit integer support" +# define LONG64 long +# define ULONG64 unsigned LONG64 +# ifndef SOAP_LONG_FORMAT +# define SOAP_LONG_FORMAT "%ld" +# endif +# ifndef SOAP_ULONG_FORMAT +# define SOAP_ULONG_FORMAT "%lu" +# endif +#elif !defined(WIN32) || defined(CYGWIN) || defined(__GLIBC__) || defined(__GNU__) || defined(__GNUC__) +# ifndef LONG64 +# if defined(HAVE_INTTYPES_H) +# include +# define LONG64 int64_t +# define ULONG64 uint64_t +# if defined(PRId64) && defined(PRIu64) +# ifndef SOAP_LONG_FORMAT +# define SOAP_LONG_FORMAT "%" PRId64 +# endif +# ifndef SOAP_ULONG_FORMAT +# define SOAP_ULONG_FORMAT "%" PRIu64 +# endif +# endif +# elif defined(HAVE_SYS_INTTYPES_H) +# include +# define LONG64 int64_t +# define ULONG64 uint64_t +# if defined(PRId64) && defined(PRIu64) +# ifndef SOAP_LONG_FORMAT +# define SOAP_LONG_FORMAT "%" PRId64 +# endif +# ifndef SOAP_ULONG_FORMAT +# define SOAP_ULONG_FORMAT "%" PRIu64 +# endif +# endif +# elif defined(HAVE_STDINT_H) +# include +# define LONG64 int64_t +# define ULONG64 uint64_t +# if defined(PRId64) && defined(PRIu64) +# ifndef SOAP_LONG_FORMAT +# define SOAP_LONG_FORMAT "%" PRId64 +# endif +# ifndef SOAP_ULONG_FORMAT +# define SOAP_ULONG_FORMAT "%" PRIu64 +# endif +# endif +# elif defined(CYGWIN) || defined(__GLIBC__) +# include +# if (__WORDSIZE == 64) +# define LONG64 int64_t +# define ULONG64 uint64_t +# ifndef SOAP_LONG_FORMAT +# define SOAP_LONG_FORMAT "%ld" +# endif +# ifndef SOAP_ULONG_FORMAT +# define SOAP_ULONG_FORMAT "%lu" +# endif +# else +# define LONG64 long long +# define ULONG64 unsigned LONG64 +# endif +# else +# define LONG64 long long +# define ULONG64 unsigned LONG64 +# endif +# endif +#elif defined(UNDER_CE) +# define LONG64 __int64 +# define ULONG64 unsigned LONG64 +#elif defined(__BORLANDC__) +# define LONG64 __int64 +# define ULONG64 unsigned LONG64 +#endif + +#ifndef SOAP_LONG_FORMAT +# define SOAP_LONG_FORMAT "%lld" /* printf format for 64 bit long long ints */ +#endif + +#ifndef SOAP_ULONG_FORMAT +# define SOAP_ULONG_FORMAT "%llu" /* printf format for unsigned 64 bit long long ints */ +#endif + +#if defined(WIN32) && !defined(CYGWIN) +# define soap_int32 __int32 +#elif defined(SYMBIAN) +# define soap_int32 long +#elif defined(_AIX) || defined(AIX) +# if defined(_AIX43) +# define soap_int32 int32_t +# else +# define soap_int32 signed int +# endif +#else +# define soap_int32 int32_t +#endif + +#ifdef WIN32 +# define SOAP_ERANGE ERANGE +# define SOAP_EINTR WSAEINTR +# define SOAP_EAGAIN WSAEWOULDBLOCK +# define SOAP_EWOULDBLOCK WSAEWOULDBLOCK +# define SOAP_EINPROGRESS WSAEINPROGRESS +# define SOAP_EADDRINUSE WSAEADDRINUSE +# define SOAP_ECONNREFUSED WSAECONNREFUSED +#else +# ifdef ERANGE +# define SOAP_ERANGE ERANGE +# else +# define SOAP_ERANGE (34) +# endif +# define SOAP_EINTR EINTR +# define SOAP_EAGAIN EAGAIN +# define SOAP_EADDRINUSE EADDRINUSE +# define SOAP_ECONNREFUSED ECONNREFUSED +# ifdef SYMBIAN +# define SOAP_EWOULDBLOCK 9898 +# define SOAP_EINPROGRESS 9899 +# else +# define SOAP_EWOULDBLOCK EWOULDBLOCK +# define SOAP_EINPROGRESS EINPROGRESS +# endif +#endif + +#ifdef WIN32 +# ifdef UNDER_CE +# define soap_errno GetLastError() +# define soap_socket_errno GetLastError() +# define soap_reset_errno SetLastError(0) +# else +# define soap_errno errno +# define soap_socket_errno WSAGetLastError() +# define soap_reset_errno _set_errno(0) +# endif +#else +# ifndef WITH_NOIO +# define soap_errno errno +# define soap_socket_errno errno +# define soap_reset_errno (errno = ENOENT) +# else +# define soap_errno 0 +# define soap_socket_errno 0 +# define soap_reset_errno +# endif +#endif + +#ifndef SOAP_BUFLEN +# if !defined(WITH_LEAN) +# define SOAP_BUFLEN (65536) /* buffer length for socket packets, so don't make this too small */ +# else +# define SOAP_BUFLEN (2048) /* lean size */ +# endif +#endif +#ifndef SOAP_LABLEN +# define SOAP_LABLEN (256) /* initial look-aside buffer length */ +#endif +#ifndef SOAP_PTRBLK +# define SOAP_PTRBLK (32) /* block allocation for pointer hash table chains */ +#endif +#ifndef SOAP_PTRHASH +# ifndef WITH_LEAN +# define SOAP_PTRHASH (4096) /* size of pointer analysis hash table (must be power of 2) */ +# else +# define SOAP_PTRHASH (32) +# endif +#endif +#ifndef SOAP_IDHASH +# ifndef WITH_LEAN +# define SOAP_IDHASH (1999) /* 1999, 8191: prime size of hash table for parsed id/ref */ +# else +# define SOAP_IDHASH (19) /* 19, 199: small prime */ +# endif +#endif +#ifndef SOAP_BLKLEN +# ifndef WITH_LEAN +# define SOAP_BLKLEN (256) /* to collect long strings and XML attributes */ +# else +# define SOAP_BLKLEN (32) +# endif +#endif +#ifndef SOAP_TAGLEN +# ifndef WITH_LEAN +# define SOAP_TAGLEN (1024) /* maximum length of XML element tag/attribute name or host/path name + 1 */ +# else +# define SOAP_TAGLEN (256) +# endif +#endif +#ifndef SOAP_HDRLEN +# ifndef WITH_LEAN +# define SOAP_HDRLEN (8192) /* maximum length of HTTP header line (must be >=4096 to read cookies) */ +# else +# define SOAP_HDRLEN (1024) +# endif +#endif +#ifndef SOAP_TMPLEN +# ifndef WITH_LEAN +# define SOAP_TMPLEN (2048) /* maximum length of msgbuf and tmpbuf short message buffers, must be >=1024 */ +# else +# define SOAP_TMPLEN (1024) +# endif +#endif +#ifndef SOAP_MAXDIMS +# ifndef WITH_LEAN +# define SOAP_MAXDIMS (16) /* maximum array dimensions (array nestings) must be less than 64 to protect soap->tmpbuf */ +# else +# define SOAP_MAXDIMS (4) +# endif +#endif +#ifndef SOAP_MAXPTRS +# ifndef WITH_LEAN +# define SOAP_MAXPTRS (4) /* maximum depth + 1 of id-ref deserialized pointer types (int* has depth 0, int*** has depth 2) */ +# else +# define SOAP_MAXPTRS (2) +# endif +#endif + +#ifndef SOAP_MAXALLOCSIZE +# define SOAP_MAXALLOCSIZE (0) /* max size that malloc() can handle, zero for no limit */ +#endif + +#ifndef SOAP_MAXLOGS +# define SOAP_MAXLOGS (3) /* max number of debug logs per struct soap environment */ +# define SOAP_INDEX_RECV (0) +# define SOAP_INDEX_SENT (1) +# define SOAP_INDEX_TEST (2) +#endif + +/* max HTTP chunk size is 2GB by default, can be larger but not to exceed size_t range max */ +#ifndef SOAP_MAXHTTPCHUNK +# define SOAP_MAXHTTPCHUNK (2147483647) +#endif + +/* Tag name of multiref elements in SOAP 1.1 encoding */ +#ifndef SOAP_MULTIREFTAG +# define SOAP_MULTIREFTAG "id" +#endif + +/* href-id value base name in multiref SOAP encoding */ +#ifndef SOAP_BASEREFNAME +# define SOAP_BASEREFNAME "_" +#endif + +/* Max number of EINTR interrupts to ignore while poll/select for pending activity on a socket */ +/* Each EINTR ignored may increase the I/O blocking time by at most one second */ +#ifndef SOAP_MAXEINTR +# define SOAP_MAXEINTR (10) +#endif + +/* SOAP_MAXKEEPALIVE: Max iterations in soap_serve() to keep server connection alive */ +#ifndef SOAP_MAXKEEPALIVE +# define SOAP_MAXKEEPALIVE (100) +#endif + +/* SOAP_MAXARRAYSIZE: Trusted total max size of an inbound SOAP Array. + Arrays of larger size are not pre-allocated, but deserialized + on an element-by-element basis until XML validation contrains kick in. + This macro only affects the efficiency of parsing SOAP arrays. +*/ +#ifndef SOAP_MAXARRAYSIZE +# define SOAP_MAXARRAYSIZE (100000) +#endif + +/* SOAP_MAXDIMESIZE: Trusted max size of inbound DIME data. + Increase if necessary to allow larger attachments, or decrease when server + resources are limited. This is to deny senders to allocate more than 8 MB + at the receiver without actually sending the whole message. +*/ +#ifndef SOAP_MAXDIMESIZE +# define SOAP_MAXDIMESIZE (8*1048576) /* 8 MB */ +#endif + +/* SOAP_MAXINFLATESIZE: Trusted inflated content size. + Larger content is subject to the SOAP_MINDEFLATERATIO constraint. + If SOAP_MINDEFLATERATIO is 1.0, SOAP_MAXINFLATESIZE is always the max + size of uncompressed content. +*/ +#ifndef SOAP_MAXINFLATESIZE +# define SOAP_MAXINFLATESIZE (1*1048576) /* 1 MB */ +#endif + +/* SOAP_MINDEFLATERATIO: Trusted deflation ratio after SOAP_MAXINFLATESIZE is reached. + Trust when compressed / deflated > SOAP_MINDEFLATERATIO + Sets a ratio > 0.00096899224806 (1032:1) + According to the zlib site: the limit (1032:1) comes from the fact that one + length/distance pair can represent at most 258 output bytes. A length + requires at least one bit and a distance requires at least one bit, so two + bits in can give 258 bytes out, or eight bits in give 1032 bytes out. A + dynamic block has no length restriction, so you could get arbitrarily close + to the limit of 1032:1. +*/ +#ifndef SOAP_MINDEFLATERATIO +# define SOAP_MINDEFLATERATIO (1.0/1032.0) /* ratio of deflated/inflated */ +#endif + +/* maximum XML nesting depth level allowed for inbound XML parsing, must be greater than zero (0) */ +#ifndef SOAP_MAXLEVEL +# define SOAP_MAXLEVEL (10000) +#endif + +/* maximum string content length if not already constrained by XML schema validation maxLength constraints, zero or negative means unlimited string lengths are allowed unless restricted by XML schema maxLength */ +#ifndef SOAP_MAXLENGTH +# define SOAP_MAXLENGTH (0) +#endif + +/* maximum number of array or container elements, must be greater than zero (0) */ +#ifndef SOAP_MAXOCCURS +# define SOAP_MAXOCCURS (100000) +#endif + +#ifdef VXWORKS +# ifdef WMW_RPM_IO +# include "httpLib.h" +# endif +# ifdef __INCmathh +# include +# ifndef HAVE_ISNAN +# define HAVE_ISNAN +# endif +# ifndef soap_isnan +# define soap_isnan(num) isNan(num) +# endif +# endif +# ifdef WM_SECURE_KEY_STORAGE +# include +# endif +#endif + +#ifdef WIN32 +# ifndef HAVE_ISNAN +# define HAVE_ISNAN +# endif +# define soap_isnan(n) _isnan(n) +# ifndef HAVE_ISINF +# define HAVE_ISINF +# endif +# define soap_isinf(n) (!_finite(n)) +#endif + +#ifdef SUN_OS +# ifndef HAVE_ISNAN +# define HAVE_ISNAN +# endif +#endif + +#ifdef __APPLE__ +# 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 + +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 +# define FLT_MAX _ARCH_FLT_MAX +# endif +# ifndef DBL_MAX +# define DBL_MAX _ARCH_DBL_MAX +# endif +#endif + +#ifndef FLT_NAN +# define FLT_NAN (soap_double_nan.fv) +#endif + +#ifndef FLT_PINFTY +# if defined(INFINITY) +# define FLT_PINFTY INFINITY +# elif defined(FLT_MAX) +# define FLT_PINFTY FLT_MAX +# elif defined(HUGE_VALF) +# define FLT_PINFTY (float)HUGE_VALF +# elif defined(HUGE_VAL) +# define FLT_PINFTY (float)HUGE_VAL +# elif defined(FLOAT_MAX) +# define FLT_PINFTY FLOAT_MAX +# else +# define FLT_PINFTY (3.40282347e+38F) +# endif +#endif + +#ifndef FLT_NINFTY +# define FLT_NINFTY (-FLT_PINFTY) +#endif + +#ifndef DBL_NAN +# define DBL_NAN (soap_double_nan.dv) +#endif + +#ifndef DBL_PINFTY +# if defined(INFINITY) +# define DBL_PINFTY INFINITY +# elif defined(DBL_MAX) +# define DBL_PINFTY DBL_MAX +# elif defined(HUGE_VALF) +# define DBL_PINFTY (double)HUGE_VALF +# elif defined(HUGE_VAL) +# define DBL_PINFTY (double)HUGE_VAL +# elif defined(DOUBLE_MAX) +# define DBL_PINFTY DOUBLE_MAX +# else +# define DBL_PINFTY (1.7976931348623157e+308) +# endif +#endif + +#ifndef DBL_NINFTY +# define DBL_NINFTY (-DBL_PINFTY) +#endif + +#ifndef soap_isnan +# ifdef HAVE_ISNAN +# define soap_isnan(n) isnan(n) +# else +# define soap_isnan(n) ((n) != (n)) +# endif +#endif + +#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 + +#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)) + +/* Safer str & mem functions */ + +/* The gSOAP code uses guards to ensure that these functions are well behaved + and do not raise errors. Therefore, the WIN _s functions should never + execute the "invalid parameter handler". +*/ + +/* use safer snprintf if possible or guard sprintf against overrun (assumes no variadic macros) */ +# ifdef HAVE_SNPRINTF +# if _MSC_VER >= 1400 +# define SOAP_SNPRINTF(buf, len, num) void)_snprintf_s((buf), (len), _TRUNCATE +# define SOAP_SNPRINTF_SAFE(buf, len) void)_snprintf_s((buf), (len), _TRUNCATE +# else +# define SOAP_SNPRINTF(buf, len, num) void)snprintf((buf), (len) +# define SOAP_SNPRINTF_SAFE(buf, len) void)snprintf((buf), (len) +# endif +# else +# define SOAP_SNPRINTF(buf, len, num) (len) <= (num)) ? (void)((buf)[0] = '\0') : (void)sprintf((buf) +# define SOAP_SNPRINTF_SAFE(buf, len) void)sprintf((buf) +# endif + +/* copy string (truncating the result, strings must not be NULL) */ +#if _MSC_VER >= 1400 +# define soap_strcpy(buf, len, src) (void)strncpy_s((buf), (len), (src), _TRUNCATE) +#elif defined(HAVE_STRLCPY) +# define soap_strcpy(buf, len, src) (void)strlcpy((buf), (src), (len)) +#else +# define soap_strcpy(buf, len, src) (void)(strncpy((buf), (src), (len)), (buf)[(len) - 1] = '\0') +#endif + +/* concat string (truncating the result, strings must not be NULL) */ +#if _MSC_VER >= 1400 +# define soap_strcat(buf, len, src) (void)strncat_s((buf), (len), (src), _TRUNCATE) +#elif defined(HAVE_STRLCAT) +# define soap_strcat(buf, len, src) (void)strlcat((buf), (src), (len)) +#else +SOAP_FMAC1 void SOAP_FMAC2 soap_strcat(char *buf, size_t len, const char *src); +#endif + +/* copy string up to num chars (sets string to empty on overrun and returns nonzero, zero if OK) */ +#if _MSC_VER >= 1400 +# define soap_strncpy(buf, len, src, num) ((buf) == NULL || ((size_t)(len) > (size_t)(num) ? strncpy_s((buf), (len), (src), (num)) : ((buf)[0] = '\0', 1))) +#else +# define soap_strncpy(buf, len, src, num) ((buf) == NULL || ((size_t)(len) > (size_t)(num) ? (strncpy((buf), (src), (num)), (buf)[(size_t)(num)] = '\0') : ((buf)[0] = '\0', 1))) +#endif + +/* concat string up to n chars (leaves destination intact on overrun and returns nonzero, zero if OK) */ +#if _MSC_VER >= 1400 +# define soap_strncat(buf, len, src, num) ((buf) == NULL || ((size_t)(len) > strlen((buf)) + (size_t)(num) ? strncat_s((buf), (len), (src), (num)) : 1)) +#else +SOAP_FMAC1 int SOAP_FMAC2 soap_strncat(char *buf, size_t len, const char *src, size_t num); +#endif + +/* copy memory (returns SOAP_ERANGE on overrun, zero if OK, pointers must not be NULL) */ +#if _MSC_VER >= 1400 +# define soap_memcpy(buf, len, src, num) ((size_t)(len) >= (size_t)(num) ? memcpy_s((buf), (len), (src), (num)) : SOAP_ERANGE) +#else +# define soap_memcpy(buf, len, src, num) ((size_t)(len) >= (size_t)(num) ? !memcpy((buf), (src), (num)) : SOAP_ERANGE) +#endif + +/* move memory (returns SOAP_ERANGE on overrun, zero if OK, pointers must not be NULL) */ +#if _MSC_VER >= 1400 +# define soap_memmove(buf, len, src, num) ((size_t)(len) >= (size_t)(num) ? memmove_s((buf), (len), (src), (num)) : SOAP_ERANGE) +#else +# define soap_memmove(buf, len, src, num) ((size_t)(len) >= (size_t)(num) ? !memmove((buf), (src), (num)) : SOAP_ERANGE) +#endif + +/* gSOAP status and error codes */ + +typedef soap_int32 soap_status; + +#define SOAP_EOF EOF +#define SOAP_OK 0 +#define SOAP_CLI_FAULT 1 +#define SOAP_SVR_FAULT 2 +#define SOAP_TAG_MISMATCH 3 +#define SOAP_TYPE 4 +#define SOAP_SYNTAX_ERROR 5 +#define SOAP_NO_TAG 6 +#define SOAP_IOB 7 +#define SOAP_MUSTUNDERSTAND 8 +#define SOAP_NAMESPACE 9 +#define SOAP_USER_ERROR 10 +#define SOAP_FATAL_ERROR 11 /* deprecated */ +#define SOAP_FAULT 12 +#define SOAP_NO_METHOD 13 +#define SOAP_NO_DATA 14 +#define SOAP_GET_METHOD 15 +#define SOAP_PUT_METHOD 16 +#define SOAP_PATCH_METHOD 17 +#define SOAP_DEL_METHOD 18 +#define SOAP_HTTP_METHOD 19 +#define SOAP_EOM 20 +#define SOAP_MOE 21 +#define SOAP_HDR 22 +#define SOAP_NULL 23 +#define SOAP_DUPLICATE_ID 24 +#define SOAP_MISSING_ID 25 +#define SOAP_HREF 26 +#define SOAP_UDP_ERROR 27 +#define SOAP_TCP_ERROR 28 +#define SOAP_HTTP_ERROR 29 +#define SOAP_SSL_ERROR 30 +#define SOAP_ZLIB_ERROR 31 +#define SOAP_DIME_ERROR 32 +#define SOAP_DIME_HREF 33 +#define SOAP_DIME_MISMATCH 34 +#define SOAP_DIME_END 35 +#define SOAP_MIME_ERROR 36 +#define SOAP_MIME_HREF 37 +#define SOAP_MIME_END 38 +#define SOAP_VERSIONMISMATCH 39 +#define SOAP_PLUGIN_ERROR 40 +#define SOAP_DATAENCODINGUNKNOWN 41 /* unused */ +#define SOAP_REQUIRED 42 +#define SOAP_PROHIBITED 43 +#define SOAP_OCCURS 44 +#define SOAP_LENGTH 45 +#define SOAP_PATTERN 46 +#define SOAP_FD_EXCEEDED 47 +#define SOAP_UTF_ERROR 48 +#define SOAP_NTLM_ERROR 49 +#define SOAP_LEVEL 50 +#define SOAP_FIXED 51 +#define SOAP_EMPTY 52 +#define SOAP_END_TAG 53 +#define SOAP_ERR 99 + +#define soap_xml_error_check(e) \ + ((e) == SOAP_TAG_MISMATCH || \ + (e) == SOAP_NO_TAG || \ + (e) == SOAP_IOB || \ + (e) == SOAP_SYNTAX_ERROR || \ + (e) == SOAP_NAMESPACE || \ + (e) == SOAP_TYPE || \ + (e) == SOAP_DUPLICATE_ID || \ + (e) == SOAP_MISSING_ID || \ + (e) == SOAP_REQUIRED || \ + (e) == SOAP_PROHIBITED || \ + (e) == SOAP_OCCURS || \ + (e) == SOAP_LENGTH || \ + (e) == SOAP_LEVEL || \ + (e) == SOAP_PATTERN || \ + (e) == SOAP_NULL || \ + (e) == SOAP_HREF || \ + (e) == SOAP_FIXED || \ + (e) == SOAP_EMPTY || \ + (e) == SOAP_END_TAG || \ + (e) == SOAP_UTF_ERROR) + +#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 || \ + (e) == SOAP_DATAENCODINGUNKNOWN) + +#define soap_http_error_check(e) \ + ((e) == SOAP_HTTP_ERROR || \ + (e) == SOAP_NO_DATA || \ + ((e) >= SOAP_GET_METHOD && (e) <= SOAP_HTTP_METHOD) || \ + ((e) >= 100 && (e) < 600)) + +#define soap_dime_error_check(e) \ + ((e) == SOAP_DIME_ERROR || \ + (e) == SOAP_DIME_HREF || \ + (e) == SOAP_DIME_MISMATCH || \ + (e) == SOAP_DIME_END) + +#define soap_mime_error_check(e) \ + ((e) == SOAP_MIME_ERROR || \ + (e) == SOAP_MIME_HREF || \ + (e) == SOAP_MIME_END) + +#define soap_tcp_error_check(e) \ + ((e) == SOAP_EOF || \ + (e) == SOAP_TCP_ERROR) + +#define soap_udp_error_check(e) \ + ((e) == SOAP_EOF || \ + (e) == SOAP_UDP_ERROR) + +#define soap_ssl_error_check(e) ((e) == SOAP_SSL_ERROR) + +#define soap_zlib_error_check(e) ((e) == SOAP_ZLIB_ERROR) + +/* gSOAP HTTP response status codes 100 to 599 are reserved */ + +/* Codes 600 to 999 are user definable */ + +/* Exceptional gSOAP HTTP server response status codes >= 1000 */ + +#define SOAP_STOP 1000 /* No HTTP response should follow after SOAP_STOP is issued */ +#define SOAP_FORM 1001 /* Request (form) data is present, no HTTP response should follow */ +#define SOAP_HTML 1002 /* Custom HTML response */ +#define SOAP_FILE 1200 /* Custom file-based response with soap::http_content and optional http status */ + +/* gSOAP HTTP method codes (client) */ + +typedef int soap_http_command; + +#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_PATCH 2004 /* PATCH request */ +#define SOAP_DEL 2005 /* DELETE request */ +#define SOAP_HEAD 2006 /* HEAD request */ +#define SOAP_OPTIONS 2007 /* OPTIONS request */ +#define SOAP_CONNECT 2008 /* CONNECT request */ + +/* gSOAP DIME */ + +#define SOAP_DIME_CF 0x01 +#define SOAP_DIME_ME 0x02 +#define SOAP_DIME_MB 0x04 +#define SOAP_DIME_VERSION 0x08 /* DIME version 1 */ +#define SOAP_DIME_MEDIA 0x10 +#define SOAP_DIME_ABSURI 0x20 + +/* gSOAP ZLIB */ + +#define SOAP_ZLIB_NONE 0x00 +#define SOAP_ZLIB_DEFLATE 0x01 +#define SOAP_ZLIB_INFLATE 0x02 +#define SOAP_ZLIB_GZIP 0x02 + +/* gSOAP transport, connection, and content encoding modes */ + +typedef soap_int32 soap_mode; + +#define SOAP_IO 0x00000003 /* IO mask */ +#define SOAP_IO_FLUSH 0x00000000 /* out: flush output immediately, no buffering */ +#define SOAP_IO_BUFFER 0x00000001 /* out: buffer output in packets of size SOAP_BUFLEN */ +#define SOAP_IO_STORE 0x00000002 /* out: store entire output to determine length for transport */ +#define SOAP_IO_CHUNK 0x00000003 /* out: use HTTP chunked transfer AND buffer packets */ + +#define SOAP_IO_UDP 0x00000004 /* in/out: enable UDP instead of TCP */ +#define SOAP_IO_LENGTH 0x00000008 /* out: calc message length (internal) */ +#define SOAP_IO_KEEPALIVE 0x00000010 /* out: keep connection alive */ + +#define SOAP_ENC 0x00000FFF /* IO and ENC mask */ +#define SOAP_ENC_LATIN 0x00000020 /* in: accept iso-8859-1 */ +#define SOAP_ENC_PLAIN 0x00000040 /* out: plain (XML or other) body, no HTTP header, in: skip HTTP header (use soap::length) */ +#define SOAP_ENC_XML 0x00000040 /* deprecated, alias for SOAP_ENC_PLAIN */ +#define SOAP_ENC_DIME 0x00000080 +#define SOAP_ENC_MIME 0x00000100 +#define SOAP_ENC_MTOM 0x00000200 +#define SOAP_ENC_ZLIB 0x00000400 +#define SOAP_ENC_SSL 0x00000800 + +#define SOAP_XML_STRICT 0x00001000 /* in: strict validation */ +#define SOAP_XML_INDENT 0x00002000 /* out: emit indented XML */ +#define SOAP_XML_IGNORENS 0x00004000 /* in: ignore namespaces */ +#define SOAP_XML_DEFAULTNS 0x00008000 /* out: emit xmlns="..." */ +#define SOAP_XML_CANONICAL 0x00010000 /* out: exc-C14N exclusive canonical XML */ +#define SOAP_XML_TREE 0x00020000 /* in/out: XML tree (no id/ref) */ +#define SOAP_XML_NIL 0x00040000 /* out: all NULLs as xsi:nil */ +#define SOAP_XML_NOTYPE 0x00080000 /* out: do not add xsi:type */ + +#define SOAP_DOM_TREE 0x00100000 /* see DOM manual */ +#define SOAP_DOM_NODE 0x00200000 +#define SOAP_DOM_ASIS 0x00400000 + +#define SOAP_XML_CANONICAL_NA 0x00800000 /* out: (exc) C14N not QName aware */ + +#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_XML_DOM 0x10000000 /* enable internal DOM */ +#define SOAP_XML_GRAPH 0x20000000 /* force id-ref XML graph */ + +#define SOAP_MIME_POSTCHECK 0x40000000 /* MIME flag (internal) */ + +#define SOAP_SEC_WSUID 0x80000000 /* Add Body wsu:Id flag (internal) */ + +/* WITH_XMLNS backward compatibility: always use XML default namespaces */ +#ifdef WITH_XMLNS +# define SOAP_IO_DEFAULT (SOAP_IO_FLUSH | SOAP_XML_DEFAULTNS) +#else +# define SOAP_IO_DEFAULT SOAP_IO_FLUSH +#endif + +/* SSL client/server authentication settings */ + +#define SOAP_SSL_NO_AUTHENTICATION (0x0000) /* no authentication */ +#define SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION (0x0001) /* client requires server to authenticate */ +#define SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION (0x0002) /* server requires client to authenticate */ +#define SOAP_SSL_SKIP_HOST_CHECK (0x0004) /* client skips common name check against host name */ +#define SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE (0x0008) /* allow self-signed and expired certificates and those w/o CRL */ +#define SOAP_SSL_NO_DEFAULT_CA_PATH (0x0010) /* don't use SSL_CTX_set_default_verify_paths */ +#define SOAP_SSL_RSA (0x0020) /* use RSA */ +#define SOAP_SSL_SNI_HOST_CHECK (0x0040) /* client SNI only with a valid hostname, reject IP */ +#define SOAP_SSLv3 (0x0080) /* enable SSL v3 */ +#define SOAP_TLSv1_0 (0x0100) /* enable TLS v1.0 */ +#define SOAP_TLSv1_1 (0x0200) /* enable TLS v1.1 */ +#define SOAP_TLSv1_2 (0x0400) /* enable TLS v1.2 */ +#define SOAP_TLSv1_3 (0x0800) /* enable TLS v1.3 */ +#define SOAP_TLSv1 (SOAP_TLSv1_0 | SOAP_TLSv1_1 | SOAP_TLSv1_2 | SOAP_TLSv1_3) +#define SOAP_SSLv3_TLSv1 (SOAP_SSLv3 | SOAP_TLSv1) + +#define SOAP_SSL_CLIENT (0x8000) /* client context flag for internal use */ + +#define SOAP_SSL_DEFAULT SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION + +typedef unsigned short soap_ssl_flags; + +/* state */ + +#define SOAP_NONE 0 +#define SOAP_INIT 1 +#define SOAP_COPY 2 + +#define soap_check_state(soap) (!(soap) || ((soap)->state != SOAP_INIT && (soap)->state != SOAP_COPY)) + +/* parts */ + +#define SOAP_END 0 +#define SOAP_BEGIN_SEND 1 +#define SOAP_BEGIN_RECV 2 +#define SOAP_IN_ENVELOPE 3 +#define SOAP_IN_HEADER 4 +#define SOAP_END_HEADER 5 +#define SOAP_NO_BODY 6 +#define SOAP_IN_BODY 7 +#define SOAP_END_BODY 8 +#define SOAP_END_ENVELOPE 9 + +/* events */ + +#define SOAP_SEC_BEGIN 1 +#define SOAP_SEC_SIGN 2 +#define SOAP_SEC_DECRYPT 3 + +/* DEBUG macros */ + +#ifdef DEBUG_STAMP +# ifndef DEBUG +# define DEBUG +# endif +#endif + +#ifdef DEBUG +# ifndef SOAP_DEBUG +# define SOAP_DEBUG +# endif +# ifndef SOAP_MEM_DEBUG +# define SOAP_MEM_DEBUG +# endif +#endif + +#ifdef SOAP_MEM_DEBUG +# ifndef SOAP_MALLOC +# define SOAP_MALLOC(soap, size) soap_track_malloc((soap), __FILE__, __LINE__, (size)) +# endif +# ifndef SOAP_FREE +# define SOAP_FREE(soap, ptr) soap_track_free((soap), __FILE__, __LINE__, (void*)(ptr)) +# endif +#endif + +#ifndef SOAP_MALLOC /* use libc malloc */ +# define SOAP_MALLOC(soap, size) malloc((size)) +#endif + +#ifndef SOAP_FREE /* use libc free */ +# define SOAP_FREE(soap, ptr) free((void*)(ptr)) +#endif + +#ifndef SOAP_MALLOC_UNMANAGED /* use libc malloc to alloc soap context with soap_new() */ +# define SOAP_MALLOC_UNMANAGED(size) malloc((size)) +#endif + +#ifndef SOAP_FREE_UNMANAGED /* use libc free to free soap context with soap_free() */ +# define SOAP_FREE_UNMANAGED(ptr) free((void*)(ptr)) +#endif + +#ifndef SOAP_NOTHROW +# if defined(__GNUC__) && (__GNUC__ <= 2) +# define SOAP_NOTHROW +# elif defined(WITH_LEAN) || defined(WITH_COMPAT) +# define SOAP_NOTHROW +# else +# define SOAP_NOTHROW (std::nothrow) +# endif +#endif + +#if defined(__BORLANDC__) && !defined(__clang__) +/* Embarcadero Classic compiler special case */ +# ifndef SOAP_NEW +# define SOAP_NEW(soap, type) new SOAP_NOTHROW (type) +# endif +# ifndef SOAP_NEW_ARRAY +# define SOAP_NEW_ARRAY(soap, type, n) new SOAP_NOTHROW (type[n]) +# endif +# ifndef SOAP_PLACEMENT_NEW +# define SOAP_PLACEMENT_NEW(soap, buf, type) new (buf) (type) +# endif +#elif (defined(__GNUC__) && (__GNUC__ <= 2)) || defined(__clang__) || defined(_AIX) || defined(AIX) +/* old form w/o parenthesis, soap context may be NULL */ +# ifndef SOAP_NEW +# define SOAP_NEW(soap, type) new SOAP_NOTHROW type +# endif +# ifndef SOAP_NEW_ARRAY +# define SOAP_NEW_ARRAY(soap, type, n) new SOAP_NOTHROW type[n] +# endif +# ifndef SOAP_PLACEMENT_NEW +# define SOAP_PLACEMENT_NEW(soap, buf, type) new (buf) type +# endif +#else +/* new form with parenthesis for (type) but not type[n], soap context may be NULL */ +# ifndef SOAP_NEW +# define SOAP_NEW(soap, type) new SOAP_NOTHROW (type) +# endif +# ifndef SOAP_NEW_ARRAY +# define SOAP_NEW_ARRAY(soap, type, n) new SOAP_NOTHROW type[n] +# endif +# ifndef SOAP_PLACEMENT_NEW +# define SOAP_PLACEMENT_NEW(soap, buf, type) new (buf) (type) +# endif +#endif + +#ifndef SOAP_DELETE /* use C++ delete operator, soap context may be NULL */ +# define SOAP_DELETE(soap, obj, type) delete obj +#endif + +#ifndef SOAP_DELETE_ARRAY /* use C++ delete[] operator, soap context may be NULL */ +# define SOAP_DELETE_ARRAY(soap, obj, type) delete[] obj +#endif + +#ifndef SOAP_NEW_UNMANAGED /* use C++ unmanaged new operator for soap_new() and soap::copy() */ +# define SOAP_NEW_UNMANAGED(soap) new SOAP_NOTHROW soap +#endif + +#ifndef SOAP_DELETE_UNMANAGED /* use C++ unmanaged delete operator for soap_free() */ +# define SOAP_DELETE_UNMANAGED(soap) delete soap +#endif + +#ifdef SOAP_DEBUG +# ifndef SOAP_MESSAGE +# define SOAP_MESSAGE fprintf +# endif +# ifndef DBGLOG +# 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|", (int)_localTime.wYear%100, (int)_localTime.wMonth, (int)_localTime.wDay, (int)_localTime.wHour, (int)_localTime.wMinute, (int)_localTime.wSecond, (int)_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.%06ld|", (int)_tm.tm_year%100, (int)_tm.tm_mon+1, (int)_tm.tm_mday, (int)_tm.tm_hour, (int)_tm.tm_min, (int)_tm.tm_sec, (long)_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);\ + if (soap->fdebug[SOAP_INDEX_##DBGFILE])\ + { FILE *fdebug = soap->fdebug[SOAP_INDEX_##DBGFILE];\ + CMD;\ + fflush(fdebug);\ + }\ + }\ +} +# endif +# endif +# ifndef DBGMSG +# define DBGMSG(DBGFILE, MSG, LEN) \ +{ if (soap)\ + { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\ + soap_open_logfile((struct soap*)soap, SOAP_INDEX_##DBGFILE);\ + if (soap->fdebug[SOAP_INDEX_##DBGFILE])\ + { fwrite((void*)(MSG), 1, (size_t)(LEN), soap->fdebug[SOAP_INDEX_##DBGFILE]);\ + fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\ + }\ + }\ +} +# endif +# ifndef DBGFUN +# define DBGFUN(FNAME) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s()\n", __FILE__, __LINE__, FNAME)) +# define DBGFUN1(FNAME, FMT, ARG) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s(" FMT ")\n", __FILE__, __LINE__, FNAME, (ARG))) +# define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s(" FMT1 ", " FMT2 ")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2))) +# define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s(" FMT1 ", " FMT2 ", " FMT3 ")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2), (ARG3))) +# define DBGFUN4(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3, FMT4, ARG4) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s(" FMT1 ", " FMT2 ", " FMT3 ", " FMT4 ")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2), (ARG3), (ARG4))) +# endif +# ifndef DBGHEX +# define DBGHEX(DBGFILE, MSG, LEN) \ +{ if (soap)\ + { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\ + soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\ + if (soap->fdebug[SOAP_INDEX_##DBGFILE])\ + { int i; char *s;\ + for (s = (char*)(MSG), i = (LEN); i; i--)\ + fprintf(soap->fdebug[SOAP_INDEX_##DBGFILE], "%2.2X ", (int)*s++&0xFF);\ + fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\ + }\ + }\ +} +# endif +#else +# define DBGLOG(DBGFILE, CMD) +# define DBGMSG(DBGFILE, MSG, LEN) +# define DBGFUN(FNAME) +# define DBGFUN1(FNAME, FMT, ARG) +# define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2) +# define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3) +# define DBGFUN4(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3, FMT4, ARG4) +# define DBGHEX(DBGFILE, MSG, LEN) +#endif + +/* UCS-4 requires 32 bits (0-7FFFFFFF, the sign bit is used by gSOAP to distinguish XML entities) */ +typedef soap_int32 soap_wchar; + +/* forward declaration */ +struct SOAP_CMAC soap; + +/* namespace table row */ +struct SOAP_CMAC Namespace +{ + const char *id; + const char *ns; + const char *in; + char *out; +}; + +/* namespace stack */ +struct soap_nlist +{ + struct soap_nlist *next; + unsigned int level; /* nesting depth level */ + short index; /* corresponding entry in ns mapping table */ + const char *ns; /* only set when parsed ns URI is not in the ns mapping table */ + char id[1]; /* the actual string value flows into the allocated region id[0...] below this struct */ +}; + +/* block header, the data flows into the allocated region below this struct */ +struct soap_bhead +{ + struct soap_bhead *next; + size_t size; +}; + +/* block stack for nested block allocations */ +struct soap_blist +{ + struct soap_blist *next; + struct soap_bhead *head; + size_t size; + size_t item; +}; + +/* pointer serialization management */ +struct soap_plist +{ + struct soap_plist *next; + const void *ptr; + void *dup; + const void *array; /* array pointer */ + int size; /* array size */ + int type; + int id; + char mark1; /* 0=single-ref, 1=embedded-multi-ref (SOAP1.1), 2=multi-ref, 3=attachment */ + char mark2; +}; + +/* block allocation for pointer serialization management */ +struct soap_pblk +{ + struct soap_pblk *next; + struct soap_plist plist[SOAP_PTRBLK]; +}; + +#ifdef SOAP_MEM_DEBUG +/* malloc/free tracking for debugging */ +struct soap_mlist +{ + struct soap_mlist *next; + const void *ptr; + const char *file; + int line; + short live; +}; +#endif + +/* class allocation list */ +struct soap_clist +{ + struct soap_clist *next; + void *ptr; + int type; + int size; /* array size */ + int (*fdelete)(struct soap*, struct soap_clist*); +}; + +/* attributes */ +struct soap_attribute +{ + struct soap_attribute *next; + short flag; /* soap_set_attr: 1 = normal, 2 = utf content */ + char *value; + size_t size; + const char *ns; + short visible; + char name[1]; /* the actual name string flows into the allocated region below this struct */ +}; + +#if !defined(WITH_LEAN) || defined(WITH_COOKIES) +struct soap_cookie +{ + struct soap_cookie *next; + char *name; + char *value; + char *domain; + char *path; + ULONG64 expire; /* client-side: local time to expire (value cast to time_t) */ + long maxage; /* server-side: seconds to expire */ + unsigned int version; + short secure; + short session; /* server-side */ + short env; /* server-side: got cookie from client and should not be (re)send */ + short modified; /* server-side: client cookie was modified and should be send */ +}; +#endif + +SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*); + +#ifdef __cplusplus +class soap_multipart_iterator +{ + public: + typedef ptrdiff_t difference_type; + typedef soap_multipart value_type; + typedef soap_multipart& reference; + typedef soap_multipart* pointer; + typedef std::forward_iterator_tag iterator_category; + struct soap_multipart *content; + soap_multipart_iterator() : content(NULL) { } + soap_multipart_iterator(struct soap_multipart *p) : content(p) { } + bool operator==(const soap_multipart_iterator& iter) const { return (bool)(content == iter.content); } + bool operator!=(const soap_multipart_iterator& iter) const { return (bool)(content != iter.content); } + struct soap_multipart& operator*() const { return *content; } + struct soap_multipart *operator->() const { return content; } + soap_multipart_iterator& operator++() { content = soap_next_multipart(content); return *this; } + soap_multipart_iterator operator++(int) { soap_multipart_iterator iter(*this); content = soap_next_multipart(content); return iter; } +}; +#endif + +#ifndef WITH_LEANER +struct soap_dime +{ + size_t count; + size_t size; + size_t chunksize; + size_t buflen; + char flags; + char *ptr; + const char *id; + const char *type; + const char *options; + struct soap_multipart *list; /* list of DIME attachments received */ + struct soap_multipart *first, *last; /* temporary in/out queue */ +#ifdef __cplusplus + typedef soap_multipart_iterator iterator; + typedef soap_multipart_iterator const_iterator; + const_iterator cbegin() const { soap_multipart_iterator iter(list); return iter; } + const_iterator cend() const { soap_multipart_iterator iter(NULL); return iter; } + iterator begin() { soap_multipart_iterator iter(list); return iter; } + iterator end() { soap_multipart_iterator iter(NULL); return iter; } +#endif +}; +#endif + +#ifndef WITH_LEANER +struct soap_mime +{ + char *boundary; /* MIME boundary */ + const char *start; /* MIME start ID */ + struct soap_multipart *list; /* list of MIME attachments received */ + struct soap_multipart *first, *last; /* temporary in/out queue */ +#ifdef __cplusplus + typedef soap_multipart_iterator iterator; + typedef soap_multipart_iterator const_iterator; + const_iterator cbegin() const { soap_multipart_iterator iter(list); return iter; } + const_iterator cend() const { soap_multipart_iterator iter(NULL); return iter; } + iterator begin() { soap_multipart_iterator iter(list); return iter; } + iterator end() { soap_multipart_iterator iter(NULL); return iter; } +#endif +}; +#endif + +#ifndef WITH_LEANER +/* RFC2045 MIME content transfer encodings */ +enum soap_mime_encoding +{ + SOAP_MIME_NONE, + SOAP_MIME_7BIT, + SOAP_MIME_8BIT, + SOAP_MIME_BINARY, + SOAP_MIME_QUOTED_PRINTABLE, + SOAP_MIME_BASE64, + SOAP_MIME_IETF_TOKEN, + SOAP_MIME_X_TOKEN +}; +#endif + +#ifndef WITH_LEANER +/* DIME/MIME multipart list */ +struct soap_multipart +{ + struct soap_multipart *next; + const char *ptr; /* points to raw data content */ + size_t size; /* size of data content */ + const char *id; /* DIME/MIME content ID or form data name */ + const char *type; /* DIME/MIME type (MIME type format) */ + const char *options; /* DIME options */ + enum soap_mime_encoding encoding; /* MIME Content-Transfer-Encoding */ + const char *location; /* MIME Content-Location (optional) */ + const char *description; /* MIME Content-Description (optional) */ +#ifdef __cplusplus + typedef soap_multipart_iterator iterator; + typedef soap_multipart_iterator const_iterator; +#endif +}; +#endif + +#ifndef WITH_LEANER +/* attachment DIME and MTOM XOP forwarding */ +struct soap_xlist +{ + struct soap_xlist *next; + unsigned char **ptr; + int *size; + char *id; + char **type; + char **options; +}; +#endif + +/******************************************************************************/ + +#ifndef WITH_LEANER + +/* dom.c[pp] functions (optional, compile and link dom.c[pp] */ +struct SOAP_CMAC soap_dom_element; +struct SOAP_CMAC soap_dom_attribute; + +/* soap_dom_element construction */ + +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_new(struct soap *soap, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_new_w(struct soap *soap, const char *ns, const wchar_t *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_set(struct soap_dom_element *elt, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_set_w(struct soap_dom_element *elt, const char *ns, const wchar_t *tag); + +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att(struct soap_dom_element *elt, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_w(struct soap_dom_element *elt, const char *ns, const wchar_t *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt(struct soap_dom_element *elt, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_w(struct soap_dom_element *elt, const char *ns, const wchar_t *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_nth_elt(struct soap_dom_element *elt, const char *ns, const char *tag, size_t n); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_nth_elt_w(struct soap_dom_element *elt, const char *ns, const wchar_t *tag, size_t n); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_nth(struct soap_dom_element *elt, size_t n); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_add_att(struct soap_dom_element *elt, const struct soap_dom_attribute *node); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_add_elt(struct soap_dom_element *elt, const struct soap_dom_element *node); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_add_atts(struct soap_dom_element *elt, const struct soap_dom_attribute *atts); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_add_elts(struct soap_dom_element *elt, const struct soap_dom_element *elts); + +/* soap_dom_element assignment */ + +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_bool(struct soap_dom_element *elt, LONG64 b); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_int(struct soap_dom_element *elt, LONG64 n); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_double(struct soap_dom_element *elt, double x); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_text(struct soap_dom_element *elt, const char *text); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_text_w(struct soap_dom_element *elt, const wchar_t *text); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_node(struct soap_dom_element *elt, const void *node, int type); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_copy(struct soap_dom_element *elt, const struct soap_dom_element *node); + +/* soap_dom_element properties */ + +SOAP_FMAC1 int SOAP_FMAC2 soap_elt_match(const struct soap_dom_element *elt, const char *ns, const char *patt); +SOAP_FMAC1 int SOAP_FMAC2 soap_elt_match_w(const struct soap_dom_element *elt, const char *ns, const wchar_t *patt); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_elt_get_ns(const struct soap_dom_element *elt); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_elt_get_tag(const struct soap_dom_element *elt); +SOAP_FMAC1 int SOAP_FMAC2 soap_elt_is_true(const struct soap_dom_element *elt); +SOAP_FMAC1 int SOAP_FMAC2 soap_elt_is_false(const struct soap_dom_element *elt); +SOAP_FMAC1 int SOAP_FMAC2 soap_elt_get_int(const struct soap_dom_element *elt); +SOAP_FMAC1 long SOAP_FMAC2 soap_elt_get_long(const struct soap_dom_element *elt); +SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_elt_get_LONG64(const struct soap_dom_element *elt); +SOAP_FMAC1 double SOAP_FMAC2 soap_elt_get_double(const struct soap_dom_element *elt); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_elt_get_text(const struct soap_dom_element *elt); +SOAP_FMAC1 const void * SOAP_FMAC2 soap_elt_get_node(const struct soap_dom_element *elt, int type); +SOAP_FMAC1 int SOAP_FMAC2 soap_elt_get_type(const struct soap_dom_element *elt, const void **node); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_parent(const struct soap_dom_element *elt); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_depth(const struct soap_dom_element *elt); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_index(const struct soap_dom_element *elt); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_len(const struct soap_dom_element *elt); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_nth(const struct soap_dom_element *elt); + +/* soap_dom_attribute construction */ + +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_new(struct soap *soap, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_new_w(struct soap *soap, const char *ns, const wchar_t *tag); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_set(struct soap_dom_attribute *att, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_set_w(struct soap_dom_attribute *att, const char *ns, const wchar_t *tag); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_add(struct soap_dom_attribute *att, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_add_w(struct soap_dom_attribute *att, const char *ns, const wchar_t *tag); + +/* soap_dom_attribute assignment */ + +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_bool(struct soap_dom_attribute *att, LONG64 b); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_int(struct soap_dom_attribute *att, LONG64 n); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_double(struct soap_dom_attribute *att, double x); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_text(struct soap_dom_attribute *att, const char *text); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_text_w(struct soap_dom_attribute *att, const wchar_t *text); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_copy(struct soap_dom_attribute *att, const struct soap_dom_attribute *node); + +/* soap_dom_attribute properties */ + +SOAP_FMAC1 int SOAP_FMAC2 soap_att_match(const struct soap_dom_attribute *att, const char *ns, const char *patt); +SOAP_FMAC1 int SOAP_FMAC2 soap_att_match_w(const struct soap_dom_attribute *att, const char *ns, const wchar_t *patt); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_att_get_ns(const struct soap_dom_attribute *att); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_att_get_tag(const struct soap_dom_attribute *att); +SOAP_FMAC1 int SOAP_FMAC2 soap_att_is_true(const struct soap_dom_attribute *att); +SOAP_FMAC1 int SOAP_FMAC2 soap_att_is_false(const struct soap_dom_attribute *att); +SOAP_FMAC1 int SOAP_FMAC2 soap_att_get_int(const struct soap_dom_attribute *att); +SOAP_FMAC1 long SOAP_FMAC2 soap_att_get_long(const struct soap_dom_attribute *att); +SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_att_get_LONG64(const struct soap_dom_attribute *att); +SOAP_FMAC1 double SOAP_FMAC2 soap_att_get_double(const struct soap_dom_attribute *att); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_att_get_text(const struct soap_dom_attribute *att); + +/* DOM local traversal */ + +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_first(struct soap_dom_element *elt); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_next(const struct soap_dom_attribute *att); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_first(struct soap_dom_element *elt); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_next(const struct soap_dom_element *elt); + +/* DOM local retrieval */ + +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_get(const struct soap_dom_element *elt, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_get_w(const struct soap_dom_element *elt, const char *ns, const wchar_t *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_get(const struct soap_dom_element *elt, const char *ns, const char *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_get_w(const struct soap_dom_element *elt, const char *ns, const wchar_t *tag); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_get_next(const struct soap_dom_element *elt); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_get_nth(struct soap_dom_element *elt, size_t n); + +/* DOM local search */ + +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_find(struct soap_dom_element *elt, const char *ns, const char *patt); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_att_find_next(const struct soap_dom_attribute *att, const char *ns, const char *patt); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_find(struct soap_dom_element *elt, const char *ns, const char *patt); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_find_next(const struct soap_dom_element *elt, const char *ns, const char *patt); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_find_type(struct soap_dom_element *elt, const char *ns, const char *patt, int type); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_elt_find_next_type(const struct soap_dom_element *elt, const char *ns, const char *patt, int type); + +/* DOM size of local search results */ + +SOAP_FMAC1 size_t SOAP_FMAC2 soap_att_size(struct soap_dom_element *elt, const char *ns, const char *patt); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_size(struct soap_dom_element *elt, const char *ns, const char *patt); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_elt_size_type(struct soap_dom_element *elt, const char *ns, const char *patt, int type); + +/* DOM deep traversal */ + +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_dom_next_attribute(const struct soap_dom_attribute *att); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_dom_next_element(const struct soap_dom_element *elt, const struct soap_dom_element *end); + +/* DOM deep search */ + +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_dom_find(struct soap_dom_element *begin, const struct soap_dom_element *end, const char *ns, const char *patt, int type); +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_dom_find_next(const struct soap_dom_element *elt, const struct soap_dom_element *end, const char *ns, const char *patt, int type); + +#endif + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#ifndef WITH_LEANER +#ifdef __cplusplus +class SOAP_CMAC soap_dom_attribute_iterator +{ + public: + typedef ptrdiff_t difference_type; + typedef soap_dom_attribute value_type; + typedef soap_dom_attribute& reference; + typedef soap_dom_attribute* pointer; + typedef std::forward_iterator_tag iterator_category; + struct soap_dom_attribute *iter; + const char *nstr; + const char *name; + bool operator==(const soap_dom_attribute_iterator&) const; + bool operator!=(const soap_dom_attribute_iterator&) const; + struct soap_dom_attribute& operator*() const; + struct soap_dom_attribute *operator->() const; + soap_dom_attribute_iterator& operator++(); + soap_dom_attribute_iterator operator++(int); + soap_dom_attribute_iterator(); + soap_dom_attribute_iterator(struct soap_dom_attribute*); + ~soap_dom_attribute_iterator(); +}; +#endif +#endif + +#ifndef WITH_LEANER +struct SOAP_CMAC soap_dom_attribute +{ + struct soap_dom_attribute *next; + const char *nstr; + const char *name; + const char *text; + struct soap *soap; +#ifdef __cplusplus + typedef soap_dom_attribute_iterator iterator; + typedef soap_dom_attribute_iterator const_iterator; + soap_dom_attribute(struct soap *soap = NULL); + soap_dom_attribute(const soap_dom_attribute& att); + soap_dom_attribute(struct soap *soap, const char *tag); + soap_dom_attribute(struct soap *soap, const wchar_t *tag); + soap_dom_attribute(struct soap *soap, const char *ns, const char *tag, const char *str); + soap_dom_attribute(struct soap *soap, const char *ns, const char *tag, const wchar_t *str); + soap_dom_attribute(struct soap *soap, const char *ns, const wchar_t *tag, const char *str); + soap_dom_attribute(struct soap *soap, const char *ns, const wchar_t *tag, const wchar_t *str); +#ifndef WITH_COMPAT + soap_dom_attribute(struct soap *soap, const char *ns, const char *tag, const std::string& str); + soap_dom_attribute(struct soap *soap, const char *ns, const char *tag, const std::wstring& str); + soap_dom_attribute(struct soap *soap, const char *ns, const wchar_t *tag, const std::string& str); + soap_dom_attribute(struct soap *soap, const char *ns, const wchar_t *tag, const std::wstring& str); +#endif + ~soap_dom_attribute(); + soap_dom_attribute& set(const char *ns, const char *tag) { return *soap_att_set(this, ns, tag); } + soap_dom_attribute& set(const char *ns, const wchar_t *tag) { return *soap_att_set_w(this, ns, tag); } + soap_dom_attribute& set(bool b) { return *soap_att_bool(this, b); } + soap_dom_attribute& set(int n) { return *soap_att_int(this, n); } + soap_dom_attribute& set(LONG64 n) { return *soap_att_int(this, n); } + soap_dom_attribute& set(float x) { return *soap_att_double(this, x); } + soap_dom_attribute& set(double x) { return *soap_att_double(this, x); } + soap_dom_attribute& set(const char *str) { return *soap_att_text(this, str); } + soap_dom_attribute& set(const wchar_t *str) { return *soap_att_text_w(this, str); } +#ifndef WITH_COMPAT + soap_dom_attribute& set(const std::string& str) { return *soap_att_text(this, str.c_str()); } + soap_dom_attribute& set(const std::wstring& str) { return *soap_att_text_w(this, str.c_str()); } +#endif + soap_dom_attribute& operator=(bool b) { return *soap_att_bool(this, b); } + soap_dom_attribute& operator=(int n) { return *soap_att_int(this, n); } + soap_dom_attribute& operator=(LONG64 n) { return *soap_att_int(this, n); } + soap_dom_attribute& operator=(float x) { return *soap_att_double(this, x); } + soap_dom_attribute& operator=(double x) { return *soap_att_double(this, x); } + soap_dom_attribute& operator=(const char *str) { return *soap_att_text(this, str); } + soap_dom_attribute& operator=(const wchar_t *str) { return *soap_att_text_w(this, str); } +#ifndef WITH_COMPAT + soap_dom_attribute& operator=(const std::string& str) { return *soap_att_text(this, str.c_str()); } + soap_dom_attribute& operator=(const std::wstring& str) { return *soap_att_text_w(this, str.c_str()); } +#endif + soap_dom_attribute& operator=(const soap_dom_attribute& att) { return *soap_att_copy(this, &att); } + soap_dom_attribute& att(const char *tag) { return *soap_att_add(this, NULL, tag); } + soap_dom_attribute& att(const wchar_t *tag) { return *soap_att_add_w(this, NULL, tag); } + soap_dom_attribute& att(const char *ns, const char *tag) { return *soap_att_add(this, ns, tag); } + soap_dom_attribute& att(const char *ns, const wchar_t *tag) { return *soap_att_add_w(this, ns, tag); } + bool match(const char *patt) const { return soap_att_match(this, NULL, patt) != 0; } + bool match(const wchar_t *patt) const { return soap_att_match_w(this, NULL, patt) != 0; } + bool match(const char *ns, const char *patt) const { return soap_att_match(this, ns, patt) != 0; } + bool match(const char *ns, const wchar_t *patt) const { return soap_att_match_w(this, ns, patt) != 0; } + const char *ns() const { return this->nstr; } + const char *tag() const { return this->name; } + bool is_true() const { return soap_att_is_true(this) != 0; } + bool is_false() const { return soap_att_is_false(this) != 0; } + LONG64 get_int() const { return soap_att_get_LONG64(this); } + double get_double() const { return soap_att_get_double(this); } + const char *get_text() const { return this->text; } + operator bool() const { return soap_att_is_true(this) != 0; } + operator int() const { return soap_att_get_int(this); } + operator LONG64() const { return soap_att_get_LONG64(this); } + operator double() const { return soap_att_get_double(this); } + operator const char*() const { return this->text; } + const_iterator cbegin() { return this->att_begin(); } + const_iterator cend() { return this->att_end(); } + iterator begin() { return this->att_begin(); } + iterator end() { return this->att_end(); } + iterator att_begin() { return soap_dom_attribute_iterator(this); } + iterator att_end() { return soap_dom_attribute_iterator(NULL); } + iterator att_find(const char *patt) { return att_find(NULL, patt); } + iterator att_find(const wchar_t *patt) { return att_find(NULL, patt); } + iterator att_find(const char *ns, const char *patt); + iterator att_find(const char *ns, const wchar_t *patt); + void unlink(); +#endif +}; +#endif + +#ifndef WITH_LEANER +#ifdef __cplusplus +class SOAP_CMAC soap_dom_element_iterator +{ + public: + typedef ptrdiff_t difference_type; + typedef soap_dom_element value_type; + typedef soap_dom_element& reference; + typedef soap_dom_element* pointer; + typedef std::forward_iterator_tag iterator_category; + struct soap_dom_element *iter; + struct soap_dom_element *stop; + const char *nstr; + const char *name; + int type; + bool deep; + bool operator==(const soap_dom_element_iterator&) const; + bool operator!=(const soap_dom_element_iterator&) const; + struct soap_dom_element& operator*() const; + struct soap_dom_element *operator->() const; + soap_dom_element_iterator& operator++(); + soap_dom_element_iterator operator++(int); + soap_dom_element_iterator(); + soap_dom_element_iterator(struct soap_dom_element*); + ~soap_dom_element_iterator(); +}; +#endif +#endif + +#ifndef WITH_LEANER +struct SOAP_CMAC soap_dom_element +{ + struct soap_dom_element *next; + struct soap_dom_element *prnt; + struct soap_dom_element *elts; + struct soap_dom_attribute *atts; + const char *nstr; + const char *name; + const char *lead; + const char *text; + const char *code; + const char *tail; + const void *node; + int type; + struct soap *soap; +#ifdef __cplusplus + typedef soap_dom_element_iterator iterator; + typedef soap_dom_element_iterator const_iterator; + soap_dom_element(struct soap *soap = NULL); + soap_dom_element(const soap_dom_element& elt); + soap_dom_element(struct soap *soap, const char *tag); + soap_dom_element(struct soap *soap, const wchar_t *tag); + soap_dom_element(struct soap *soap, const char *ns, const char *tag); + soap_dom_element(struct soap *soap, const char *ns, const wchar_t *tag); + soap_dom_element(struct soap *soap, const char *ns, const char *tag, const char *str); + soap_dom_element(struct soap *soap, const char *ns, const char *tag, const wchar_t *str); + soap_dom_element(struct soap *soap, const char *ns, const wchar_t *tag, const char *str); + soap_dom_element(struct soap *soap, const char *ns, const wchar_t *tag, const wchar_t *str); +#ifndef WITH_COMPAT + soap_dom_element(struct soap *soap, const char *ns, const char *tag, const std::string& str); + soap_dom_element(struct soap *soap, const char *ns, const char *tag, const std::wstring& str); + soap_dom_element(struct soap *soap, const char *ns, const wchar_t *tag, const std::string& str); + soap_dom_element(struct soap *soap, const char *ns, const wchar_t *tag, const std::wstring& str); +#endif + soap_dom_element(struct soap *soap, const char *ns, const char *tag, const void *nod, int typ); + soap_dom_element(struct soap *soap, const char *ns, const wchar_t *tag, const void *nod, int typ); + ~soap_dom_element(); + soap_dom_element& set(const char *ns, const char *tag) { return *soap_elt_set(this, ns, tag); } + soap_dom_element& set(const char *ns, const wchar_t *tag) { return *soap_elt_set_w(this, ns, tag); } + soap_dom_element& set(bool b) { return *soap_elt_bool(this, b); } + soap_dom_element& set(int n) { return *soap_elt_int(this, n); } + soap_dom_element& set(LONG64 n) { return *soap_elt_int(this, n); } + soap_dom_element& set(float x) { return *soap_elt_double(this, x); } + soap_dom_element& set(double x) { return *soap_elt_double(this, x); } + soap_dom_element& set(const char *str) { return *soap_elt_text(this, str); } + soap_dom_element& set(const wchar_t *str) { return *soap_elt_text_w(this, str); } +#ifndef WITH_COMPAT + soap_dom_element& set(const std::string& str) { return *soap_elt_text(this, str.c_str()); } + soap_dom_element& set(const std::wstring& str) { return *soap_elt_text_w(this, str.c_str()); } +#endif + soap_dom_element& set(const void *nod, int typ) { return *soap_elt_node(this, nod, typ); } + soap_dom_element& add(soap_dom_element& elt) { return *soap_add_elt(this, &elt); } + soap_dom_element& add(soap_dom_element *elt) { return *soap_add_elt(this, elt); } + soap_dom_element& add(soap_dom_attribute& att) { return *soap_add_att(this, &att); } + soap_dom_element& add(soap_dom_attribute *att) { return *soap_add_att(this, att); } + soap_dom_element& adds(soap_dom_element& elt) { return *soap_add_elts(this, &elt); } + soap_dom_element& adds(soap_dom_element *elt) { return *soap_add_elts(this, elt); } + soap_dom_element& adds(soap_dom_attribute& att) { return *soap_add_atts(this, &att); } + soap_dom_element& adds(soap_dom_attribute *att) { return *soap_add_atts(this, att); } + soap_dom_element& operator=(bool b) { return *soap_elt_bool(this, b); } + soap_dom_element& operator=(int n) { return *soap_elt_int(this, n); } + soap_dom_element& operator=(LONG64 n) { return *soap_elt_int(this, n); } + soap_dom_element& operator=(float x) { return *soap_elt_double(this, x); } + soap_dom_element& operator=(double x) { return *soap_elt_double(this, x); } + soap_dom_element& operator=(const char *str) { return *soap_elt_text(this, str); } + soap_dom_element& operator=(const wchar_t *str) { return *soap_elt_text_w(this, str); } +#ifndef WITH_COMPAT + soap_dom_element& operator=(const std::string& str) { return *soap_elt_text(this, str.c_str()); } + soap_dom_element& operator=(const std::wstring& str) { return *soap_elt_text_w(this, str.c_str()); } +#endif + soap_dom_element& operator=(const soap_dom_element& elt) { return *soap_elt_copy(this, &elt); } + template soap_dom_element& operator=(const T& nod) { return this->set(&nod, nod.soap_type()); } + template soap_dom_element& operator=(const T *nod) { return this->set(nod, nod->soap_type()); } + template soap_dom_element& operator=(T *nod) { return this->set(nod, nod->soap_type()); } + soap_dom_attribute& att(const char *tag) { return *soap_att(this, NULL, tag); } + soap_dom_attribute& att(const wchar_t *tag) { return *soap_att_w(this, NULL, tag); } + soap_dom_attribute& att(const char *ns, const char *tag) { return *soap_att(this, ns, tag); } + soap_dom_attribute& att(const char *ns, const wchar_t *tag) { return *soap_att_w(this, ns, tag); } + soap_dom_element& elt() { return *soap_elt(this, NULL, NULL); } + soap_dom_element& elt(const char *tag) { return *soap_elt(this, NULL, tag); } + soap_dom_element& elt(const wchar_t *tag) { return *soap_elt_w(this, NULL, tag); } + soap_dom_element& elt(const char *ns, const char *tag) { return *soap_elt(this, ns, tag); } + soap_dom_element& elt(const char *ns, const wchar_t *tag) { return *soap_elt_w(this, ns, tag); } + soap_dom_element& operator[](const char *tag) { return *soap_elt(this, NULL, tag); } + soap_dom_element& operator[](const wchar_t *tag) { return *soap_elt_w(this, NULL, tag); } + soap_dom_element& operator[](size_t n) { return *soap_nth(this, n); } + soap_dom_attribute *att_get(const char *tag) const { return soap_att_get(this, NULL, tag); } + soap_dom_attribute *att_get(const wchar_t *tag) const { return soap_att_get_w(this, NULL, tag); } + soap_dom_attribute *att_get(const char *ns, const char *tag) const { return soap_att_get(this, ns, tag); } + soap_dom_attribute *att_get(const char *ns, const wchar_t *tag) const { return soap_att_get_w(this, ns, tag); } + soap_dom_element *elt_get() const { return soap_elt_get(this, NULL, NULL); } + soap_dom_element *elt_get(const char *tag) const { return soap_elt_get(this, NULL, tag); } + soap_dom_element *elt_get(const wchar_t *tag) const { return soap_elt_get_w(this, NULL, tag); } + soap_dom_element *elt_get(const char *ns, const char *tag) const { return soap_elt_get(this, ns, tag); } + soap_dom_element *elt_get(const char *ns, const wchar_t *tag) const { return soap_elt_get_w(this, ns, tag); } + soap_dom_element *get_next() const { return soap_elt_get_next(this); } + soap_dom_element *get_nth(size_t n) { return soap_elt_get_nth(this, n); } + bool match(const char *pat) const { return soap_elt_match(this, NULL, pat) != 0; } + bool match(const wchar_t *pat) const { return soap_elt_match_w(this, NULL, pat) != 0; } + bool match(const char *ns, const char *pat) const { return soap_elt_match(this, ns, pat) != 0; } + bool match(const char *ns, const wchar_t *pat) const { return soap_elt_match_w(this, ns, pat) != 0; } + const char *ns() const { return this->nstr; } + const char *tag() const { return this->name; } + soap_dom_element *parent() { return this->prnt; } + size_t depth() const { return soap_elt_depth(this); } + size_t index() const { return soap_elt_index(this); } + size_t len() const { return soap_elt_len(this); } + size_t nth() const { return soap_elt_nth(this); } + size_t elt_size() { return soap_elt_size(this, NULL, NULL); } + size_t elt_size(const char *pat, int typ = 0) { return elt_size(NULL, pat, typ); } + size_t elt_size(const char *ns, const char *pat, int typ = 0) { return soap_elt_size_type(this, ns, pat, typ); } + size_t att_size() { return soap_att_size(this, NULL, NULL); } + size_t att_size(const char *pat) { return att_size(NULL, pat); } +#ifndef WITH_COMPAT + size_t att_size(const std::string& pat) { return att_size(NULL, pat); } +#endif + size_t att_size(const char *ns, const char *pat) { return soap_att_size(this, ns, pat); } +#ifndef WITH_COMPAT + size_t att_size(const char *ns, const std::string& pat) { return soap_att_size(this, ns, pat.c_str()); } +#endif + bool is_true() const { return soap_elt_is_true(this) != 0; } + bool is_false() const { return soap_elt_is_false(this) != 0; } + LONG64 get_int() const { return soap_elt_get_LONG64(this); } + double get_double() const { return soap_elt_get_double(this); } + const char *get_text() const { return this->text; } + const void *get_node(int typ) const { return soap_elt_get_node(this, typ); } + int get_type(const void **nod) const { return soap_elt_get_type(this, nod); } + operator bool() const { return soap_elt_is_true(this) != 0; } + operator int() const { return soap_elt_get_int(this); } + operator LONG64() const { return soap_elt_get_LONG64(this); } + operator double() const { return soap_elt_get_double(this); } + operator const char*() const { return this->text; } + const_iterator cbegin() { return this->begin(); } + const_iterator cend() { return this->end(); } + iterator begin(); + iterator end() { return soap_dom_element_iterator(NULL); } + iterator elt_begin() { return soap_dom_element_iterator(this->elts); } + iterator elt_end() { return soap_dom_element_iterator(NULL); } + soap_dom_attribute::iterator att_begin() { return soap_dom_attribute_iterator(this->atts); } + soap_dom_attribute::iterator att_end() { return soap_dom_attribute_iterator(NULL); } + iterator find(const char *pat, int typ = 0) { return find(NULL, pat, typ); } + iterator find(const wchar_t *pat, int typ = 0) { return find(NULL, pat, typ); } + iterator find(const char *ns, const char *pat, int typ = 0); + iterator find(const char *ns, const wchar_t *pat, int typ = 0); + iterator find(int typ); + iterator elt_find(const char *pat, int typ = 0) { return elt_find(NULL, pat, typ); } + iterator elt_find(const wchar_t *pat, int typ = 0) { return elt_find(NULL, pat, typ); } + iterator elt_find(const char *ns, const char *pat, int typ = 0); + iterator elt_find(const char *ns, const wchar_t *pat, int typ = 0); + iterator elt_find(int typ); + soap_dom_attribute::iterator att_find(const char *pat) { return att_find(NULL, pat); } + soap_dom_attribute::iterator att_find(const wchar_t *pat) { return att_find(NULL, pat); } + soap_dom_attribute::iterator att_find(const char *ns, const char *pat); + soap_dom_attribute::iterator att_find(const char *ns, const wchar_t *pat); + void unlink(); +#endif +}; +#endif + +#ifndef WITH_LEANER +SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_dup_xsd__anyType(struct soap *soap, struct soap_dom_element *d, const struct soap_dom_element *a); +SOAP_FMAC1 void SOAP_FMAC2 soap_del_xsd__anyType(const struct soap_dom_element *a); +SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_dup_xsd__anyAttribute(struct soap *soap, struct soap_dom_attribute *d, const struct soap_dom_attribute *a); +SOAP_FMAC1 void SOAP_FMAC2 soap_del_xsd__anyAttribute(const struct soap_dom_attribute *a); +SOAP_FMAC1 int SOAP_FMAC2 soap_dom_call(struct soap *soap, const char *endpoint, const char *action, const struct soap_dom_element *in, struct soap_dom_element *out); +#endif + +#ifndef WITH_LEANER +#if defined(__cplusplus) && !defined(WITH_COMPAT) +extern std::ostream &operator<<(std::ostream&, const struct soap_dom_element&); +extern std::istream &operator>>(std::istream&, struct soap_dom_element&); + +SOAP_FMAC1 int SOAP_FMAC2 soap_dom_call(struct soap *soap, const char *endpoint, const char *action, const struct soap_dom_element& in, struct soap_dom_element& out); +SOAP_FMAC1 int SOAP_FMAC2 soap_dom_call(struct soap *soap, const char *endpoint, const char *action, const struct soap_dom_element *in, struct soap_dom_element& out); +SOAP_FMAC1 int SOAP_FMAC2 soap_dom_call(struct soap *soap, const char *endpoint, const char *action, const struct soap_dom_element& in, struct soap_dom_element *out); +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +/******************************************************************************/ + +struct SOAP_CMAC 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), 0 indicates non-SOAP content */ + soap_mode mode; /* internal mode flag, combines imode/omode */ + soap_mode imode; /* input mode flag set with soap_init1(), soap_new1(), or soap_set_imode() */ + soap_mode omode; /* ouput mode flag set with soap_init1(), soap_new1(), or soap_set_omode() */ + const char *float_format; /* user-definable format string for floats (<1024 chars) */ + const char *double_format; /* user-definable format string for doubles (<1024 chars) */ + const char *long_double_format;/* user-definable format string for long doubles (<1024 chars) */ + const char *dime_id_format; /* user-definable format string for integer DIME id ( 0, sets max message size that can be received */ + int recv_timeout; /* user-definable, when > 0, sets socket recv stall timeout in seconds, < 0 in usec */ + int send_timeout; /* user-definable, when > 0, sets socket send stall timeout in seconds, < 0 in usec */ + int transfer_timeout; /* user-definable, when > 0, sets socket total transfer timeout in seconds, < 0 in usec */ + int connect_timeout; /* user-definable, when > 0, sets socket connect() timeout in seconds, < 0 in usec */ + int accept_timeout; /* user-definable, when > 0, sets socket accept() timeout in seconds, < 0 in usec */ + int socket_flags; /* user-definable socket recv() and send() flags, e.g. set to MSG_NOSIGNAL to disable sigpipe */ + int connect_flags; /* user-definable connect() SOL_SOCKET sockopt flags, e.g. set to SO_DEBUG to debug socket */ + int connect_retry; /* number of times to retry connecting (exponential backoff), zero by default */ + int bind_flags; /* user-definable bind() SOL_SOCKET sockopt flags, e.g. set to SO_REUSEADDR to enable reuse */ + short bind_inet6; /* user-definable, when > 0 use AF_INET6 instead of PF_UNSPEC (only with -DWITH_IPV6) */ + short bind_v6only; /* user-definable, when > 0 use IPPROTO_IPV6 sockopt IPV6_V6ONLY (only with -DWITH_IPV6) */ + int accept_flags; /* user-definable accept() SOL_SOCKET sockopt flags */ +#ifdef WITH_SELF_PIPE + int pipe_fd[2]; /* self pipe trick file descriptors used to close the select call from another thread */ +#endif + int sndbuf; /* user-definable SO_SNDBUF setsockopt value */ + int rcvbuf; /* user-definable SO_RCVBUF setsockopt value */ + unsigned short linger_time; /* user-definable linger time for SO_LINGER option */ + unsigned int maxlevel; /* user-definable max XML nesting depth levels, initialized to SOAP_MAXLEVEL */ + long maxlength; /* user-definable max string length, initialized to SOAP_MAXLENGTH, maxlength<=0 is unbounded */ + size_t maxoccurs; /* user-definable max array/container size, initialized to SOAP_MAXOCCURS */ + const char *http_version; /* HTTP version used "1.0" or "1.1" */ + const char *http_content; /* optional custom HTTP content type (with SOAP_PUT, SOAP_POST_FILE, SOAP_FILE) */ + const char *http_extra_header;/* optional custom HTTP header of the form 'key: val' (multiple headers should be separated in the string by \r\n - crlf) */ + const char *encodingStyle; /* default = "" which means that SOAP encoding is used */ + const char *actor; /* SOAP-ENV:actor or role attribute value */ + const char *lang; /* user-definable xml:lang attribute value of SOAP-ENV:Text */ + const struct Namespace *namespaces; /* Pointer to global namespace mapping table */ + struct Namespace *local_namespaces; /* Local namespace mapping table */ + struct soap_nlist *nlist; /* namespace stack */ + struct soap_blist *blist; /* block allocation stack */ + struct soap_clist *clist; /* class instance allocation list */ + void *alist; /* memory allocation (malloc) list */ +#if !defined(WITH_LEANER) || !defined(WITH_NOIDREF) + struct soap_ilist *iht[SOAP_IDHASH]; +#endif + struct soap_plist *pht[SOAP_PTRHASH]; + struct soap_pblk *pblk; /* plist block allocation */ + short pidx; /* plist block allocation */ + short shaky; /* objects in reallocatable containers are on shaky grounds */ + struct SOAP_ENV__Header *header; + struct SOAP_ENV__Fault *fault; + int idnum; + void *user; /* for user to pass user-defined data to callbacks */ + void *data[4]; /* extension data = {smdevp, mecevp, ...} */ + struct soap_plugin *plugins; /* linked list of plug-in data */ + const char *bearer; /* HTTP authorization bearer token value */ + const char *userid; /* HTTP Basic authorization userid */ + const char *passwd; /* HTTP Basic authorization passwd */ + const char *authrealm; /* HTTP authentication realm (and 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 */ +#endif + int (*fpost)(struct soap*, const char*, const char*, int, const char*, const char*, ULONG64); + int (*fget)(struct soap*); /* HTTP GET hook (not set by default) */ + int (*fput)(struct soap*); /* HTTP PUT hook (handled as POST by default) */ + int (*fpatch)(struct soap*); /* HTTP PATCH 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) */ + int (*fform)(struct soap*); /* HTTP/HTML form handler for plugins */ + int (*fposthdr)(struct soap*, const char*, const char*); + int (*fresponse)(struct soap*, int, ULONG64); + int (*fparse)(struct soap*); + int (*fparsehdr)(struct soap*, const char*, const char*); + int (*fheader)(struct soap*); + int (*fresolve)(struct soap*, const char*, struct in_addr* inaddr); + int (*fconnect)(struct soap*, const char*, const char*, int); + int (*fdisconnect)(struct soap*); + int (*fclosesocket)(struct soap*, SOAP_SOCKET); + int (*fshutdownsocket)(struct soap*, SOAP_SOCKET, int); + SOAP_SOCKET (*fopen)(struct soap*, const char*, const char*, int); + SOAP_SOCKET (*faccept)(struct soap*, SOAP_SOCKET, struct sockaddr*, int *n); + int (*fclose)(struct soap*); + int (*fsend)(struct soap*, const char*, size_t); + size_t (*frecv)(struct soap*, char*, size_t); + int (*fpoll)(struct soap*); + void (*fseterror)(struct soap*, const char **c, const char **s); + int (*fencoding)(struct soap*, const char*); + int (*fignore)(struct soap*, const char*); + int (*fserveloop)(struct soap*); + void *(*fplugin)(struct soap*, const char*); +#ifndef WITH_LEANER + int (*fsvalidate)(struct soap*, const char*, const char*); + int (*fwvalidate)(struct soap*, const char*, const wchar_t*); + int (*feltbegin)(struct soap*, const char*); + int (*feltendin)(struct soap*, const char*, const char*); + int (*feltbegout)(struct soap*, const char*, int, 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 recverror; /* last soap_recv_raw error code for filterrecv */ + 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*); + void (*fdimewriteclose)(struct soap*, void*); + size_t (*fdimeread)(struct soap*, void*, char*, size_t); + int (*fdimewrite)(struct soap*, void*, const char*, size_t); + void *(*fmimereadopen)(struct soap*, void*, const char*, const char*, const char*); + void *(*fmimewriteopen)(struct soap*, void*, const char*, const char*, const char*, enum soap_mime_encoding); + void (*fmimereadclose)(struct soap*, void*); + void (*fmimewriteclose)(struct soap*, void*); + size_t (*fmimeread)(struct soap*, void*, char*, size_t); + int (*fmimewrite)(struct soap*, void*, const char*, size_t); +#endif + SOAP_SOCKET master; /* 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_COMPAT) + std::ostream *os; /* C++ only: ostream to send */ + std::istream *is; /* C++ only: istream to receive */ +#else + const char **os; /* C only: pointer to a const char*, will be set to point to the string output */ + const char *is; /* C only: a const char* to read from (soap->is will advance) */ +#endif +#ifndef UNDER_CE + int sendfd; /* int file descriptor for sending */ + int recvfd; /* int file descriptor for receiving */ +#else + FILE *sendfd; /* WinCE FILE* to send */ + FILE *recvfd; /* WinCE FILE* to receive */ +#endif +#if defined(WITH_OPENSSL) /* OpenSSL */ + int (*fsslauth)(struct soap*); + int (*fsslverify)(int, X509_STORE_CTX*); + BIO *bio; + SSL *ssl; + SSL_CTX *ctx; + SSL_SESSION *session; + const char *dhfile; + const char *randfile; +#elif defined(WITH_GNUTLS) /* GNUTLS */ + int (*fsslauth)(struct soap*); + void *fsslverify; + gnutls_certificate_credentials_t xcred; /* cert pointer */ + gnutls_anon_client_credentials_t acred; /* anon pointer */ + gnutls_priority_t cache; /* priority cache pointer */ + gnutls_session_t session; /* session pointer */ + gnutls_dh_params_t dh_params; + gnutls_rsa_params_t rsa_params; +#elif defined(WITH_WOLFSSL) /* WolfSSL */ + int (*fsslauth)(struct soap*); + VerifyCallback fsslverify; /* callback to verify certificates */ + void *bio; /* N/A */ + WOLFSSL *ssl; /* ssl socket */ + WOLFSSL_CTX *ctx; /* environment */ + void *session; /* N/A */ + const char *dhfile; /* N/A */ + const char *randfile; /* N/A */ +#elif defined(WITH_SYSTEMSSL) /* SYSTEM SSL */ + int (*fsslauth)(struct soap*); + void *fsslverify; /* N/A */ + void *bio; /* N/A */ + gsk_handle ssl; /* ssl socket */ + gsk_handle ctx; /* environment */ + void *session; /* N/A */ + const char *dhfile; /* N/A */ + const char *randfile; /* N/A */ +#else /* No SSL/TLS */ + void *fsslauth; /* dummy members, to preserve struct size */ + void *fsslverify; + void *bio; + void *ssl; + void *ctx; + void *session; + void *dh_params; + void *rsa_params; +#endif + unsigned short ssl_flags; + const char *keyfile; + const char *keyid; + const char *password; + const char *cafile; + const char *capath; + const char *crlfile; + char session_host[SOAP_TAGLEN]; + int session_port; + 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; /* HTTP or XML element has a body (1) or not (0) */ + unsigned int level; /* XML nesting level */ +#ifndef WITH_LEAN + ULONG64 start; /* start time of send/recv (value cast to time_t) */ +#endif + ULONG64 count; /* message length counter */ + ULONG64 length; /* message length as was set by HTTP header received */ + char *labbuf; /* look-aside buffer */ + size_t lablen; /* look-aside buffer allocated length */ + size_t labidx; /* look-aside buffer index to available part */ + char buf[SOAP_BUFLEN];/* send and receive buffer */ + char msgbuf[SOAP_TMPLEN]; /* in/out buffer for HTTP/MIME headers and short messages, must be >=1024 bytes */ + char tmpbuf[SOAP_TMPLEN]; /* in/out buffer for HTTP/MIME headers, simpleType values, element and attribute tag names, and DIME must be >=1024 bytes */ + char tag[SOAP_TAGLEN]; + char id[SOAP_TAGLEN]; + char href[SOAP_TAGLEN]; + char type[SOAP_TAGLEN]; + char arrayType[SOAP_TAGLEN]; + char arraySize[SOAP_TAGLEN]; + char arrayOffset[SOAP_TAGLEN]; + int position; + int positions[SOAP_MAXDIMS]; + struct soap_attribute *attributes; /* attribute list */ + short other; + short root; + 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; /* zero to output all xmlns */ + short part; /* SOAP part state (header or body) */ + short event; /* engine events and states for use by plugins */ + short peeked; + unsigned int evlev; /* event level */ + int alloced; + size_t chunksize; + size_t chunkbuflen; + char endpoint[SOAP_TAGLEN]; + char path[SOAP_TAGLEN]; + char host[SOAP_TAGLEN]; + char *action; /* SOAPAction string */ + const char *prolog; /* XML declaration prolog */ + unsigned int ip; /* IP number retrieved from request */ + unsigned int ip6[4]; /* same for IPv6: upper in ip6[0] to lower in ip6[3] requires WITH_IPV6 */ + int port; /* port number */ + const char *override_host; /* to override the client-side host name/IP when connecting */ + int override_port; /* to override client-side port number when connecting */ + int keep_alive; /* connection should be kept open (-1, 0, or counts down) */ + int tcp_keep_alive; /* enable SO_KEEPALIVE */ + unsigned int tcp_keep_idle; /* set TCP_KEEPIDLE */ + unsigned int tcp_keep_intvl; /* set TCP_KEEPINTVL */ + unsigned int tcp_keep_cnt; /* set TCP_KEEPCNT */ + int max_keep_alive; /* maximum keep-alive session (default=100) 0 to always keep open */ + const char *proxy_http_version;/* HTTP version of proxy "1.0" or "1.1" */ + const char *proxy_host; /* Proxy Server host name */ + int proxy_port; /* Proxy Server port (default = 8080) */ + const char *proxy_userid; /* Proxy Authorization user name */ + const char *proxy_passwd; /* Proxy Authorization password */ + const char *proxy_from; /* X-Forwarding-For header returned by proxy */ + const char *origin; /* Origin header received */ + const char *cors_origin; /* CORS Allow-Origin header returned by server */ + const char *cors_allow; /* CORS Allow-Origin header default value of "*" */ + const char *cors_method; /* CORS Request-Method header received */ + const char *cors_header; /* CORS Request-Headers header received */ + const char *cors_methods; /* CORS Allow-Methods header returned by server */ + const char *cors_headers; /* CORS Allow-Headers header returned by server */ + const char *x_frame_options; /* "DENY", "SAMEORIGIN" (default), or "ALLOW-FROM uri" */ + int status; /* HTTP status code, HTTP method, or other error code */ + int error; + int errmode; + int errnum; +#ifndef WITH_LEANER + struct soap_dom_element *dom; + struct soap_dime dime; + struct soap_mime mime; + struct soap_xlist *xlist; +#endif + const char *logfile[SOAP_MAXLOGS]; + FILE *fdebug[SOAP_MAXLOGS]; + struct soap_mlist *mht[SOAP_PTRHASH]; +#ifndef WITH_LEAN + const char *wsuid; /* space-separated string of element tags */ + const char *c14nexclude; /* space-separated string of prefixes for c14n exclusion */ + const char *c14ninclude; /* space-separated string of prefixes for c14n inclusion */ +#endif + struct soap_cookie *cookies; + const char *cookie_domain; + const char *cookie_path; + int cookie_max; +#ifndef WITH_NOIO + 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 */ + const char *client_addr; /* when non-NULL, client binds to this address before connect */ + const char *client_addr_ipv6; /* WITH_IPV6: when non-NULL and client_addr is non-NULL and when connecting to a IPv6 server, client binds to this IPv6 address instead of client_addr */ + int client_port; /* when nonnegative, client binds to this port before connect */ + const char *client_interface; /* when non-NULL, override client-side interface address using this address */ + union { + struct sockaddr addr; + struct sockaddr_in in; + struct sockaddr_storage storage; + } peer; /* set by soap_connect/soap_accept and by UDP recv */ + size_t peerlen; +#endif +#ifdef SOAP_LOCALE_T + SOAP_LOCALE_T c_locale; /* if this does not compile, use ./configure --enable-xlocale or compile with -DWITH_INCLUDE_XLOCALE_H, or use -DWITH_NO_C_LOCALE to disable locale support */ +#else + void *c_locale; +#endif +#ifdef WITH_ZLIB + z_stream *d_stream; /* decompression stream */ + uLong z_crc; /* internal gzip crc */ +#else + void *d_stream; /* dummy members, to preserve struct size */ + soap_int32 z_crc; +#endif + const char *z_dict; /* support for zlib static dictionaries */ + unsigned int z_dict_len; + short zlib_state; /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_INFLATE */ + short zlib_in; /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */ + short zlib_out; /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */ + char *z_buf; /* buffer */ + size_t z_buflen; + unsigned short z_level; /* compression level to be used (0=none, 1=fast to 9=best) */ + float z_ratio_in; /* detected compression ratio compressed_length/length of inbound message */ + float z_ratio_out; /* detected compression ratio compressed_length/length of outbound message */ +#ifdef WMW_RPM_IO /* vxWorks compatibility */ + void *rpmreqid; +#endif +#ifdef __cplusplus + soap(); + soap(soap_mode); + soap(soap_mode, soap_mode); + soap(const struct soap&); + struct soap& operator=(const struct soap&); + void destroy(); + ~soap(); /* no virtual methods, so sizeof(soap) should be the same in C and C++ */ +#endif +}; + +struct soap_code_map +{ + LONG64 code; + const char *string; +}; + +/* forwarding list */ +struct soap_flist +{ + struct soap_flist *next; + int type; + void *ptr; + unsigned int level; + size_t index; + void (*finsert)(struct soap*, int, int, void*, size_t, const void*, void**); +}; + +/* id-ref forwarding list */ +struct soap_ilist +{ + struct soap_ilist *next; + int type; + size_t size; + void *ptr; + void **spine; + void *link; + void *copy; + struct soap_flist *flist; + void *smart; + short shaky; + char id[1]; /* the actual id string value flows into the allocated region below this struct */ +}; + +struct soap_plugin +{ + struct soap_plugin *next; + const char *id; + void *data; + int (*fcopy)(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src); + void (*fdelete)(struct soap *soap, struct soap_plugin *p); /* should delete fields of plugin only and not free(p) */ +}; + +extern SOAP_NMAC struct Namespace namespaces[]; + +#ifndef WITH_LEAN +# define soap_get0(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv((soap))) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx]) +# define soap_get1(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv((soap))) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx++]) +# define soap_getchar(soap) ((soap)->ahead ? soap_getahead((soap)) : soap_get1((soap))) +SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getahead(struct soap*); +#else +SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get0(struct soap*); +SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get1(struct soap*); +SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar(struct soap*); +#endif + +#define soap_versioning_paste(name, ext) name##_REQUIRE_lib_v##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_peek(soap) ((soap)->ahead = soap_get(soap)) +#define soap_register_plugin(soap, plugin) soap_register_plugin_arg(soap, plugin, NULL) +#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_set_omode(soap, n) ((soap)->omode |= (n)) +#define soap_clr_omode(soap, n) ((soap)->omode &= ~(n)) +#define soap_set_mode(soap, n) ((soap)->mode |= (n), (soap)->imode |= (n), (soap)->omode |= (n)) +#define soap_clr_mode(soap, n) ((soap)->mode &= ~(n), (soap)->imode &= ~(n), (soap)->omode &= ~(n)) +#define soap_destroy(soap) soap_delete((soap), NULL) + +#define SOAP_NO_LINK_TO_DELETE (-2) /* pass to soap_link() as size n: do not manage, smart pointers are self-managing */ + +#ifdef HAVE_STRRCHR +# define soap_strrchr(s, t) strrchr(s, t) +#else + SOAP_FMAC1 char* SOAP_FMAC2 soap_strrchr(const char *s, int t); +#endif + +#ifdef HAVE_STRTOL +# define soap_strtol(s, t, b) strtol(s, t, b) +#else + SOAP_FMAC1 long SOAP_FMAC2 soap_strtol(const char*, char**, int); +#endif + +#ifdef HAVE_STRTOUL +# define soap_strtoul(s, t, b) strtoul(s, t, b) +#else + SOAP_FMAC1 unsigned long SOAP_FMAC2 soap_strtoul(const char*, char**, int); +#endif + +#if defined(WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(__BORLANDC__) +# define soap_strtoll _strtoi64 +#elif defined(HAVE_STRTOLL) && !defined(soap_strtoll) +# define soap_strtoll strtoll +#elif !defined(soap_strtoll) + SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_strtoll(const char*, char**, int); +#endif + +#if defined(WIN32) && !defined(__MINGW32__) && !defined(__MINGW64__) && !defined(__BORLANDC__) +# define soap_strtoull _strtoui64 +#elif defined(HAVE_STRTOULL) && !defined(soap_strtoull) +# define soap_strtoull strtoull +#elif !defined(soap_strtoull) + SOAP_FMAC1 ULONG64 SOAP_FMAC2 soap_strtoull(const char*, char**, int); +#endif + +#if defined(WITH_OPENSSL) +# define soap_random soap_rand() + SOAP_FMAC1 int SOAP_FMAC2 soap_rand(void); +#elif defined(UNDER_CE) +# define soap_random (int)Random() +#elif defined(HAVE_RANDOM) +# define soap_random (int)random() +#else +# define soap_random rand() +#endif + +#ifdef WITH_NOIDREF +# define soap_embedded(s, p, t) ((void)(s), 0) +# define soap_id_lookup(s, i, p, t, n, k, fb) ((void)(s), (p)) +# define soap_id_forward(s, h, p, i, t, tt, n, k, fi, fb) ((void)(s), (p)) +# define soap_id_nullify(s, i) ((void)(s), (i)) +# define soap_reference(s, a, t) ((void)(s), 1) +# define soap_array_reference(s, p, a, n, t) ((void)(s), 1) +# define soap_attachment_reference(s, p, a, n, t, i, y) ((void)(s), 1) +# define soap_embed(s, p, a, n, t) ((void)(s), 0) +# define soap_embedded_id(s, i, p, t) ((void)(s), (void)(t), i) +# define soap_is_embedded(s, p) ((void)(s), 0) +# define soap_is_single(s, p) ((void)(s), 1) +# define soap_lookup_type(s, i) ((void)(s), 0) +# define soap_getindependent(s) ((void)(s), 0) +# define soap_putindependent(s) ((void)(s), 0) +# define soap_markelement(s, p, t) ((void)(s), 0) +# define soap_begin_shaky(s) ((void)(s), 0) +# define soap_end_shaky(s, f) ((void)(s), (void)(f), 0) +#endif + +/* 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_FMAC1 void SOAP_FMAC2 soap_ssl_init(void); +SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_noinit(void); +SOAP_FMAC1 int SOAP_FMAC2 soap_GET(struct soap*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_PUT(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_PATCH(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_POST(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_DELETE(struct soap*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command(struct soap*, int, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_connect(struct soap*, const char*, const char*); +SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_bind(struct soap*, const char*, int, int); +SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_accept(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept(struct soap*); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_ssl_error(struct soap*, int ret, int err); +SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_crl(struct soap*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_poll(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_ready(struct soap*); + +#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 const char * SOAP_FMAC2 soap_http_content_type(struct soap *soap, int status); +SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap*, int status, ULONG64 count); + +SOAP_FMAC1 const char* SOAP_FMAC2 soap_http_header_attribute(struct soap*, const char*, const char*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_key(char*, size_t, const char*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_val(char*, size_t, const char*); + +SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash(const char*); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_endpoint(struct soap*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw(struct soap*, const char*, size_t); +SOAP_FMAC1 int SOAP_FMAC2 soap_flush(struct soap*); +SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp(const char*, const char*); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault(struct soap*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault_subcode(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault(struct soap*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault_subcode(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_set_sender_error(struct soap*, const char*, const char*, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error(struct soap*, const char*, const char*, int); + +SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw(struct soap*, const char*, size_t); +SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_recv(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_send(struct soap*, const char*); + +#ifndef WITH_LEANER +SOAP_FMAC1 int SOAP_FMAC2 soap_send2(struct soap*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_send3(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_query_send_key(struct soap*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_query_send_val(struct soap*, const char*); +SOAP_FMAC1 char * SOAP_FMAC2 soap_query(struct soap*); +SOAP_FMAC1 char * SOAP_FMAC2 soap_query_key(struct soap*, char**); +SOAP_FMAC1 char * SOAP_FMAC2 soap_query_val(struct soap*, char**); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_query_decode(char*, size_t, const char*); +#endif + +SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8(struct soap*, unsigned long); +SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8(struct soap*); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_utf8len(const char*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_putbase64(struct soap*, const unsigned char*, int); +SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_getbase64(struct soap*, int*, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_puthex(struct soap*, const unsigned char*, int); +SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_gethex(struct soap*, int*); + +#ifndef WITH_LEANER +SOAP_FMAC1 int SOAP_FMAC2 soap_xop_forward(struct soap*, unsigned char**, int*, char**, char**, char**); +SOAP_FMAC1 int SOAP_FMAC2 soap_attachment_forward(struct soap*, unsigned char**, int*, char**, char**, char**); +#endif + +SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup(struct soap*, const void *p, int t, struct soap_plist**); +SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter(struct soap*, const void *p, const void *a, int n, int t, struct soap_plist**); +SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup(struct soap*, const void *p, const void *a, int n, int t, struct soap_plist**); +#ifndef WITH_NOIDREF +SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup_id(struct soap*, void *p, int t, struct soap_plist**); +SOAP_FMAC1 int SOAP_FMAC2 soap_embed(struct soap *soap, const void *p, const void *a, int n, int t); +SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_lookup(struct soap*, const char*); +SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_enter(struct soap*, const char*, int t, size_t n); +SOAP_FMAC1 int SOAP_FMAC2 soap_resolve(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_embedded(struct soap*, const void *p, int t); +SOAP_FMAC1 int SOAP_FMAC2 soap_reference(struct soap*, const void *p, int t); +SOAP_FMAC1 int SOAP_FMAC2 soap_array_reference(struct soap*, const void *p, const void *a, int n, int t); +SOAP_FMAC1 int SOAP_FMAC2 soap_attachment_reference(struct soap *soap, const void *p, const void *a, int n, int t, const char *id, const char *type); +SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id(struct soap*, int id, const void *p, int t); +SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded(struct soap*, struct soap_plist*); +SOAP_FMAC1 int SOAP_FMAC2 soap_is_single(struct soap*, struct soap_plist*); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded(struct soap*, struct soap_plist*); +#endif +SOAP_FMAC1 int SOAP_FMAC2 soap_check_and_mark(struct soap *soap, const void *p, int t, char **mark); +SOAP_FMAC1 void * SOAP_FMAC2 soap_mark_lookup(struct soap *soap, const void *p, int t, struct soap_plist **pp, char **mark); +SOAP_FMAC1 int SOAP_FMAC2 soap_mark_cycle(struct soap *soap, struct soap_plist *pp); +SOAP_FMAC1 void SOAP_FMAC2 soap_mark_dup(struct soap *soap, void *a, struct soap_plist *pp); +SOAP_FMAC1 void SOAP_FMAC2 soap_unmark(struct soap *soap, char *mark); + +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 LONG64 SOAP_FMAC2 soap_code_int(const struct soap_code_map*, const char*, LONG64); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_str(const struct soap_code_map*, long); +SOAP_FMAC1 LONG64 SOAP_FMAC2 soap_code_bits(const struct soap_code_map*, const char*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_list(struct soap*, const struct soap_code_map*, long); + +SOAP_FMAC1 int SOAP_FMAC2 soap_binary_search_string(const char**, int, const char*); + +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*, int, int, int (*fdelete)(struct soap*, struct soap_clist*)); +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*); + +SOAP_FMAC1 void* SOAP_FMAC2 soap_track_malloc(struct soap*, const char*, int, size_t); +SOAP_FMAC1 void SOAP_FMAC2 soap_track_free(struct soap*, const char*, int, void*); + +#ifndef WITH_NOIDREF +SOAP_FMAC1 int SOAP_FMAC2 soap_lookup_type(struct soap*, const char *id); +SOAP_FMAC1 short SOAP_FMAC2 soap_begin_shaky(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_end_shaky(struct soap*, short); +SOAP_FMAC1 void* SOAP_FMAC2 soap_id_lookup(struct soap*, const char *id, void **p, int t, size_t n, unsigned int k, int (*fbase)(int, int)); +SOAP_FMAC1 void* SOAP_FMAC2 soap_id_forward(struct soap*, const char *id, void *p, size_t i, int t, int tt, size_t n, unsigned int k, void(*finsert)(struct soap*, int, int, void*, size_t, const void*, void**), int (*fbase)(int, int)); +SOAP_FMAC1 int SOAP_FMAC2 soap_id_nullify(struct soap*, const char*); +#endif +SOAP_FMAC1 void* SOAP_FMAC2 soap_id_enter(struct soap*, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*), int (*fbase)(int, int)); +SOAP_FMAC1 void** SOAP_FMAC2 soap_id_smart(struct soap *soap, const char*, int t, size_t n); + +SOAP_FMAC1 size_t SOAP_FMAC2 soap_size(const int *, int); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_getsizes(const char *, int *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_getoffsets(const char *, const int *, int *, int); + +SOAP_FMAC1 int SOAP_FMAC2 soap_getposition(const char *, int *); + +SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizesoffsets(struct soap*, const char *, const int *, const int *, int); +SOAP_FMAC1 char* SOAP_FMAC2 soap_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_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_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*); +SOAP_FMAC1 void SOAP_FMAC2 soap_end(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_delete(struct soap*, void*); +SOAP_FMAC1 void SOAP_FMAC2 soap_delegate_deletion(struct soap*, struct soap*); +#ifdef WITH_SELF_PIPE +SOAP_FMAC1 void SOAP_FMAC2 soap_close_connection(struct soap*); +#endif + +/* API functions available with DEBUG or SOAP_DEBUG defined: */ +SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile(struct soap*, const char*); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile(struct soap*, const char*); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile(struct soap*, const char*); +SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_open_logfile(struct soap*, int); +/* */ + +SOAP_FMAC1 const char* SOAP_FMAC2 soap_value(struct soap*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag(struct soap*, const char*, const char *); +SOAP_FMAC1 int SOAP_FMAC2 soap_match_att(struct soap*, const char*, const char *); +SOAP_FMAC1 int SOAP_FMAC2 soap_match_array(struct soap*, const char*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_element(struct soap*, const char*, int, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out(struct soap*, const char *tag); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out(struct soap*, const char *tag, int id, const char *type); +SOAP_FMAC1 int SOAP_FMAC2 soap_array_begin_out(struct soap*, const char *tag, int id, const char *type, const char *offset); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref(struct soap*, const char *tag, int id, int href); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_href(struct soap*, const char *tag, int id, const char *ref, const char *val); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_null(struct soap*, const char *tag, int id, const char *type); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_empty(struct soap*, const char *tag, int id, const char *type); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_nil(struct soap*, const char *tag); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_id(struct soap*, const char *tag, int id, const void *p, const void *a, int n, const char *type, int t, char **mark); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_result(struct soap*, const char *tag); +SOAP_FMAC1 void SOAP_FMAC2 soap_check_result(struct soap*, const char *tag); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out(struct soap*, const char *tag); +SOAP_FMAC1 int SOAP_FMAC2 soap_element_end(struct soap*, const char *tag); + +SOAP_FMAC1 int SOAP_FMAC2 soap_attribute(struct soap*, const char*, const char*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in(struct soap*, const char *tag, int nillable, const char *type); + +SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in(struct soap*, const char *tag); + +SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element(struct soap*); + +SOAP_FMAC1 void SOAP_FMAC2 soap_retry(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_revert(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_ignore(struct soap*); + +SOAP_FMAC1 void* SOAP_FMAC2 soap_memdup(struct soap*, const void*, size_t); +SOAP_FMAC1 char* SOAP_FMAC2 soap_strdup(struct soap*, const char*); +SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstrdup(struct soap*, const wchar_t*); +SOAP_FMAC1 char* SOAP_FMAC2 soap_strtrim(struct soap*, char*); +SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstrtrim(struct soap*, wchar_t*); +SOAP_FMAC1 const char * SOAP_FMAC2 soap_tagsearch(const char *big, const char *little); + +SOAP_FMAC1 int SOAP_FMAC2 soap_string_out(struct soap*, const char *s, int flag); +SOAP_FMAC1 char* SOAP_FMAC2 soap_string_in(struct soap*, int, long, long, const char*); + +#ifndef WITH_LEANER +SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out(struct soap*, const wchar_t *s, int flag); +SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstring_in(struct soap*, int, long, long, const char*); +#endif + +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*); + +SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace(struct soap*); +SOAP_FMAC1 struct soap_nlist* SOAP_FMAC2 soap_push_namespace(struct soap*, const char *,const char *); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_current_namespace_tag(struct soap *soap, const char *tag); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_current_namespace_att(struct soap *soap, const char *tag); + +SOAP_FMAC1 struct soap_nlist* SOAP_FMAC2 soap_lookup_ns(struct soap *soap, const char *tag, size_t n); + +SOAP_FMAC1 int SOAP_FMAC2 soap_store_lab(struct soap*, const char*, size_t); +SOAP_FMAC1 int SOAP_FMAC2 soap_append_lab(struct soap*, const char*, size_t); + +SOAP_FMAC1 struct soap_blist* SOAP_FMAC2 soap_alloc_block(struct soap*); +SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block(struct soap*, struct soap_blist*, size_t); +SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block_max(struct soap*, struct soap_blist*, size_t); +SOAP_FMAC1 void SOAP_FMAC2 soap_pop_block(struct soap*, struct soap_blist*); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block(struct soap*, struct soap_blist*, size_t); +SOAP_FMAC1 char* SOAP_FMAC2 soap_first_block(struct soap*, struct soap_blist*); +SOAP_FMAC1 char* SOAP_FMAC2 soap_next_block(struct soap*, struct soap_blist*); +SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size(struct soap*, struct soap_blist*); +SOAP_FMAC1 void* 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, const char *dst, const char *src, size_t len); + +SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_out(struct soap*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_http_has_body(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_http_skip_body(struct soap*); +SOAP_FMAC1 char * SOAP_FMAC2 soap_http_get_body(struct soap*, size_t *len); +SOAP_FMAC1 char * SOAP_FMAC2 soap_http_get_form(struct soap*); +SOAP_FMAC1 char * SOAP_FMAC2 soap_http_get_body_prefix(struct soap*, size_t *len, const char *prefix); + +SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out(struct soap*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in(struct soap*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header(struct soap*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_response(struct soap*, int); + +SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response(struct soap*, int status); +SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response(struct soap*); + +SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault(struct soap*, int check); + +#ifndef WITH_NOSTDLIB +SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault(struct soap*, FILE*); +SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault_location(struct soap*, FILE*); +# ifndef WITH_LEAN +# ifndef WITH_COMPAT +# ifdef __cplusplus +SOAP_FMAC1 void SOAP_FMAC2 soap_stream_fault(struct soap*, std::ostream&); +SOAP_FMAC1 void SOAP_FMAC2 soap_stream_fault_location(struct soap*, std::ostream&); +# endif +# endif +SOAP_FMAC1 char* SOAP_FMAC2 soap_sprint_fault(struct soap*, char*, size_t); +# endif +#endif + +SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte(struct soap*, const char*, char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2short(struct soap*, const char*, short*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2int(struct soap*, const char*, int*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2long(struct soap*, const char*, long*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64(struct soap*, const char*, LONG64*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2float(struct soap*, const char*, float*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2double(struct soap*, const char*, double*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte(struct soap*, const char*, unsigned char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort(struct soap*, const char*, unsigned short*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt(struct soap*, const char*, unsigned int*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong(struct soap*, const char*, unsigned long*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64(struct soap*, const char*, ULONG64*); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2char(struct soap*, const char*, char**, int, long minlen, long maxlen, const char *pattern); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName(struct soap*, const char*, char**, long minlen, long maxlen, const char *pattern); + +#ifndef WITH_COMPAT +#ifdef __cplusplus +SOAP_FMAC1 int SOAP_FMAC2 soap_s2stdQName(struct soap*, const char*, std::string*, long minlen, long maxlen, const char *pattern); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2stdchar(struct soap*, const char*, std::string*, int, long minlen, long maxlen, const char *pattern); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2stdwchar(struct soap*, const char*, std::wstring*, int, long minlen, long maxlen, const char *pattern); +#endif +#endif + +#ifndef WITH_LEAN +SOAP_FMAC1 int SOAP_FMAC2 soap_s2wchar(struct soap*, const char*, wchar_t**, int, long minlen, long maxlen, const char *pattern); +SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime(struct soap*, const char*, time_t*); +#endif + +SOAP_FMAC1 char* SOAP_FMAC2 soap_s2base64(struct soap*, const unsigned char*, char*, int); +SOAP_FMAC1 char* SOAP_FMAC2 soap_s2hex(struct soap*, const unsigned char*, char*, int); + +SOAP_FMAC1 const char* SOAP_FMAC2 soap_byte2s(struct soap*, char); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_short2s(struct soap*, short); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_int2s(struct soap*, int); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_long2s(struct soap*, long); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_LONG642s(struct soap*, LONG64); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_float2s(struct soap*, float); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_double2s(struct soap*, double); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedByte2s(struct soap*, unsigned char); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedShort2s(struct soap*, unsigned short); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedInt2s(struct soap*, unsigned int); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedLong2s(struct soap*, unsigned long); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_ULONG642s(struct soap*, ULONG64); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_QName2s(struct soap*, const char*); + +#ifndef WITH_LEAN +SOAP_FMAC1 const char* SOAP_FMAC2 soap_wchar2s(struct soap*, const wchar_t*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_dateTime2s(struct soap*, time_t); +#endif + +SOAP_FMAC1 const char* SOAP_FMAC2 soap_base642s(struct soap*, const char*, char*, size_t, int*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_hex2s(struct soap*, const char*, char*, size_t, int*); + +SOAP_FMAC1 int* SOAP_FMAC2 soap_inint(struct soap*, const char *tag, int *p, const char *, int); +SOAP_FMAC1 char* SOAP_FMAC2 soap_inbyte(struct soap*, const char *tag, char *p, const char *, int); +SOAP_FMAC1 long* SOAP_FMAC2 soap_inlong(struct soap*, const char *tag, long *p, const char *, int); +SOAP_FMAC1 LONG64* SOAP_FMAC2 soap_inLONG64(struct soap*, const char *tag, LONG64 *p, const char *, int); +SOAP_FMAC1 short* SOAP_FMAC2 soap_inshort(struct soap*, const char *tag, short *p, const char *, int); +SOAP_FMAC1 float* SOAP_FMAC2 soap_infloat(struct soap*, const char *tag, float *p, const char *, int); +SOAP_FMAC1 double* SOAP_FMAC2 soap_indouble(struct soap*, const char *tag, double *p, const char *, int); +SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_inunsignedByte(struct soap*, const char *tag, unsigned char *p, const char *, int); +SOAP_FMAC1 unsigned short* SOAP_FMAC2 soap_inunsignedShort(struct soap*, const char *tag, unsigned short *p, const char *, int); +SOAP_FMAC1 unsigned int* SOAP_FMAC2 soap_inunsignedInt(struct soap*, const char *tag, unsigned int *p, const char *, int); +SOAP_FMAC1 unsigned long* SOAP_FMAC2 soap_inunsignedLong(struct soap*, const char *tag, unsigned long *p, const char *, int); +SOAP_FMAC1 ULONG64* SOAP_FMAC2 soap_inULONG64(struct soap*, const char *tag, ULONG64 *p, const char *, int); +SOAP_FMAC1 char** SOAP_FMAC2 soap_instring(struct soap*, const char *tag, char **p, const char *, int, int, long, long, const char*); +SOAP_FMAC1 char** SOAP_FMAC2 soap_inliteral(struct soap*, const char *tag, char **p); + +#ifndef WITH_LEAN +SOAP_FMAC1 time_t* SOAP_FMAC2 soap_indateTime(struct soap*, const char *tag, time_t *p, const char *, int); +#endif + +#if !defined(WITH_LEAN) || defined(WITH_COOKIES) +SOAP_FMAC1 time_t SOAP_FMAC2 soap_timegm(struct tm*); +#endif + +#ifndef WITH_LEANER +SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwstring(struct soap*, const char *tag, wchar_t **p, const char *, int, int, long, long, const char*); +SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwliteral(struct soap*, const char *tag, wchar_t **p); +#endif + +SOAP_FMAC1 int SOAP_FMAC2 soap_outbyte(struct soap*, const char *tag, int id, const char *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outshort(struct soap*, const char *tag, int id, const short *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outint(struct soap*, const char *tag, int id, const int *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outlong(struct soap*, const char *tag, int id, const long *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outLONG64(struct soap*, const char *tag, int id, const LONG64 *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outfloat(struct soap*, const char *tag, int id, const float *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outdouble(struct soap*, const char *tag, int id, const double *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedByte(struct soap*, const char *tag, int id, const unsigned char *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedShort(struct soap*, const char *tag, int id, const unsigned short *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedInt(struct soap*, const char *tag, int id, const unsigned int *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedLong(struct soap*, const char *tag, int id, const unsigned long *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outULONG64(struct soap*, const char *tag, int id, const ULONG64 *p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outstring(struct soap*, const char *tag, int id, char *const*p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral(struct soap*, const char *tag, char *const*p, const char *type); + +#ifndef WITH_LEAN +SOAP_FMAC1 int SOAP_FMAC2 soap_outdateTime(struct soap*, const char *tag, int id, const time_t *p, const char *, int); +#endif + +#ifndef WITH_LEANER +SOAP_FMAC1 int SOAP_FMAC2 soap_outwstring(struct soap*, const char *tag, int id, wchar_t *const*p, const char *, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral(struct soap*, const char *tag, wchar_t *const*p, const char *type); +#endif + +#ifndef WITH_LEANER +SOAP_FMAC1 int SOAP_FMAC2 soap_attachment(struct soap *, const char*, int, const void*, const void*, int, const char*, const char*, const char*, const char*, int); +SOAP_FMAC1 int SOAP_FMAC2 soap_move(struct soap*, ULONG64); +SOAP_FMAC1 ULONG64 SOAP_FMAC2 soap_tell(struct soap*); +SOAP_FMAC1 char* SOAP_FMAC2 soap_dime_option(struct soap*, unsigned short, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_getdime(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_putdime(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_getmime(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr(struct soap*, struct soap_multipart*); +SOAP_FMAC1 int SOAP_FMAC2 soap_putmime(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_dime(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_set_mime(struct soap*, const char *boundary, const char *start); +SOAP_FMAC1 void SOAP_FMAC2 soap_clr_dime(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime(struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_set_dime_attachment(struct soap*, const char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option); +SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment(struct soap*, const char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description); +SOAP_FMAC1 void SOAP_FMAC2 soap_post_check_mime_attachments(struct soap *soap); +SOAP_FMAC1 int SOAP_FMAC2 soap_check_mime_attachments(struct soap *soap); +SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_recv_mime_attachment(struct soap *soap, void *handle); +SOAP_FMAC1 int SOAP_FMAC2 soap_match_cid(struct soap*, const char*, const char*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_rand_uuid(struct soap*, const char*); +#endif + +SOAP_FMAC1 int SOAP_FMAC2 soap_register_plugin_arg(struct soap*, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void*); +SOAP_FMAC1 void* SOAP_FMAC2 soap_lookup_plugin(struct soap*, const char*); + +SOAP_FMAC1 const char* SOAP_FMAC2 soap_attr_value(struct soap *soap, const char *name, int flag, int occurs); +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_extend_url(struct soap *soap, const char*, const char*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_extend_url_query(struct soap *soap, const char*, const char*); +SOAP_FMAC1 void SOAP_FMAC2 soap_url_query(struct soap *soap, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_encode_url(const char*, char*, int); +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 struct soap_cookie* SOAP_FMAC2 soap_set_cookie(struct soap*, const char*, const char*, const char*, const char*); +SOAP_FMAC1 struct soap_cookie* SOAP_FMAC2 soap_cookie(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 struct soap_cookie* SOAP_FMAC2 soap_cookie_env(struct soap*, const char*, const char*, const char*, short); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_cookie_value(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 const char* SOAP_FMAC2 soap_env_cookie_value(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 time_t SOAP_FMAC2 soap_cookie_expire(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_set_cookie_expire(struct soap*, const char*, long, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_set_cookie_secure(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_set_cookie_session(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_clr_cookie_session(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 void SOAP_FMAC2 soap_clr_cookie(struct soap*, const char*, const char*, const char*); +SOAP_FMAC1 int SOAP_FMAC2 soap_getenv_cookies(struct soap*); +SOAP_FMAC1 void SOAP_FMAC2 soap_free_cookies(struct soap*); +SOAP_FMAC1 struct soap_cookie* SOAP_FMAC2 soap_copy_cookies(struct soap*, const struct soap*); +SOAP_FMAC1 int SOAP_FMAC2 soap_putsetcookies(struct soap *soap); +SOAP_FMAC1 int SOAP_FMAC2 soap_putcookies(struct soap *soap, const char *domain, const char *path, int secure); +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* declare global SOAP header and fault processing functions, unless WITH_STATIC is defined (generated in soapXYXLib code) */ +#ifndef WITH_STATIC +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_fault_subcode(struct soap*); +SOAP_FMAC3 const char * SOAP_FMAC4 soap_fault_string(struct soap*); +SOAP_FMAC3 const char * SOAP_FMAC4 soap_fault_detail(struct soap*); +SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap*); +SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap*); +SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap*); +SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap*); +SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap*); +SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap*); +#endif + +#ifdef __cplusplus + +/* C++ templates (for generated C++ only, not needed nor used in generated C code) */ + +template +struct soap_block +{ + static T *push(struct soap *soap, struct soap_blist *b) + { + if (!b) + b = soap->blist; + if (!b) + return NULL; + T *p = (T*)soap_push_block_max(soap, b, sizeof(T)); + if (p) + SOAP_PLACEMENT_NEW(soap, p, T); + return p; + } + static void pop(struct soap *soap, struct soap_blist *b) + { + if (!b) + b = soap->blist; + if (!b || !b->head) + return; + ((T*)(b->head + 1))->~T(); + soap_pop_block(soap, b); + } + static void save(struct soap *soap, struct soap_blist *b, T *p) + { + if (!b) + b = soap->blist; + for (T *q = (T*)soap_first_block(soap, b); q; q = (T*)soap_next_block(soap, b)) + { + soap_update_pointers(soap, (const char*)p, (const char*)q, sizeof(T)); + *p++ = *q; + q->~T(); + } + soap_end_block(soap, b); + } + static void end(struct soap *soap, struct soap_blist *b) + { + if (!b) + b = soap->blist; + for (T *p = (T*)soap_first_block(soap, b); p; p = (T*)soap_next_block(soap, b)) + p->~T(); + soap_end_block(soap, b); + } +}; + +#endif + +#endif /* STDSOAP_H */ diff --git a/unit_test/test/onvif/onvif-discover/wsdd.nsmap b/unit_test/test/onvif/onvif-discover/wsdd.nsmap new file mode 100644 index 0000000..079a4b5 --- /dev/null +++ b/unit_test/test/onvif/onvif-discover/wsdd.nsmap @@ -0,0 +1,14 @@ + +#include "stdsoap2.h" +/* This defines the global XML namespaces[] table to #include and compile + The first four entries are mandatory and should not be removed */ +SOAP_NMAC 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 }, + { "wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing", "http://www.w3.org/2005/08/addressing", NULL }, + { "wsdd", "http://schemas.xmlsoap.org/ws/2005/04/discovery", NULL, NULL }, + { "tdn", "http://www.onvif.org/ver10/network/wsdl", NULL, NULL }, + { NULL, NULL, NULL, NULL} /* end of namespaces[] */ + };