Add revision: v1.12.2

remotes/origin/1.12 1.12.2
Governikus 2017-07-03 09:33:28 +02:00
parent 2fdb3c0c2f
commit c916899e0e
1033 changed files with 32174 additions and 23363 deletions

View File

@ -16,6 +16,10 @@ IF(POLICY CMP0054)
CMAKE_POLICY(SET CMP0054 NEW)
ENDIF()
IF(POLICY CMP0063)
CMAKE_POLICY(SET CMP0063 NEW)
ENDIF()
# "tools.only" can be defined to disable the normal build and enable
# cmdline "tools" only. For example: "make format" or "make package_source"
IF(tools.only)
@ -25,7 +29,7 @@ ELSE()
ENDIF()
PROJECT(AusweisApp2 VERSION 1.10.3 LANGUAGES ${LANGUAGES})
PROJECT(AusweisApp2 VERSION 1.12.2 LANGUAGES ${LANGUAGES})
# Set TWEAK if not defined in PROJECT_VERSION above to
# have a valid tweak version without propagating it

View File

@ -36,7 +36,7 @@ CALL_GRAPH = YES
CALLER_GRAPH = YES
GRAPHICAL_HIERARCHY = NO
DIRECTORY_GRAPH = NO
DOT_IMAGE_FORMAT = png
DOT_IMAGE_FORMAT = svg
INTERACTIVE_SVG = NO
DOT_GRAPH_MAX_NODES = 50

View File

@ -44,7 +44,7 @@ Auf diese Nutzungsbedingungen ist ausschließlich deutsches Recht unter Ausschlu
Anhang
Eingearbeitete Open Source-Komponenten
Qt, OpenSSL, http_parser, Qhttpserver und Fervor.
Qt, OpenSSL und http_parser.
@ -466,7 +466,7 @@ Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbeding
Qt
Lizenz: LGPL v3
Version: 5.7.0
Version: 5.8.0
Adresse: https://www.qt.io/
http_parser
@ -474,16 +474,6 @@ http_parser
Version: 2.7.1
Adresse: https://github.com/nodejs/http-parser/
qhttpserver
Lizenz: MIT
Version: 0.1.0
Adresse: https://github.com/nikhilm/qhttpserver/
fervor
Lizenz: MIT
Version: 9980f27
Adresse: https://github.com/pypt/fervor/
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
@ -694,41 +684,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
Copyright (c) 2012 Linas Valiukas and others.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Copyright (C) 2011-2014 Nikhil Marathe <nsm.nikhil@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.

View File

@ -112,7 +112,7 @@ Parameter notwendig um das APK zu signieren.
-DAPK_SIGN_KEYSTORE_PSW=123456
Wie schon bei der Toolchain wird standardmäßig die Architektur "armeabi-v7a" verwendet.
Dies kann mittels CMake Parameter "-DANDROID_ABI=x86" verändert werden.
Dies kann mittels CMake Parameter "-DCMAKE_ANDROID_ARCH_ABI=x86" verändert werden.

View File

@ -1,64 +0,0 @@
# Copyright (c) 2014, Pavel Rojtberg
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
macro(android_ndk_gdb_enable)
if(ANDROID)
# create custom target that depends on the real target so it gets executed afterwards
add_custom_target(NDK_GDB ALL)
set(NDK_GDB_SOLIB_PATH ${PROJECT_BINARY_DIR}/dist/obj/local/${ANDROID_NDK_ABI_NAME}/)
file(MAKE_DIRECTORY ${NDK_GDB_SOLIB_PATH})
# 1. generate essential Android Makefiles
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/dist/jni)
if(NOT EXISTS ${PROJECT_BINARY_DIR}/dist/jni/Android.mk)
file(WRITE ${PROJECT_BINARY_DIR}/dist/jni/Android.mk "APP_ABI := ${ANDROID_NDK_ABI_NAME}\n")
endif()
if(NOT EXISTS ${PROJECT_BINARY_DIR}/dist/jni/Application.mk)
file(WRITE ${PROJECT_BINARY_DIR}/dist/jni/Application.mk "APP_ABI := ${ANDROID_NDK_ABI_NAME}\n")
endif()
# 2. generate gdb.setup
get_directory_property(PROJECT_INCLUDES DIRECTORY ${PROJECT_SOURCE_DIR} INCLUDE_DIRECTORIES)
string(REGEX REPLACE ";" " " PROJECT_INCLUDES "${PROJECT_INCLUDES}")
file(WRITE ${PROJECT_BINARY_DIR}/dist/libs/${ANDROID_NDK_ABI_NAME}/gdb.setup "set solib-search-path ${NDK_GDB_SOLIB_PATH}\n")
file(APPEND ${PROJECT_BINARY_DIR}/dist/libs/${ANDROID_NDK_ABI_NAME}/gdb.setup "directory ${PROJECT_INCLUDES}\n")
endif()
endmacro()
macro(android_ndk_gdb_debuggable TARGET_NAME)
if(ANDROID)
# create custom target that depends on the real target so it gets executed afterwards
add_dependencies(NDK_GDB ${TARGET_NAME})
add_custom_command(TARGET NDK_GDB POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${TARGET_NAME}> ${NDK_GDB_SOLIB_PATH})
endif()
endmacro()

View File

@ -6,33 +6,38 @@ IF(MAC OR LINUX OR WIN32)
ENDIF()
MACRO(ADD_APPCAST_FILE _files _system)
SET(HASHFILE_ENDING "sha256")
STRING(TIMESTAMP APPCAST_DATE "%Y-%m-%dT%H:%M:%S")
FOREACH(filePath ${_files})
FILE_SIZE(fileSize ${filePath})
GET_FILENAME_COMPONENT(file ${filePath} NAME)
IF(NOT DEFINED fileSize)
MESSAGE(FATAL_ERROR "Cannot get file size of: ${file}")
ENDIF()
GET_FILENAME_COMPONENT(file ${filePath} NAME)
MESSAGE(STATUS "Processing: ${file}")
IF(NOT "${_system}" STREQUAL "SOURCES")
FILE(READ ${PACKAGING_DIR}/updater/Appcast.item.xml.in item)
FILE(READ ${PACKAGING_DIR}/updater/Appcast.item.json.in item)
STRING(REPLACE "AusweisApp2-" "" APPCAST_FILE_VERSION ${file})
STRING(REPLACE ".dmg" "" APPCAST_FILE_VERSION ${APPCAST_FILE_VERSION})
STRING(REPLACE ".msi" "" APPCAST_FILE_VERSION ${APPCAST_FILE_VERSION})
STRING(TIMESTAMP currentDate "%Y-%m-%dT%H:%M:%S")
STRING(REPLACE "APPCAST_DATE" ${currentDate} item ${item})
STRING(REPLACE "APPCAST_DOWNLOAD_URL" "${APPCAST_URL}/${file}" item ${item})
STRING(REPLACE "APPCAST_DATE" "${APPCAST_DATE}" item ${item})
STRING(REPLACE "APPCAST_PLATFORM" ${_system} item ${item})
STRING(REPLACE "APPCAST_VERSION" "${APPCAST_FILE_VERSION}" item ${item})
STRING(REPLACE "APPCAST_OS" ${_system} item ${item})
STRING(REPLACE "APPCAST_PACKAGE_SIZE" "${fileSize}" item ${item})
STRING(REPLACE "APPCAST_URL" "${APPCAST_URL}" item ${item})
SET(APPCAST_ITEMS "${APPCAST_ITEMS}\n${item}")
STRING(REPLACE "APPCAST_URL" "${APPCAST_URL}/${file}" item ${item})
STRING(REPLACE "APPCAST_SIZE" "${fileSize}" item ${item})
STRING(REPLACE "APPCAST_CHECKSUM" "${APPCAST_URL}/${file}.${HASHFILE_ENDING}" item ${item})
STRING(REPLACE "APPCAST_NOTES" "${APPCAST_URL}/ReleaseNotes.html#${APPCAST_FILE_VERSION}" item ${item})
SET(APPCAST_ITEMS "${APPCAST_ITEMS}${item},")
ENDIF()
FILE(SHA256 ${filePath} fileHash)
FILE(WRITE ${filePath}.sha256 "${fileHash} ${file}\n")
FILE(WRITE ${filePath}.${HASHFILE_ENDING} "${fileHash} ${file}\n")
ENDFOREACH()
ENDMACRO()
@ -54,7 +59,8 @@ IF(MAC OR LINUX OR WIN32)
ENDIF()
IF(APPCAST_ITEMS)
CONFIGURE_FILE(${PACKAGING_DIR}/updater/Appcast.xml.in ${PROJECT_BINARY_DIR}/Appcast.xml @ONLY)
STRING(REGEX REPLACE ",$" "" APPCAST_ITEMS "${APPCAST_ITEMS}")
CONFIGURE_FILE(${PACKAGING_DIR}/updater/Appcast.json.in ${PROJECT_BINARY_DIR}/Appcast.json @ONLY)
ENDIF()
ENDIF()

View File

@ -5,6 +5,7 @@ ADD_DEFINITIONS(-DQT_NO_CAST_TO_ASCII)
ADD_DEFINITIONS(-DQT_RESTRICTED_CAST_FROM_ASCII)
ADD_DEFINITIONS(-DQT_NO_FOREACH)
ADD_DEFINITIONS(-DQT_NO_KEYWORDS)
ADD_DEFINITIONS(-DQT_NO_EXCEPTIONS)
IF(QT_VENDOR STREQUAL "Governikus")
ADD_DEFINITIONS(-DGOVERNIKUS_QT)
@ -30,11 +31,13 @@ IF(MSVC)
ELSE()
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
STRING(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Wcast-qual -Wshadow -Wvla")
ADD_FLAG(-fno-exceptions)
ADD_FLAG(-fstack-protector-strong -fstack-protector)
ADD_FLAG(-fuse-ld=gold VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -fuse-ld=gold)
ADD_FLAG(-Wfloat-conversion)
ADD_FLAG(-Wconversion)
ADD_FLAG(-Wloop-analysis)
ADD_FLAG(-Wlogical-op)
ADD_FLAG(-Wmisleading-indentation)
@ -43,6 +46,17 @@ ELSE()
ADD_FLAG(-Wcovered-switch-default)
ADD_FLAG(-Wno-gnu-zero-variadic-macro-arguments) # Qt (qDebug) is not compatible
IF(ANDROID)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64")
SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
ENDIF()
IF("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE")
ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -flto)
ENDIF()
IF(WARNINGS_ARE_ERRORS AND NOT CMAKE_GENERATOR STREQUAL Xcode)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
ENDIF()
@ -58,10 +72,12 @@ ELSE()
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
IF(SANITIZER STREQUAL "address")
ADD_FLAG("-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=address)
ELSEIF(SANITIZER STREQUAL "undefined")
ADD_FLAG("-fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=undefined)
IF(SANITIZER)
IF(CMAKE_COMPILER_IS_GNUCXX)
ADD_FLAG("-fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=address -fsanitize=undefined)
ELSE()
ADD_FLAG("-fsanitize=address -fsanitize=undefined -fsanitize=unsigned-integer-overflow -fsanitize-address-use-after-scope -fno-omit-frame-pointer -fno-optimize-sibling-calls" LINK -fsanitize=address -fsanitize=undefined)
ENDIF()
ENDIF()
ENDIF()

View File

@ -110,3 +110,17 @@ IF(DVCS_FOUND)
CHECK_DVCS()
ENDIF()
ENDIF()
FUNCTION(CHECK_VERSION _out)
IF(PROJECT_VERSION_MINOR)
MATH(EXPR _odd "${PROJECT_VERSION_MINOR} % 2")
IF(_odd OR dvcs_revision)
SET(${_out} TRUE PARENT_SCOPE)
RETURN()
ENDIF()
ENDIF()
SET(${_out} FALSE PARENT_SCOPE)
ENDFUNCTION()
CHECK_VERSION(IS_DEVELOPER_VERSION)

View File

@ -87,10 +87,6 @@ FUNCTION(GET_FILE_EXTENSIONS _result)
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
SET(FILE_EXTENSIONS *.cpp)
OPTION(WITH_HEADER "Add header to target; only useful for some IDEs" OFF)
IF(WITH_HEADER)
LIST(APPEND FILE_EXTENSIONS *.h)
ENDIF()
IF(IOS)
LIST(APPEND FILE_EXTENSIONS *.m *.mm)
ENDIF()
@ -257,7 +253,7 @@ IF(UNIX AND NOT ANDROID AND NOT APPLE AND NOT CYGWIN AND NOT BSD)
SET(LINUX true)
ENDIF()
IF(LINUX OR WIN32 OR MAC OR CYGWIN OR BSD)
IF((WIN32 AND NOT WINDOWS_STORE) OR LINUX OR MAC OR CYGWIN OR BSD)
SET(DESKTOP true)
ENDIF()

View File

@ -32,12 +32,18 @@ IF(WIN32)
FETCH_TARGET_LOCATION(libSvg "Qt5::Svg")
FETCH_TARGET_LOCATION(pluginSvg "Qt5::QSvgPlugin")
FETCH_TARGET_LOCATION(pluginGif "Qt5::QGifPlugin")
FETCH_TARGET_LOCATION(platformWin "Qt5::QWindowsIntegrationPlugin")
FETCH_TARGET_LOCATION(pluginJpeg "Qt5::QJpegPlugin")
IF(WINDOWS_STORE)
FETCH_TARGET_LOCATION(platformWin "Qt5::QWinRTIntegrationPlugin")
ELSE()
FETCH_TARGET_LOCATION(platformWin "Qt5::QWindowsIntegrationPlugin")
ENDIF()
INSTALL(TARGETS AusweisApp DESTINATION . COMPONENT Application)
INSTALL(FILES ${libSvg} DESTINATION . COMPONENT Runtime)
INSTALL(FILES ${pluginSvg} DESTINATION imageformats COMPONENT Runtime)
INSTALL(FILES ${pluginGif} DESTINATION imageformats COMPONENT Runtime)
INSTALL(FILES ${pluginJpeg} DESTINATION imageformats COMPONENT Runtime)
INSTALL(FILES ${platformWin} DESTINATION platforms COMPONENT Runtime)
INSTALL(CODE
@ -52,6 +58,7 @@ IF(WIN32)
ELSEIF(APPLE AND NOT IOS)
SET(MACOS_BUNDLE_PLUGINS_DIR ../PlugIns)
SET(MACOS_BUNDLE_FRAMEWORKS_DIR ../Frameworks)
SET(MACOS_BUNDLE_RESOURCES_DIR ../Resources)
# We need to include the following (i.e. all) image format plug-ins,
# since those seem to be loaded upon program start-up. Not including
@ -73,6 +80,19 @@ ELSEIF(APPLE AND NOT IOS)
ENDFOREACH()
ENDFOREACH()
FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
SET(_dir "${QT_HOST_PREFIX}/qml")
FILE(GLOB_RECURSE DYLIB "${_dir}/${entry}/*.dylib")
FOREACH(_lib ${DYLIB})
FILE(RELATIVE_PATH _lib_dest "${_dir}" "${_lib}")
IF(NOT _lib_dest MATCHES "XmlListModel|Particles.2|LocalStorage") # blacklist not needed stuff
GET_FILENAME_COMPONENT(_lib_dest_dir ${_lib_dest} DIRECTORY)
INSTALL(FILES ${_lib} DESTINATION ${MACOS_BUNDLE_RESOURCES_DIR}/qml_stationary/${_lib_dest_dir} COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Resources/qml_stationary/${_lib_dest}")
ENDIF()
ENDFOREACH()
ENDFOREACH()
INSTALL(TARGETS AusweisApp DESTINATION . COMPONENT Application)
INSTALL(FILES ${platformMac} DESTINATION ${MACOS_BUNDLE_PLUGINS_DIR}/platforms COMPONENT Runtime)
@ -80,8 +100,9 @@ ELSEIF(APPLE AND NOT IOS)
"
${SEARCH_ADDITIONAL_DIRS}
file(GLOB_RECURSE QTPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_PLUGINS_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
file(GLOB_RECURSE QtQuickPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_RESOURCES_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
INCLUDE(BundleUtilities)
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\${QTPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\${QTPLUGINS};\${QtQuickPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtCore.framework")
@ -91,11 +112,11 @@ ELSEIF(APPLE AND NOT IOS)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework")
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQml.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
ENDIF()
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQml.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickControls2.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickTemplates2.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickWidgets.framework")
FOREACH (OPENSSL_LIBRARY ${OPENSSL_LIBRARIES})
GET_FILENAME_COMPONENT(OPENSSL_LIBRARY_REAL ${OPENSSL_LIBRARY} REALPATH)
@ -112,27 +133,50 @@ ELSEIF(IOS)
ELSEIF(ANDROID)
SET(ANDROID_DEST libs/${ANDROID_ABI})
SET(ANDROID_PACKAGE_SRC_DIR ${PROJECT_BINARY_DIR}/package-src-dir)
SET(ANDROID_DEST libs/${CMAKE_ANDROID_ARCH_ABI})
SET(PERMISSIONS PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
INSTALL(TARGETS AusweisApp DESTINATION ${ANDROID_DEST} ${PERMISSIONS} COMPONENT Application)
SET(RESOURCES_IMG_ANDROID_DIR ${RESOURCES_DIR}/images/android)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/ldpi/npa.png DESTINATION res/drawable-ldpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/mdpi/npa.png DESTINATION res/drawable-mdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/hdpi/npa.png DESTINATION res/drawable-hdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/xhdpi/npa.png DESTINATION res/drawable-xhdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/xxhdpi/npa.png DESTINATION res/drawable-xxhdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/xxxhdpi/npa.png DESTINATION res/drawable-xxxhdpi COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/nfc_tech_filter.xml DESTINATION res/xml COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/colors.xml DESTINATION res/values COMPONENT Runtime)
IF(IS_DEVELOPER_VERSION)
SET(ANDROID_LAUNCHER_ICON "npa_beta.png")
SET(ANDROID_PACKAGE_NAME "com.governikus.ausweisapp2.dev")
ELSE()
SET(ANDROID_LAUNCHER_ICON "npa.png")
SET(ANDROID_PACKAGE_NAME "com.governikus.ausweisapp2")
ENDIF()
FOREACH(entry ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/drawable-${entry} COMPONENT Runtime RENAME npa.png)
ENDFOREACH()
INSTALL(FILES ${PACKAGING_DIR}/android/nfc_tech_filter.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/xml COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/styles.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime)
FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java")
INSTALL(FILES ${JAVA_FILES} DESTINATION src COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/IAusweisApp2Sdk.aidl DESTINATION src/com/governikus/ausweisapp2/ COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/IAusweisApp2SdkCallback.aidl DESTINATION src/com/governikus/ausweisapp2/ COMPONENT Runtime)
INSTALL(FILES ${JAVA_FILES} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/src COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/IAusweisApp2Sdk.aidl DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/src/com/governikus/ausweisapp2/ COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/IAusweisApp2SdkCallback.aidl DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/src/com/governikus/ausweisapp2/ COMPONENT Runtime)
SET(TRANSLATION_DESTINATION assets/translations)
SET(DEFAULT_FILE_DESTINATION assets)
IF(VERSION_DVCS)
SET(ANDROID_VERSION_NAME ${VERSION_DVCS})
ELSE()
SET(ANDROID_VERSION_NAME ${PROJECT_VERSION})
ENDIF()
CONFIGURE_FILE(${PACKAGING_DIR}/android/AndroidManifest.xml.in ${ANDROID_PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
GET_FILENAME_COMPONENT(ANDROID_TOOLCHAIN_MACHINE_NAME "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}" NAME)
STRING(REGEX REPLACE "-$" "" ANDROID_TOOLCHAIN_MACHINE_NAME "${ANDROID_TOOLCHAIN_MACHINE_NAME}")
STRING(REGEX MATCH "/toolchains/(.*)/prebuilt/" _unused "${CMAKE_CXX_ANDROID_TOOLCHAIN_PREFIX}")
STRING(REGEX REPLACE "-${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}$" "" ANDROID_TOOLCHAIN_PREFIX "${CMAKE_MATCH_1}")
SET(ANDROID_DEPLOYMENT_SETTINGS ${PROJECT_BINARY_DIR}/libAusweisApp2.so-deployment-settings.json CACHE INTERNAL "apk deployment" FORCE)
SET(ANDROID_APP_BINARY "${CMAKE_INSTALL_PREFIX}/${ANDROID_DEST}/libAusweisApp2.so")
CONFIGURE_FILE(${PACKAGING_DIR}/android/libAusweisApp2.so-deployment-settings.json.in ${ANDROID_DEPLOYMENT_SETTINGS} @ONLY)
SET(TRANSLATION_DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/assets/translations)
SET(DEFAULT_FILE_DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/assets)
ELSEIF(UNIX)
IF(BUILD_SHARED_LIBS)
@ -201,8 +245,13 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.json DESTINATION ${DEFAULT_FILE
# qtlogging.ini
INSTALL(FILES ${RESOURCES_DIR}/qtlogging.ini DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
# qml directory
IF(IOS OR ANDROID)
# qml directories
IF(DESKTOP)
INSTALL(DIRECTORY ${RESOURCES_DIR}/qml_stationary DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
INSTALL(DIRECTORY ${QT_HOST_PREFIX}/qml/${entry} DESTINATION ${DEFAULT_FILE_DESTINATION}/qml_stationary COMPONENT Runtime PATTERN "*.dylib" EXCLUDE)
ENDFOREACH()
ELSE()
INSTALL(DIRECTORY ${RESOURCES_DIR}/qml DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
ENDIF()

View File

@ -4,26 +4,27 @@ IF(MINGW)# AND CMAKE_VERSION VERSION_LESS 3.3.0) # see https://public.kitware.co
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")
ENDIF()
SET(MIN_QT_VERSION 5.7)
SET(MIN_QT_VERSION 5.8)
FIND_PACKAGE(Qt5Core ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Network ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Xml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Svg ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5PrintSupport ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5LinguistTools ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED)
IF(DESKTOP)
FIND_PACKAGE(Qt5Widgets ${MIN_QT_VERSION} REQUIRED)
ENDIF()
FIND_PACKAGE(Qt5QuickWidgets ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5PrintSupport ${MIN_QT_VERSION} REQUIRED)
IF(ANDROID OR IOS OR "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED)
IF(WIN32)
FIND_PACKAGE(Qt5WinExtras ${MIN_QT_VERSION} REQUIRED)
ENDIF()
ENDIF()
IF(LINUX OR ANDROID OR IOS)
FIND_PACKAGE(Qt5Bluetooth ${MIN_QT_VERSION} REQUIRED)
ENDIF()
@ -115,4 +116,5 @@ ENDIF()
IF("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
FIND_PACKAGE(Qt5Test ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickTest ${MIN_QT_VERSION} REQUIRED)
ENDIF()

View File

@ -6,22 +6,17 @@ MESSAGE(STATUS "CMAKE_LIBRARY_PATH: ${CMAKE_LIBRARY_PATH}")
MESSAGE(STATUS "CMAKE_SYSTEM_PREFIX_PATH: ${CMAKE_SYSTEM_PREFIX_PATH}")
MESSAGE(STATUS "CMAKE_SYSTEM_INCLUDE_PATH: ${CMAKE_SYSTEM_INCLUDE_PATH}")
MESSAGE(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
MESSAGE(STATUS "CMAKE_SYSROOT: ${CMAKE_SYSROOT}")
IF(ANDROID)
MESSAGE(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}")
MESSAGE(STATUS "CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG: ${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}")
MESSAGE(STATUS "CMAKE_ANDROID_ARCH_ABI: ${CMAKE_ANDROID_ARCH_ABI}")
MESSAGE(STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}")
MESSAGE(STATUS "CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION: ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}")
MESSAGE(STATUS "ANDROID_SDK: ${ANDROID_SDK}")
MESSAGE(STATUS "ANDROID_NDK: ${ANDROID_NDK}")
MESSAGE(STATUS "ANDROID_NDK_RELEASE: ${ANDROID_NDK_RELEASE}")
MESSAGE(STATUS "ANDROID_NDK_HOST_SYSTEM_NAME: ${ANDROID_NDK_HOST_SYSTEM_NAME}")
MESSAGE(STATUS "ANDROID_ABI: ${ANDROID_ABI}")
MESSAGE(STATUS "ANDROID_NATIVE_API_LEVEL: ${ANDROID_NATIVE_API_LEVEL}")
MESSAGE(STATUS "ANDROID_SYSROOT: ${ANDROID_SYSROOT}")
MESSAGE(STATUS "ANDROID_COMPILER_VERSION: ${ANDROID_COMPILER_VERSION}")
MESSAGE(STATUS "ANDROID_TOOLCHAIN_MACHINE_NAME: ${ANDROID_TOOLCHAIN_MACHINE_NAME}")
MESSAGE(STATUS "ANDROID_TOOLCHAIN_NAME: ${ANDROID_TOOLCHAIN_NAME}")
MESSAGE(STATUS "ANDROID_TOOLCHAIN_ROOT: ${ANDROID_TOOLCHAIN_ROOT}")
MESSAGE(STATUS "ANDROID_BUILD_TOOLS_REVISION: ${ANDROID_BUILD_TOOLS_REVISION}")
ELSEIF(IOS)
MESSAGE(STATUS "CMAKE_IOS_SDK_ROOT: ${CMAKE_IOS_SDK_ROOT}")

View File

@ -4,7 +4,7 @@
SET(FILENAME ${PROJECT_NAME}-${PROJECT_VERSION})
IF(ANDROID)
SET(FILENAME ${FILENAME}-${ANDROID_ABI})
SET(FILENAME ${FILENAME}-${CMAKE_ANDROID_ARCH_ABI})
ENDIF()
IF(DEFINED dvcs_distance)
@ -160,55 +160,48 @@ ELSEIF(ANDROID)
ENDIF()
MESSAGE(STATUS "Using androiddeployqt: ${androiddeployqt}")
SET(ANDROID_APK_DIR ${CMAKE_INSTALL_PREFIX})
SET(DEPLOYMENT_SETTINGS ${PROJECT_BINARY_DIR}/libAusweisApp2.so-deployment-settings.json)
SET(PACKAGE_SRC_DIR ${PROJECT_BINARY_DIR}/package-src-dir)
IF("${ANDROID_ABI}" STREQUAL "x86")
SET(ANDROID_TOOLCHAIN_PREFIX x86)
SET(ANDROID_TOOL_PREFIX i686-linux-android)
ELSEIF("${ANDROID_ABI}" STREQUAL "armeabi-v7a")
SET(ANDROID_TOOLCHAIN_PREFIX arm-linux-androideabi)
SET(ANDROID_TOOL_PREFIX arm-linux-androideabi)
ELSEIF("${ANDROID_ABI}" STREQUAL "arm64-v8a")
SET(ANDROID_TOOLCHAIN_PREFIX aarch64-linux-android)
SET(ANDROID_TOOL_PREFIX aarch64-linux-android)
ELSE()
MESSAGE(FATAL_ERROR "Unsupported ANDROID_ABI: ${ANDROID_ABI}")
ENDIF()
CONFIGURE_FILE(${PACKAGING_DIR}/android/AndroidManifest.xml.in ${PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
CONFIGURE_FILE(${PACKAGING_DIR}/android/libAusweisApp2.so-deployment-settings.json.in ${DEPLOYMENT_SETTINGS} @ONLY)
OPTION(ANDROID_USE_GRADLE "Use gradle for androiddeployqt" OFF)
IF(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE")
IF(APK_SIGN_KEYSTORE AND APK_SIGN_KEYSTORE_ALIAS AND APK_SIGN_KEYSTORE_PSW)
MESSAGE(STATUS "Release build will be signed using: ${APK_SIGN_KEYSTORE} | Alias: ${APK_SIGN_KEYSTORE_ALIAS}")
SET(DEPLOY_CMD_SIGN --sign ${APK_SIGN_KEYSTORE} ${APK_SIGN_KEYSTORE_ALIAS} --storepass ${APK_SIGN_KEYSTORE_PSW} --digestalg SHA-256 --sigalg SHA256WithRSA)
SET(APK_FILE QtApp-release-signed.apk)
IF(ANDROID_USE_GRADLE)
SET(APK_FILE dist-release-signed.apk)
ELSE()
SET(APK_FILE QtApp-release-signed.apk)
ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!")
ENDIF()
ELSE()
SET(APK_FILE QtApp-debug.apk)
IF(ANDROID_USE_GRADLE)
SET(APK_FILE dist-debug.apk)
ELSE()
SET(APK_FILE QtApp-debug.apk)
ENDIF()
ENDIF()
SET(DEPLOY_CMD ${androiddeployqt} --verbose --input ${DEPLOYMENT_SETTINGS} --output ${ANDROID_APK_DIR} ${DEPLOY_CMD_SIGN})
SET(DESTINATION_APK_FILE ${CMAKE_INSTALL_PREFIX}/bin/${CPACK_PACKAGE_FILE_NAME}.apk)
SET(DEPLOY_CMD ${androiddeployqt} --verbose --input ${ANDROID_DEPLOYMENT_SETTINGS} --output ${CMAKE_INSTALL_PREFIX} ${DEPLOY_CMD_SIGN})
IF(ANDROID_USE_GRADLE)
SET(DEPLOY_CMD ${DEPLOY_CMD} --gradle)
SET(SOURCE_APK_FILE ${CMAKE_INSTALL_PREFIX}/build/outputs/apk/${APK_FILE})
ELSE()
SET(SOURCE_APK_FILE ${CMAKE_INSTALL_PREFIX}/bin/${APK_FILE})
ENDIF()
SET(DESTINATION_APK_FILE ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.apk)
# Add DEPENDS install someday
# http://public.kitware.com/Bug/view.php?id=8438
ADD_CUSTOM_TARGET(apk
COMMAND ${DEPLOY_CMD}
COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_INSTALL_PREFIX}/bin/${APK_FILE} ${DESTINATION_APK_FILE})
COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_APK_FILE} ${DESTINATION_APK_FILE})
FIND_PROGRAM(jarsigner jarsigner CMAKE_FIND_ROOT_PATH_BOTH)
IF(jarsigner)
IF(APK_SIGN_KEYSTORE)
SET(jarsigner_keystore -keystore ${APK_SIGN_KEYSTORE})
ENDIF()
ADD_CUSTOM_TARGET(verify.signature
COMMAND ${jarsigner} -verify -verbose -certs ${jarsigner_keystore} ${DESTINATION_APK_FILE})
FIND_PROGRAM(apksigner apksigner HINTS ${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_REVISION} CMAKE_FIND_ROOT_PATH_BOTH)
IF(apksigner)
ADD_CUSTOM_TARGET(verify.signature COMMAND ${apksigner} verify --verbose --print-certs -Werr ${DESTINATION_APK_FILE})
ENDIF()
ELSEIF(UNIX)

View File

@ -144,17 +144,21 @@ IF(UNCRUSTIFY)
IF("${UNCRUSTIFY_VERSION}" STRLESS "${UNCRUSTIFY_NEEDED_VERSION}")
MESSAGE(WARNING "Uncrustify seems to be too old. Use at least ${UNCRUSTIFY_NEEDED_VERSION}... you are using: ${UNCRUSTIFY_VERSION}")
ELSE()
ADD_CUSTOM_TARGET(format COMMAND ${UNCRUSTIFY_CMD} SOURCES ${UNCRUSTIFY_CFG})
ADD_CUSTOM_TARGET(format COMMAND ${UNCRUSTIFY_CMD} SOURCES ${UNCRUSTIFY_CFG} ${FILES})
ENDIF()
ENDIF()
FIND_PROGRAM(QMLLINT_BIN qmllint CMAKE_FIND_ROOT_PATH_BOTH)
IF(QMLLINT_BIN)
FILE(GLOB_RECURSE TEST_FILES_QML ${TEST_DIR}/qml/*.qml)
FILE(GLOB_RECURSE TEST_FILES_QML_STATIONARY ${TEST_DIR}/qml_stationary/*.qml)
FILE(GLOB_RECURSE FILES_QML ${RESOURCES_DIR}/qml/*.qml)
FILE(GLOB_RECURSE FILES_QML_STATIONARY ${RESOURCES_DIR}/qml_stationary/*.qml)
FILE(GLOB_RECURSE FILES_JS ${RESOURCES_DIR}/qml/*.js)
SET(QMLLINT_CMD ${QMLLINT_BIN} ${FILES_QML} ${FILES_JS})
FILE(GLOB_RECURSE FILES_JS_STATIONARY ${RESOURCES_DIR}/qml_stationary/*.js)
SET(QMLLINT_CMD ${QMLLINT_BIN} ${FILES_QML} ${FILES_QML_STATIONARY} ${FILES_JS})
ADD_CUSTOM_TARGET(qmllint COMMAND ${QMLLINT_CMD} SOURCES ${FILES_QML} ${FILES_JS})
ADD_CUSTOM_TARGET(qmllint COMMAND ${QMLLINT_CMD} SOURCES ${TEST_FILES_QML} ${TEST_FILES_QML_STATIONARY} ${FILES_QML} ${FILES_QML_STATIONARY} ${FILES_JS} ${FILES_JS_STATIONARY})
ENDIF()
# doc8 (https://pypi.python.org/pypi/doc8)
@ -169,4 +173,63 @@ FUNCTION(CREATE_DOC8_TARGET _dir _name)
ENDIF()
ENDFUNCTION()
FIND_PROGRAM(CONVERT convert CMAKE_FIND_ROOT_PATH_BOTH)
IF(CONVERT)
SET(CONVERT_CMD convert -background transparent)
ADD_CUSTOM_TARGET(npaicons
COMMAND ${CONVERT_CMD} npa.svg -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.ico
COMMAND ${CONVERT_CMD} npa.svg -resize 16x16 autentapp2.iconset/icon_16x16.png
COMMAND ${CONVERT_CMD} npa.svg -resize 32x32 autentapp2.iconset/icon_16x16@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 32x32 autentapp2.iconset/icon_32x32.png
COMMAND ${CONVERT_CMD} npa.svg -resize 64x64 autentapp2.iconset/icon_32x32@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 128x128 autentapp2.iconset/icon_128x128.png
COMMAND ${CONVERT_CMD} npa.svg -resize 256x256 autentapp2.iconset/icon_128x128@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 256x256 autentapp2.iconset/icon_256x256.png
COMMAND ${CONVERT_CMD} npa.svg -resize 512x512 autentapp2.iconset/icon_256x256@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 512x512 autentapp2.iconset/icon_512x512.png
COMMAND ${CONVERT_CMD} npa.svg -resize 1024x1024 autentapp2.iconset/icon_512x512@2x.png
COMMAND ${CONVERT_CMD} npa.svg -resize 36x36 android/ldpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 48x48 android/mdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 72x72 android/hdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 96x96 android/xhdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 144x144 android/xxhdpi/npa.png
COMMAND ${CONVERT_CMD} npa.svg -resize 192x192 android/xxxhdpi/npa.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 36x36 android/ldpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 48x48 android/mdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 72x72 android/hdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 96x96 android/xhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 144x144 android/xxhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} npa_beta.svg -resize 192x192 android/xxxhdpi/npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ENDIF()
FIND_PROGRAM(PNGQUANT pngquant CMAKE_FIND_ROOT_PATH_BOTH)
IF(PNGQUANT)
SET(PNGQUANT_CMD pngquant -f -o)
ADD_CUSTOM_TARGET(pngquant
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_16x16.png -- autentapp2.iconset/icon_16x16.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_16x16@2x.png -- autentapp2.iconset/icon_16x16@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_32x32.png -- autentapp2.iconset/icon_32x32.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_32x32@2x.png -- autentapp2.iconset/icon_32x32@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_128x128.png -- autentapp2.iconset/icon_128x128.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_128x128@2x.png -- autentapp2.iconset/icon_128x128@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_256x256.png -- autentapp2.iconset/icon_256x256.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_256x256@2x.png -- autentapp2.iconset/icon_256x256@2x.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_512x512.png -- autentapp2.iconset/icon_512x512.png
COMMAND ${PNGQUANT_CMD} autentapp2.iconset/icon_512x512@2x.png -- autentapp2.iconset/icon_512x512@2x.png
COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/npa.png -- android/xhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa.png -- android/xxhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/npa_beta.png -- android/xhdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/npa_beta.png -- android/xxhdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ENDIF()
INCLUDE(Sphinx)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
AusweisApp2 1.12.0
^^^^^^^^^^^^^^^^^^
**Releasedatum:** 27. März 2017
Anwender
""""""""
- Veröffentlichung betrifft nur die Plattform "Android".
- Unterstützung von Android 4.3 und höher.
- Zertifiziert vom Bundesamt für Sicherheit in der Informationstechnik (BSI).
Entwickler
""""""""""
- Aktualisierung von OpenSSL auf die Version 1.0.2k.
- Aktualisierung von Qt auf die Version 5.8.0.

View File

@ -0,0 +1,23 @@
AusweisApp2 1.12.1
^^^^^^^^^^^^^^^^^^
**Releasedatum:** 09. Juni 2017
Anmerkung
"""""""""
- Version wurde auf Grund der EUPL v1.2 ausgesetzt.
Anwender
""""""""
- Veröffentlichung der AusweisApp2 unter geänderten
Nutzungsbedingungen (EUPL v1.1).
Entwickler
""""""""""
- Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.

View File

@ -0,0 +1,15 @@
AusweisApp2 1.12.2
^^^^^^^^^^^^^^^^^^
**Releasedatum:** 30. Juni 2017
Anwender
""""""""
- Veröffentlichung der AusweisApp2 unter geänderten
Nutzungsbedingungen (EUPL v1.2).
Entwickler
""""""""""
- Bereitstellung des Sourcecode der AusweisApp2 auf GitHub.

View File

@ -4,9 +4,8 @@ Release Notes
.. toctree::
:maxdepth: 1
1.10.3
1.10.2
1.10.1
1.10.0
1.12.2
1.12.1
1.12.0
announce
issues

View File

@ -9,9 +9,6 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
- Bei Erhöhung der Schriftgröße über 175% kommt es zu Darstellungsfehlern.
- Unter OS X 10.9 wird teilweise das Auflegen eines Ausweisdokumentes erst
nach einem Neustart der AusweisApp2 erkannt.
- Wenn unter OS X ein Kartenleser mit aufliegendem Ausweisdokument
angeschlossen wird und eine Selbstauskunft angestartet wurde, kann unter
Umständen die AusweisApp2 einfrieren.

View File

@ -8,8 +8,6 @@ der AusweisApp2 unterstützt.
Betriebssysteme
"""""""""""""""
- OS X 10.9
- OS X 10.10
- OS X 10.11

View File

@ -1,6 +1,16 @@
Versionen
=========
Versionszweig 1.12
------------------
.. toctree::
:maxdepth: 1
1.12.2
1.12.1
1.12.0
Versionszweig 1.10
------------------
.. toctree::

View File

@ -4,7 +4,7 @@ This chapter deals with the Android specific properties of the AusweisApp2 SDK.
The AusweisApp2 core is encapsulated into an **Android service** which is
running in the background without a user interface. This service is interfaced
via an Android specific interprocess communication (IPC) mechanism. The basics
of this very mechanism - the **Android Interface Definition Language** (AIDL) -
of this mechanism - the **Android Interface Definition Language** (AIDL) -
are introduced in the following section. The following section deals with the
cryptographic verification of the SDKs authenticity. This step is necessary to
ensure that the SDK has not been modified in a malicious way. Subsequent
@ -12,6 +12,32 @@ sections deal with the SDK interface itself and explain which steps are
necessary in order to talk to the AusweisApp2 SDK.
Security
--------
The following listing provides information about the solution to provide a
secure connection to AusweisApp2.
- Data between two apps connected via AIDL as a bound service cannot be
grabbed by an attacker. Android will send the data to the corresponding
app directly. There is no broadcast like an implicit intent.
- An attacker cannot bind to an already bound service as AusweisApp2 will
accept only one connection at the same time.
- An attacker cannot resume a connection after the previous app disconnects
because AusweisApp2 will reset the internal state if an app connects
with another session ID.
- An attacker cannot grab the session ID of the previous app because
AusweisApp2 uses multiple sources of secure random number generator and
provides an optional API for the app to provide additional random number
entropy.
- An attacker cannot fake AusweisApp2 for other apps because the connection
via AIDL is bound with package name "com.governikus.ausweisapp2". Google
ensures that there is no other app in Google Play Store with that package
name. Also the client app can check the fingerprint of signature certificate
used for that package name.
@ -623,15 +649,17 @@ are shown in code listing below.
void enable()
{
mAdapter.enableForegroundDispatch(mActivity,
mPendingIntent,
mFilters,
mTechLists);
if (mAdapter != null)
mAdapter.enableForegroundDispatch(mActivity,
mPendingIntent,
mFilters,
mTechLists);
}
void disable()
{
mAdapter.disableForegroundDispatch(mActivity);
if (mAdapter != null)
mAdapter.disableForegroundDispatch(mActivity);
}
}

View File

@ -281,15 +281,18 @@ For detailed information see message :ref:`enter_pin`.
If the PIN was correct, the workflow will continue.
If the last attempt to enter the PIN failed, AusweisApp2
will send the message :ref:`enter_puk`.
- **pin**: The personal identification number of the card.
- **value**: The personal identification number of the card.
This must be 6 digits.
.. code-block:: json
{
"cmd": "SET_PIN",
"pin": "123456"
"value": "123456"
}
.. note::
@ -313,14 +316,14 @@ The AusweisApp2 will send an :ref:`enter_can` message on error.
Otherwise the workflow will continue with :ref:`enter_pin`.
- **can**: The card access number of the card.
- **value**: The card access number of the card.
This must be 6 digits.
.. code-block:: json
{
"cmd": "SET_CAN",
"can": "123456"
"value": "123456"
}
.. note::

View File

@ -280,11 +280,11 @@ and the CAN was incorrect the AusweisApp2 will send :ref:`enter_can`
again but without an error parameter.
- **error**: Optional error message if your command :ref:`set_can`
was invalid.
- **error**: Optional error message if your command :ref:`set_can`
was invalid.
- **reader**: Information about the used card and card reader.
Please see message :ref:`READER` for details.
- **reader**: Information about the used card and card reader.
Please see message :ref:`reader` for details.
.. code-block:: json
@ -297,7 +297,6 @@ again but without an error parameter.
"attached": true,
"card":
{
"inserted": true,
"deactivated": false,
"retryCounter": 1
}
@ -338,7 +337,7 @@ AusweisApp2 will send an :ref:`enter_pin` again with a retryCounter of **1**.
was invalid.
- **reader**: Information about the used card and card reader.
Please see message :ref:`READER` for details.
Please see message :ref:`reader` for details.
.. code-block:: json
@ -351,7 +350,6 @@ AusweisApp2 will send an :ref:`enter_pin` again with a retryCounter of **1**.
"attached": true,
"card":
{
"inserted": true,
"deactivated": false,
"retryCounter": 3
}
@ -361,6 +359,41 @@ AusweisApp2 will send an :ref:`enter_pin` again with a retryCounter of **1**.
.. _enter_puk:
ENTER_PUK
^^^^^^^^^
Indicates that a PUK is required to continue the workflow.
If AusweisApp2 sends this message, you will have to
show a message to the user that the card is blocked
and needs to be unblocked by AusweisApp2.
You need to send a :ref:`cancel` to abort the workflow.
- **reader**: Information about the used card and card reader.
Please see message :ref:`reader` for details.
.. code-block:: json
{
"msg": "ENTER_PUK",
"reader":
{
"name": "NFC",
"attached": true,
"card":
{
"deactivated": false,
"retryCounter": 0
}
}
}
.. _info:
INFO
@ -422,8 +455,9 @@ If your application receives this message it should
show a hint to the user.
After the user inserted a card the workflow will automatically
continue. If the user already inserted a card this message
won't be send at all.
continue, unless the eID functionality is disabled.
In this case, the workflow will be paused until another card is inserted.
If the user already inserted a card this message will not be sent at all.
This message will also be send if there is no connected card reader.
@ -492,14 +526,16 @@ card reader or removed from a card reader.
Your application can explicitly check for card reader with :ref:`get_reader`.
If a workflow is in progress and a card with disabled eID functionality was
inserted, this message will still be sent, but the workflow will be paused
until a card with enabled eID functionality is inserted.
- **name**: Identifier of card reader.
- **attached**: Indicates if a card reader is connected or disconnected.
- **card**: Provides information about inserted card.
- **inserted**: True if card inserted, otherwise false.
- **card**: Provides information about inserted card, otherwise null.
- **deactivated**: True if eID functionality is deactivated, otherwise false.
@ -514,7 +550,6 @@ Your application can explicitly check for card reader with :ref:`get_reader`.
"attached": true,
"card":
{
"inserted": true,
"deactivated": false,
"retryCounter": 3
}
@ -531,7 +566,7 @@ Provides information about all connected card readers.
- **reader**: A list of all connected card readers. Please
see message :ref:`READER` for details.
see message :ref:`reader` for details.
.. code-block:: json
@ -542,10 +577,7 @@ Provides information about all connected card readers.
{
"name": "Example reader 1 [SmartCard] (1234567) 01 00",
"attached": true,
"card":
{
"inserted": false
}
"card": null
},
{
@ -553,7 +585,6 @@ Provides information about all connected card readers.
"attached": true,
"card":
{
"inserted": true,
"deactivated": false,
"retryCounter": 3
}

View File

@ -51,7 +51,7 @@ ENDIF()
IF(CMAKE_BUILD_TYPE)
STRING(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
ELSE()
SET(CMAKE_BUILD_TYPE "RELEASE" CACHE STRING "build type configuration" FORCE)
SET(CMAKE_BUILD_TYPE "DEBUG" CACHE STRING "build type configuration" FORCE)
ENDIF()
IF(NOT ${CMAKE_BUILD_TYPE} STREQUAL "DEBUG" AND NOT ${CMAKE_BUILD_TYPE} STREQUAL "RELEASE")
@ -97,11 +97,11 @@ INCLUDE(Messages)
################################## Versionen
SET(QT 5.7.0)
SET(OPENSSL 1.0.2j)
SET(QT 5.8.0)
SET(QT_HASH 0f4c54386d3dbac0606a936a7145cebb7b94b0ca2d29bc001ea49642984824b6)
SET(QT_HASH a6a2632de7e44bbb790bc3b563f143702c610464a7f537d02036749041fd1800)
SET(OPENSSL_HASH e7aff292be21c259c6af26469c7a9b3ba26e9abaaffd325e3dccc9785256c431)
SET(OPENSSL 1.0.2k)
SET(OPENSSL_HASH 6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0)
################################## Files
SET(QT_FILE qt-everywhere-opensource-src-${QT}.tar.xz)
@ -131,29 +131,12 @@ ENDIF()
#########################################################################
IF(ANDROID)
SET(HOST --host=${ANDROID_TOOLCHAIN_MACHINE_NAME})
FIND_PROGRAM(SED_CMD sed CMAKE_FIND_ROOT_PATH_BOTH)
IF(SED_CMD)
MESSAGE(STATUS "Using 'sed' command... ${SED_CMD}")
ELSE()
MESSAGE(FATAL_ERROR "Cannot find 'sed' command")
ENDIF()
SET(ANDROID_STANDALONE "${PROJECT_BINARY_DIR}/standalone")
IF(ANDROID_NDK AND NOT EXISTS ${ANDROID_STANDALONE})
MESSAGE(STATUS "Creating standalone toolchain...")
EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${ANDROID_NDK}/build/tools/make_standalone_toolchain.py
--arch ${ANDROID_ARCH_NAME} --api ${ANDROID_NATIVE_API_LEVEL} --install-dir ${ANDROID_STANDALONE}
RESULT_VARIABLE CREATE_STANDALONE_TOOLCHAIN)
if(${CREATE_STANDALONE_TOOLCHAIN} EQUAL 0)
MESSAGE(STATUS "You need to call 'export PATH=${ANDROID_STANDALONE}/bin:\$PATH'")
ELSE()
MESSAGE(FATAL_ERROR "Cannot create standalone toolchain")
ENDIF()
ENDIF()
ENDIF()
IF(IOS)
@ -169,11 +152,7 @@ SET(ENABLED_TARGETS)
################################## OpenSSL
#########################################################################
LIST(APPEND ENABLED_TARGETS openssl)
SET(OPENSSL_CONFIGURE_FLAGS no-ssl2 no-ssl3 no-ssl3-method no-dtls no-srp no-idea no-mdc2 no-rc5 no-hw -DOPENSSL_NO_HEARTBEATS shared)
IF(NOT WIN32)
SET(OPENSSL_CONFIGURE_FLAGS no-engine ${OPENSSL_CONFIGURE_FLAGS})
ENDIF()
SET(OPENSSL_CONFIGURE_FLAGS no-ssl2 no-ssl3 no-ssl3-method no-dtls no-srp no-idea no-mdc2 no-rc5 no-hw no-engine no-dso -DOPENSSL_NO_HEARTBEATS shared)
IF(IOS)
SET(OPENSSL_PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_iOS.patch && )
@ -190,18 +169,19 @@ ELSEIF(MSVC)
SET(OPENSSL_ADDITIONAL_MAKE -f ms/ntdll.mak)
SET(OPENSSL_INSTALL_TARGET install)
ELSEIF(ANDROID)
IF("${ANDROID_TOOLCHAIN_MACHINE_NAME}" STREQUAL "arm-linux-androideabi")
IF(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a")
SET(OPENSSL_ARCH android-armv7)
SET(OPENSSL_COMPILER_FLAGS "-mfloat-abi=softfp")
ELSEIF("${ANDROID_TOOLCHAIN_MACHINE_NAME}" STREQUAL "i686-linux-android")
ELSEIF(CMAKE_ANDROID_ARCH_ABI STREQUAL "x86")
SET(OPENSSL_ARCH android-x86)
ELSEIF("${ANDROID_TOOLCHAIN_MACHINE_NAME}" STREQUAL "aarch64-linux-android")
ELSEIF(CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a")
SET(OPENSSL_ARCH android)
ELSE()
MESSAGE(FATAL_ERROR "ANDROID_TOOLCHAIN_MACHINE_NAME not supported by openssl")
MESSAGE(FATAL_ERROR "CMAKE_ANDROID_ARCH_ABI not supported by openssl")
ENDIF()
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} --cross-compile-prefix=${ANDROID_TOOLCHAIN_MACHINE_NAME}- ${OPENSSL_ARCH})
SET(OPENSSL_ENV export ANDROID_DEV=${CMAKE_SYSROOT}/usr &&)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} --cross-compile-prefix=${CMAKE_C_ANDROID_TOOLCHAIN_PREFIX} ${OPENSSL_ARCH})
SET(OPENSSL_PATCH_COMMAND ${PATCH_CMD} -p0 ${PATCH_OPTIONS} ${PATCHES_DIR}/soname/openssl_makefile.shared.patch && ${SH_CMD} ${PATCHES_DIR}/soname/openssl_sed.sh && )
ELSEIF(BSD)
@ -229,6 +209,7 @@ IF(IOS)
PATCH_COMMAND
${OPENSSL_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-fix-no-engine-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_rsa_psk.patch
CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure --prefix=${PROJECT_BINARY_DIR}/openssl64-prefix/tmp ${OPENSSL_CONFIGURE_FLAGS} "-arch ${IOS_ARCH64}" "${COMPILER_FLAGS}"
@ -245,6 +226,7 @@ IF(IOS)
PATCH_COMMAND
${OPENSSL_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-fix-no-engine-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_rsa_psk.patch
CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure --prefix=${PROJECT_BINARY_DIR}/openssl-prefix/tmp ${OPENSSL_CONFIGURE_FLAGS} "-arch ${IOS_ARCH}" "${COMPILER_FLAGS}"
@ -262,16 +244,17 @@ ExternalProject_Add(openssl
PATCH_COMMAND
${OPENSSL_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-fix-no-engine-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl_rsa_psk.patch
CONFIGURE_COMMAND ${PERL_EXECUTABLE} Configure --prefix=${DESTINATION_DIR} ${OPENSSL_CONFIGURE_FLAGS} "${COMPILER_FLAGS}" "${OPENSSL_COMPILER_FLAGS}"
BUILD_COMMAND ${MAKE} ${OPENSSL_ADDITIONAL_MAKE}
CONFIGURE_COMMAND ${OPENSSL_ENV} ${PERL_EXECUTABLE} Configure --prefix=${DESTINATION_DIR} ${OPENSSL_CONFIGURE_FLAGS} "${COMPILER_FLAGS}" "${OPENSSL_COMPILER_FLAGS}"
BUILD_COMMAND ${OPENSSL_ENV} ${MAKE} ${OPENSSL_ADDITIONAL_MAKE}
BUILD_IN_SOURCE 1
INSTALL_COMMAND ${MAKE} ${OPENSSL_ADDITIONAL_MAKE} ${OPENSSL_INSTALL_TARGET}
)
ExternalProject_Add_Step(openssl prebuild
COMMAND ${OPENSSL_PREBUILD}
COMMAND ${OPENSSL_ENV} ${OPENSSL_PREBUILD}
DEPENDEES configure
DEPENDERS build
WORKING_DIRECTORY <BINARY_DIR>)
@ -282,15 +265,9 @@ IF(UNIX)
ENDIF()
IF(ANDROID)
IF(ANDROID_COMPILER_IS_CLANG)
SET(COMPILER clang)
ELSE()
SET(COMPILER gcc)
ENDIF()
ADD_CUSTOM_COMMAND(TARGET openssl POST_BUILD
COMMAND ${ANDROID_TOOLCHAIN_MACHINE_NAME}-${COMPILER} -o ${DESTINATION_DIR}/lib/libgovcrypto${CMAKE_SHARED_LIBRARY_SUFFIX} -shared -Wl,-soname=libgovcrypto${CMAKE_SHARED_LIBRARY_SUFFIX} -Wl,--whole-archive ${DESTINATION_DIR}/lib/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX} -Wl,--no-whole-archive
COMMAND ${ANDROID_TOOLCHAIN_MACHINE_NAME}-${COMPILER} -o ${DESTINATION_DIR}/lib/libgovssl${CMAKE_SHARED_LIBRARY_SUFFIX} -shared -Wl,-soname=libgovssl${CMAKE_SHARED_LIBRARY_SUFFIX} -Wl,--whole-archive ${DESTINATION_DIR}/lib/libssl${CMAKE_STATIC_LIBRARY_SUFFIX} -Wl,--no-whole-archive ${DESTINATION_DIR}/lib/libgovcrypto${CMAKE_SHARED_LIBRARY_SUFFIX})
COMMAND ${CMAKE_C_COMPILER} --sysroot ${CMAKE_SYSROOT} -o ${DESTINATION_DIR}/lib/libgovcrypto${CMAKE_SHARED_LIBRARY_SUFFIX} -shared -Wl,-soname=libgovcrypto${CMAKE_SHARED_LIBRARY_SUFFIX} -Wl,--whole-archive ${DESTINATION_DIR}/lib/libcrypto${CMAKE_STATIC_LIBRARY_SUFFIX} -Wl,--no-whole-archive
COMMAND ${CMAKE_C_COMPILER} --sysroot ${CMAKE_SYSROOT} -o ${DESTINATION_DIR}/lib/libgovssl${CMAKE_SHARED_LIBRARY_SUFFIX} -shared -Wl,-soname=libgovssl${CMAKE_SHARED_LIBRARY_SUFFIX} -Wl,--whole-archive ${DESTINATION_DIR}/lib/libssl${CMAKE_STATIC_LIBRARY_SUFFIX} -Wl,--no-whole-archive ${DESTINATION_DIR}/lib/libgovcrypto${CMAKE_SHARED_LIBRARY_SUFFIX})
ELSEIF(MAC)
SET(OPENSSL_FILE_VERSION 1.0.0)
ADD_CUSTOM_COMMAND(TARGET openssl POST_BUILD
@ -299,7 +276,7 @@ ELSEIF(MAC)
COMMAND install_name_tool -change ${DESTINATION_DIR}/lib/libcrypto.${OPENSSL_FILE_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX} libcrypto.${OPENSSL_FILE_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX} ${DESTINATION_DIR}/lib/libssl.${OPENSSL_FILE_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX})
ENDIF()
################################## QT
################################## Qt
#########################################################################
LIST(APPEND ENABLED_TARGETS qt)
@ -310,13 +287,13 @@ ELSE()
SET(QT_CONFIGURE_FLAGS -release -no-qml-debug)
ENDIF()
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -opensource -confirm-license -shared -qt-zlib -no-mtdev -qt-libpng -qt-libjpeg -qt-freetype -no-harfbuzz -qt-pcre -system-proxies -no-compile-examples -nomake examples -nomake tests -no-sql-sqlite -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
SET(QT_CONFIGURE_FLAGS_OTHER --prefix=${DESTINATION_DIR} -no-journald -no-dbus -no-directfb -no-linuxfb)
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license -qt-zlib -no-mtdev -qt-libpng -qt-libjpeg -no-harfbuzz -qt-pcre -system-proxies -no-compile-examples -nomake examples -nomake tests -no-sql-sqlite -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-dbus -no-directfb -no-linuxfb)
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing)
SET(QT_CONFIGURE ./configure)
IF(IOS)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -framework -sdk iphoneos -xplatform macx-ios-clang)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -sdk iphoneos -xplatform macx-ios-clang)
ELSEIF(APPLE)
FIND_PROGRAM(XCODE_SELECT xcode-select)
IF(NOT XCODE_SELECT)
@ -338,18 +315,22 @@ ELSEIF(WIN32)
SET(QT_OPENSSL OPENSSL_LIBS=-lcrypto\ -lssl)
ENDIF()
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -prefix ${DESTINATION_DIR} -opengl desktop -no-icu -no-sql-odbc -platform ${QT_PLATFORM})
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -opengl desktop -no-icu -no-sql-odbc -platform ${QT_PLATFORM})
SET(QT_CONFIGURE configure.bat)
ELSEIF(ANDROID)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER}
-android-sdk ${ANDROID_SDK} -android-ndk ${ANDROID_NDK} -android-ndk-platform android-${ANDROID_NATIVE_API_LEVEL} -android-ndk-host ${ANDROID_NDK_HOST_SYSTEM_NAME}
-android-arch ${ANDROID_ABI} -android-toolchain-version ${ANDROID_COMPILER_VERSION}
-android-sdk ${ANDROID_SDK} -android-ndk ${CMAKE_ANDROID_NDK} -android-ndk-platform android-${CMAKE_SYSTEM_VERSION} -android-ndk-host ${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}
-android-arch ${CMAKE_ANDROID_ARCH_ABI} -android-toolchain-version ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}
-xplatform android-g++)
SET(QT_ENV export OPENSSL_LIBS=-lgovcrypto\ -lgovssl &&)
ELSE()
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -no-libproxy)
ENDIF()
IF(IOS OR ANDROID)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -no-widgets)
ENDIF()
ExternalProject_Add(qt
DEPENDS openssl
URL ${QT_URL}/${QT_FILE}
@ -357,12 +338,18 @@ ExternalProject_Add(qt
DOWNLOAD_DIR ${PACKAGES_DIR}
PATCH_COMMAND ${QT_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-disable-qtplugininfo.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Re-apply-the-cast-part-of-commit-392c7b99348e2a96ef1.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Enable-use-of-the-same-NetworkAccessAuthenticationManager.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-sure-SSL-configuration-is-correct-in-QNetworkRe.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-QCryptographicHash-a-Q_GADGET.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-server-side-signature-algorithms-configurable.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-apksigner-by-default-if-available-to-sign-the-AP.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-Add-support-for-sendCommand-to-QNearFieldTarget.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-QNearfieldTarget-Introduce-maxCommandLength.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QNearfieldTarget-Introduce-set-keepConnection-and-disconnect.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-defaultSize-according-to-svg-standard-in-svg-plugin.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Do-not-request-an-unnessessary-dangerous-right.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-QNetworkAccessManager-clearConnectionCache.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-QNetworkAccessManager-useAuthenticationManagerFrom.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Make-variant-selection-possible-if-base-is-missing.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-debug-stream-operator-for-QNetworkProxyQuery.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Allow-using-nfc-when-running-as-a-service.patch &&
${CMAKE_COMMAND} -E touch qtbase/.gitignore
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}
@ -404,7 +391,7 @@ IF(IOS)
# Globbing is not supported by cmake command mode! This will work if executed with unix shell only.
SET(CLEANUP_FILES ${CMAKE_COMMAND} -E remove ${DESTINATION_DIR}/lib/*.dylib)
ELSEIF(ANDROID)
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}_${ANDROID_ABI})
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}_${CMAKE_ANDROID_ARCH_ABI})
ELSE()
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID})
ENDIF()

View File

@ -36,7 +36,7 @@ Notwendige Bibliotheken:
Notwendige Tools:
- CMake >= 3.1.0
- CMake >= 3.1.0 (>= 3.7.0 für Android)
- http://www.cmake.org
@ -95,7 +95,7 @@ Beispiel: Innerhalb von /Users/governikus/AusweisApp2 befindet sich der Quellcod
$ cd /Users/governikus
$ mkdir build
$ cd build
$ cmake -DPACKAGES_DIR=/Users/governikus/packages ../AusweisApp2/libs
$ cmake -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=/Users/governikus/packages ../AusweisApp2/libs
$ make
@ -164,7 +164,7 @@ Dabei wird Qt über Windows-CLI und OpenSSL unter MSYS gebaut.
#. cd c:\msys\1.0\home\user\qt
#. cmake -DPACKAGES_DIR=C:/packages C:/AusweisApp2/libs -G "MinGW Makefiles"
#. cmake -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=C:/packages C:/AusweisApp2/libs -G "MinGW Makefiles"
#. MSYS Shell starten
@ -198,7 +198,7 @@ Beispiel: Innerhalb von /Users/governikus/AusweisApp2 befindet sich der Quellcod
$ cd /Users/governikus
$ mkdir build
$ cd build
$ cmake -DPACKAGES_DIR=/Users/governikus/packages -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/iOS.toolchain.cmake ../AusweisApp2/libs
$ cmake -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=/Users/governikus/packages -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/iOS.toolchain.cmake ../AusweisApp2/libs
$ make
@ -211,20 +211,20 @@ Komponenten vorhanden sein:
- https://developer.android.com/tools/sdk/ndk/index.html
- Getestet: r12b (x86_64)
- Getestet: r13b (x86_64)
- Android SDK mit gesetztem ANDROID_HOME
- https://developer.android.com/sdk/index.html#Other
- Getestet: 25.1.7
- Getestet: 25.2.2
- Unter bestimmten Umständen kann es vorkommen, dass die Build-Tools-Version nicht erkannt
wird. Dies kann mittels der Umgebungsvariable ANDROID_BUILD_TOOLS_REVISION behoben werden.
Die genaue Version ist im Android Manager vom Android SDK (./tools/android) hinterlegt.
- Um Qt erfolgreich zu bauen, sind verschiedene API Level von Android notwendig.
Diese sollten mindestens Level 10, 11, 16 und 18 sein. Nähere Informationen dazu
Diese sollten mindestens Level 18 und 21 sein. Nähere Informationen dazu
sind im Wiki von Qt enthalten: http://wiki.qt.io/Android
Die Plattformen können mittels Android Manager nachinstalliert werden.
@ -240,14 +240,9 @@ Beispiel: Innerhalb von /home/governikus/AusweisApp2 befindet sich der Quellcode
$ cd /home/governikus
$ mkdir build
$ cd build
$ cmake -DPACKAGES_DIR=/home/governikus/packages -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/android.toolchain.cmake ../AusweisApp2/libs
$ export PATH=/home/governikus/build/standalone/bin:$PATH
$ cmake -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=/home/governikus/packages -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/android.toolchain.cmake ../AusweisApp2/libs
$ make
Standardmäßig wird die Architektur "armeabi-v7a" gewählt. Um zum Beispiel die Toolchain für x86-Architektur
zu bauen , ist beim Aufruf von CMake der Parameter "-DANDROID_ABI=x86" mitzugeben.
Der "export" der PATH-Variable wird auch beim Konfigurieren angezeigt. Siehe dazu "You need to call ..."!
Sofern die PATH-Variable nicht um den standalone-Ordner erweitert wird, wird es beim Build zu dem Fehler kommen,
dass der Cross-Compiler für die jeweilige Architektur nicht gefunden werden konnte.
zu bauen , ist beim Aufruf von CMake der Parameter "-DCMAKE_ANDROID_ARCH_ABI=x86" mitzugeben.

View File

@ -0,0 +1,75 @@
From 08b250d56592b8e385cfc37c2d938b839653c264 Mon Sep 17 00:00:00 2001
From: "Dr. Stephen Henson" <steve@openssl.org>
Date: Sat, 16 Jan 2016 16:11:34 +0000
Subject: [PATCH] fix no-engine build
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
---
crypto/ts/ts.h | 2 ++
util/libeay.num | 4 ++--
util/mk1mf.pl | 3 +--
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/crypto/ts/ts.h b/crypto/ts/ts.h
index 2daa1b2fb..fc8c14b2d 100644
--- a/crypto/ts/ts.h
+++ b/crypto/ts/ts.h
@@ -737,9 +737,11 @@ EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass);
const char *TS_CONF_get_tsa_section(CONF *conf, const char *section);
int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb,
TS_RESP_CTX *ctx);
+#ifndef OPENSSL_NO_ENGINE
int TS_CONF_set_crypto_device(CONF *conf, const char *section,
const char *device);
int TS_CONF_set_default_engine(const char *name);
+#endif
int TS_CONF_set_signer_cert(CONF *conf, const char *section,
const char *cert, TS_RESP_CTX *ctx);
int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs,
diff --git a/util/libeay.num b/util/libeay.num
index 2094ab364..23ade08e2 100755
--- a/util/libeay.num
+++ b/util/libeay.num
@@ -3874,7 +3874,7 @@ b2i_PVK_bio 4250 EXIST::FUNCTION:RC4
ASN1_UTCTIME_adj 4251 EXIST::FUNCTION:
TS_TST_INFO_new 4252 EXIST::FUNCTION:
EVP_MD_do_all_sorted 4253 EXIST::FUNCTION:
-TS_CONF_set_default_engine 4254 EXIST::FUNCTION:
+TS_CONF_set_default_engine 4254 EXIST::FUNCTION:ENGINE
TS_ACCURACY_set_seconds 4255 EXIST::FUNCTION:
TS_TST_INFO_get_time 4256 EXIST::FUNCTION:
PKCS8_pkey_get0 4257 EXIST::FUNCTION:
@@ -4099,7 +4099,7 @@ EVP_PKEY_meth_find 4469 EXIST::FUNCTION:
EVP_PKEY_id 4470 EXIST::FUNCTION:
TS_TST_INFO_set_serial 4471 EXIST::FUNCTION:
a2i_GENERAL_NAME 4472 EXIST::FUNCTION:
-TS_CONF_set_crypto_device 4473 EXIST::FUNCTION:
+TS_CONF_set_crypto_device 4473 EXIST::FUNCTION:ENGINE
EVP_PKEY_verify_init 4474 EXIST::FUNCTION:
TS_CONF_set_policies 4475 EXIST::FUNCTION:
ASN1_PCTX_new 4476 EXIST::FUNCTION:
diff --git a/util/mk1mf.pl b/util/mk1mf.pl
index 7a3ae11f7..6ada6fa62 100755
--- a/util/mk1mf.pl
+++ b/util/mk1mf.pl
@@ -428,7 +428,6 @@ EOF
{
$extra_install .= <<"EOF"
\$(MKDIR) \"\$(INSTALLTOP)${o}lib${o}engines\"
- \$(CP) \"\$(E_SHLIB)\" \"\$(INSTALLTOP)${o}lib${o}engines\"
EOF
}
}
@@ -597,7 +596,7 @@ init: \$(TMP_D) \$(LIB_D) \$(INC_D) \$(INCO_D) \$(BIN_D) \$(TEST_D) headers
headers: \$(HEADER) \$(EXHEADER)
-lib: \$(LIBS_DEP) \$(E_SHLIB)
+lib: \$(LIBS_DEP)
exe: \$(T_EXE) \$(BIN_D)$o\$(E_EXE)$exep
--
2.11.0

View File

@ -1,4 +1,4 @@
From 47367d2aed4a3acade0a29b45c01b0c2b3cc2854 Mon Sep 17 00:00:00 2001
From 496ac24b811593df82490643d574a037aa47d80e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Thu, 23 Apr 2015 20:59:30 +0200
Subject: [PATCH] Introduce TLS-RSA-PSK support
@ -23,7 +23,7 @@ PR: 2464
9 files changed, 587 insertions(+), 35 deletions(-)
diff --git x/doc/apps/ciphers.pod y/doc/apps/ciphers.pod
index 9224557..234350f 100644
index 922455725..234350faa 100644
--- x/doc/apps/ciphers.pod
+++ y/doc/apps/ciphers.pod
@@ -583,10 +583,22 @@ Note: these ciphers can also be used in SSL v3.
@ -50,7 +50,7 @@ index 9224557..234350f 100644
=head2 Deprecated SSL v2.0 cipher suites.
diff --git x/ssl/s3_clnt.c y/ssl/s3_clnt.c
index 2185347..1bd6138 100644
index 32f2f1aee..cd05f4d52 100644
--- x/ssl/s3_clnt.c
+++ y/ssl/s3_clnt.c
@@ -337,7 +337,7 @@ int ssl3_connect(SSL *s)
@ -102,7 +102,7 @@ index 2185347..1bd6138 100644
/* Temporary RSA keys only allowed in export ciphersuites */
if (!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher)) {
al = SSL_AD_UNEXPECTED_MESSAGE;
@@ -2012,8 +2021,16 @@ int ssl3_get_key_exchange(SSL *s)
@@ -2034,8 +2043,16 @@ int ssl3_get_key_exchange(SSL *s)
}
}
} else {
@ -121,7 +121,7 @@ index 2185347..1bd6138 100644
/* Might be wrong key type, check it */
if (ssl3_check_cert_and_algorithm(s))
/* Otherwise this shouldn't happen */
@@ -3102,7 +3119,11 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3124,7 +3141,11 @@ int ssl3_send_client_key_exchange(SSL *s)
}
#endif
#ifndef OPENSSL_NO_PSK
@ -134,7 +134,7 @@ index 2185347..1bd6138 100644
/*
* The callback needs PSK_MAX_IDENTITY_LEN + 1 bytes to return a
* \0-terminated identity. The last byte is for us for simulating
@@ -3110,8 +3131,8 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3132,8 +3153,8 @@ int ssl3_send_client_key_exchange(SSL *s)
*/
char identity[PSK_MAX_IDENTITY_LEN + 2];
size_t identity_len;
@ -144,7 +144,7 @@ index 2185347..1bd6138 100644
unsigned int pre_ms_len = 0, psk_len = 0;
int psk_err = 1;
@@ -3143,14 +3164,34 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3165,14 +3186,34 @@ int ssl3_send_client_key_exchange(SSL *s)
ERR_R_INTERNAL_ERROR);
goto psk_err;
}
@ -187,7 +187,7 @@ index 2185347..1bd6138 100644
if (s->session->psk_identity_hint != NULL)
OPENSSL_free(s->session->psk_identity_hint);
@@ -3180,8 +3221,41 @@ int ssl3_send_client_key_exchange(SSL *s)
@@ -3202,8 +3243,41 @@ int ssl3_send_client_key_exchange(SSL *s)
pre_ms_len);
s2n(identity_len, p);
memcpy(p, identity, identity_len);
@ -229,7 +229,7 @@ index 2185347..1bd6138 100644
psk_err:
OPENSSL_cleanse(identity, sizeof(identity));
OPENSSL_cleanse(psk_or_pre_ms, sizeof(psk_or_pre_ms));
@@ -3552,7 +3626,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
@@ -3574,7 +3648,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
}
#endif
#ifndef OPENSSL_NO_RSA
@ -242,7 +242,7 @@ index 2185347..1bd6138 100644
if (!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
!has_bits(i, EVP_PK_RSA | EVP_PKT_ENC)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
@@ -3619,7 +3697,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
@@ -3641,7 +3719,11 @@ int ssl3_check_cert_and_algorithm(SSL *s)
if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
pkey_bits > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
#ifndef OPENSSL_NO_RSA
@ -256,7 +256,7 @@ index 2185347..1bd6138 100644
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_EXPORT_TMP_RSA_KEY);
diff --git x/ssl/s3_lib.c y/ssl/s3_lib.c
index 0385e03..ce69ec4 100644
index 0385e039c..ce69ec470 100644
--- x/ssl/s3_lib.c
+++ y/ssl/s3_lib.c
@@ -1765,6 +1765,74 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
@ -487,7 +487,7 @@ index 0385e03..ce69ec4 100644
#endif /* OPENSSL_NO_PSK */
diff --git x/ssl/s3_srvr.c y/ssl/s3_srvr.c
index 01ccd5d..154d22e 100644
index ea56f9ca8..2b1797cc8 100644
--- x/ssl/s3_srvr.c
+++ y/ssl/s3_srvr.c
@@ -458,19 +458,23 @@ int ssl3_accept(SSL *s)
@ -538,7 +538,7 @@ index 01ccd5d..154d22e 100644
/* no cert request */
skip = 1;
s->s3->tmp.cert_request = 0;
@@ -1827,7 +1834,11 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1830,7 +1837,11 @@ int ssl3_send_server_key_exchange(SSL *s)
} else
#endif /* !OPENSSL_NO_ECDH */
#ifndef OPENSSL_NO_PSK
@ -551,7 +551,7 @@ index 01ccd5d..154d22e 100644
/*
* reserve size for record length and PSK identity hint
*/
@@ -1866,7 +1877,14 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1879,7 +1890,14 @@ int ssl3_send_server_key_exchange(SSL *s)
}
if (!(s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
@ -567,7 +567,7 @@ index 01ccd5d..154d22e 100644
if ((pkey = ssl_get_sign_pkey(s, s->s3->tmp.new_cipher, &md))
== NULL) {
al = SSL_AD_DECODE_ERROR;
@@ -1926,7 +1944,11 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1953,7 +1971,11 @@ int ssl3_send_server_key_exchange(SSL *s)
#endif
#ifndef OPENSSL_NO_PSK
@ -580,7 +580,7 @@ index 01ccd5d..154d22e 100644
/* copy PSK identity hint */
s2n(strlen(s->ctx->psk_identity_hint), p);
strncpy((char *)p, s->ctx->psk_identity_hint,
@@ -1942,7 +1964,11 @@ int ssl3_send_server_key_exchange(SSL *s)
@@ -1969,7 +1991,11 @@ int ssl3_send_server_key_exchange(SSL *s)
* points to the space at the end.
*/
#ifndef OPENSSL_NO_RSA
@ -593,7 +593,7 @@ index 01ccd5d..154d22e 100644
q = md_buf;
j = 0;
for (num = 2; num > 0; num--) {
@@ -2816,6 +2842,181 @@ int ssl3_get_client_key_exchange(SSL *s)
@@ -2843,6 +2869,181 @@ int ssl3_get_client_key_exchange(SSL *s)
goto f_err;
} else
#endif
@ -776,7 +776,7 @@ index 01ccd5d..154d22e 100644
if (alg_k & SSL_kSRP) {
int param_len;
diff --git x/ssl/ssl.h y/ssl/ssl.h
index 90aeb0c..78cf221 100644
index 90aeb0ce4..78cf2212e 100644
--- x/ssl/ssl.h
+++ y/ssl/ssl.h
@@ -254,6 +254,7 @@ extern "C" {
@ -796,7 +796,7 @@ index 90aeb0c..78cf221 100644
# define SSL_TXT_DES "DES"
diff --git x/ssl/ssl_ciph.c y/ssl/ssl_ciph.c
index 2ad8f43..33f6da1 100644
index 2ad8f4392..33f6da1be 100644
--- x/ssl/ssl_ciph.c
+++ y/ssl/ssl_ciph.c
@@ -263,6 +263,7 @@ static const SSL_CIPHER cipher_aliases[] = {
@ -844,10 +844,10 @@ index 2ad8f43..33f6da1 100644
kx = "SRP";
break;
diff --git x/ssl/ssl_lib.c y/ssl/ssl_lib.c
index 42b980a..f20505b 100644
index f8054dae6..b835f1fa5 100644
--- x/ssl/ssl_lib.c
+++ y/ssl/ssl_lib.c
@@ -2436,8 +2436,14 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
@@ -2434,8 +2434,14 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
#ifndef OPENSSL_NO_PSK
mask_k |= SSL_kPSK;
@ -863,7 +863,7 @@ index 42b980a..f20505b 100644
#endif
diff --git x/ssl/ssl_locl.h y/ssl/ssl_locl.h
index 6df725f..29af2a4 100644
index d50edd18c..3c59fff1b 100644
--- x/ssl/ssl_locl.h
+++ y/ssl/ssl_locl.h
@@ -314,6 +314,8 @@
@ -876,7 +876,7 @@ index 6df725f..29af2a4 100644
/* Bits for algorithm_auth (server authentication) */
/* RSA auth */
diff --git x/ssl/tls1.h y/ssl/tls1.h
index 7e237d0..173be49 100644
index 7e237d063..173be499f 100644
--- x/ssl/tls1.h
+++ y/ssl/tls1.h
@@ -410,6 +410,24 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)
@ -930,5 +930,5 @@ index 7e237d0..173be49 100644
# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA"
# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA"
--
2.10.0
2.11.0

View File

@ -0,0 +1,80 @@
From a65c1ef2833757f49024f13900645abf62d6eb22 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 10 Jan 2017 08:52:35 +0100
Subject: Add debug stream operator for QNetworkProxyQuery
Change-Id: Iae215827350e47a8ce31e5828d3ad1ed54564e84
---
src/network/kernel/qnetworkproxy.cpp | 19 +++++++++++++++----
src/network/kernel/qnetworkproxy.h | 4 ++++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git x/qtbase/src/network/kernel/qnetworkproxy.cpp y/qtbase/src/network/kernel/qnetworkproxy.cpp
index 94719e9c2d..6bd6fa2658 100644
--- x/qtbase/src/network/kernel/qnetworkproxy.cpp
+++ y/qtbase/src/network/kernel/qnetworkproxy.cpp
@@ -1634,10 +1634,6 @@ QList<QNetworkProxy> QNetworkProxyFactory::proxyForQuery(const QNetworkProxyQuer
}
#ifndef QT_NO_DEBUG_STREAM
-/*!
- \since 5.0
- Outputs a QNetworkProxy details to a debug stream
-*/
QDebug operator<<(QDebug debug, const QNetworkProxy &proxy)
{
QDebugStateSaver saver(debug);
@@ -1686,6 +1682,21 @@ QDebug operator<<(QDebug debug, const QNetworkProxy &proxy)
debug << '[' << scaps.join(QLatin1Char(' ')) << ']';
return debug;
}
+
+QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery)
+{
+ QDebugStateSaver saver(debug);
+ debug.resetFormat().nospace()
+ << "ProxyQuery("
+ << "type: " << proxyQuery.queryType()
+ << ", protocol: " << proxyQuery.protocolTag()
+ << ", peerPort: " << proxyQuery.peerPort()
+ << ", peerHostName: " << proxyQuery.peerHostName()
+ << ", localPort: " << proxyQuery.localPort()
+ << ", url: " << proxyQuery.url()
+ << ')';
+ return debug;
+}
#endif
QT_END_NAMESPACE
diff --git x/qtbase/src/network/kernel/qnetworkproxy.h y/qtbase/src/network/kernel/qnetworkproxy.h
index 8fcb7e33cf..8699c313e9 100644
--- x/qtbase/src/network/kernel/qnetworkproxy.h
+++ y/qtbase/src/network/kernel/qnetworkproxy.h
@@ -56,6 +56,8 @@ class QNetworkConfiguration;
class QNetworkProxyQueryPrivate;
class Q_NETWORK_EXPORT QNetworkProxyQuery
{
+ Q_GADGET
+
public:
enum QueryType {
TcpSocket,
@@ -65,6 +67,7 @@ public:
UrlRequest,
SctpServer
};
+ Q_ENUM(QueryType)
QNetworkProxyQuery();
explicit QNetworkProxyQuery(const QUrl &requestUrl, QueryType queryType = UrlRequest);
@@ -222,6 +225,7 @@ public:
#ifndef QT_NO_DEBUG_STREAM
Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxy &proxy);
+Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, const QNetworkProxyQuery &proxyQuery);
#endif
QT_END_NAMESPACE
--
2.11.0

View File

@ -0,0 +1,98 @@
From b42f7623ee75b651f6e756a73d0f8f385f337220 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Thu, 26 Jan 2017 15:02:37 +0100
Subject: Allow using nfc when running as a service
With this change it will be possible to use a tag
injected from outside when running as a service.
Intent newIntent = new Intent();
newIntent.putExtra(NfcAdapter.EXTRA_TAG, tag);
QtNative.onNewIntent(newIntent);
Task-number: QTBUG-57646
Change-Id: I628d4357f023a0926e7d61914b39278342ac7161
---
.../src/org/qtproject/qt5/android/nfc/QtNfc.java | 24 ++++++++++++++--------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
index 47dcf1bf..25c560f8 100644
--- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
+++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
@@ -62,22 +62,25 @@ public class QtNfc
static public NfcAdapter m_adapter = null;
static public PendingIntent m_pendingIntent = null;
static public IntentFilter[] m_filters;
- static public Activity m_activity;
+ static public Context m_context = null;
+ static public Activity m_activity = null;
static public void setContext(Context context)
{
- if (!(context instanceof Activity)) {
- Log.w(TAG, "NFC only works with Android activities and not in Android services. " +
- "NFC has been disabled.");
+ m_context = context;
+ if (context instanceof Activity) m_activity = (Activity) context;
+ m_adapter = NfcAdapter.getDefaultAdapter(context);
+
+ if (m_activity == null) {
+ Log.w(TAG, "New NFC tags will only be recognized with Android activities and not with Android services.");
return;
}
- m_activity = (Activity)context;
- m_adapter = NfcAdapter.getDefaultAdapter(m_activity);
if (m_adapter == null) {
//Log.e(TAG, "No NFC available");
return;
}
+
m_pendingIntent = PendingIntent.getActivity(
m_activity,
0,
@@ -103,7 +106,8 @@ public class QtNfc
static public boolean start()
{
- if (m_adapter == null) return false;
+ if (m_adapter == null || m_activity == null) return false;
+
m_activity.runOnUiThread(new Runnable() {
public void run() {
//Log.d(TAG, "Enabling NFC");
@@ -136,7 +140,8 @@ public class QtNfc
static public boolean stop()
{
- if (m_adapter == null) return false;
+ if (m_adapter == null || m_activity == null) return false;
+
m_activity.runOnUiThread(new Runnable() {
public void run() {
//Log.d(TAG, "Disabling NFC");
@@ -153,11 +158,11 @@ public class QtNfc
static public boolean isAvailable()
{
- m_adapter = NfcAdapter.getDefaultAdapter(m_activity);
if (m_adapter == null) {
//Log.e(TAG, "No NFC available (Adapter is null)");
return false;
}
+
return m_adapter.isEnabled();
}
@@ -165,6 +170,7 @@ public class QtNfc
{
Log.d(TAG, "getStartIntent");
if (m_activity == null) return null;
+
Intent intent = m_activity.getIntent();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()) ||
NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) ||
--
2.11.0

View File

@ -0,0 +1,180 @@
From 6483796d9c117a7dee7c2ffcef090600b04bd21c Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 13 Dec 2016 15:34:32 +0100
Subject: Android: Add support for sendCommand to QNearFieldTarget
For the communication with a German ID card its required to execute
commands. This change enables support for sendCommand.
Change-Id: I95773c047953b244cd5c3e22bfc7abf7f7eb656e
---
src/nfc/qnearfieldtarget.cpp | 3 +-
src/nfc/qnearfieldtarget.h | 3 +-
src/nfc/qnearfieldtarget_android.cpp | 81 +++++++++++++++++++++++-------------
3 files changed, 56 insertions(+), 31 deletions(-)
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
index 509160c1..a65b4be2 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
@@ -111,7 +111,7 @@ QT_BEGIN_NAMESPACE
/*!
\enum QNearFieldTarget::Error
- This enum describes the error codes that that a near field target reports.
+ This enum describes the error codes that a near field target reports.
\value NoError No error has occurred.
\value UnknownError An unidentified error occurred.
@@ -123,6 +123,7 @@ QT_BEGIN_NAMESPACE
\value InvalidParametersError Invalid parameters were passed to a tag type specific function.
\value NdefReadError Failed to read NDEF messages from the target.
\value NdefWriteError Failed to write NDEF messages to the target.
+ \value CommandError Failed to send a command to the target.
*/
// Copied from qbytearray.cpp
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
index dc081f5e..dfb474f6 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
@@ -91,7 +91,8 @@ public:
ChecksumMismatchError,
InvalidParametersError,
NdefReadError,
- NdefWriteError
+ NdefWriteError,
+ CommandError
};
Q_ENUM(Error)
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
index e0c1616d..478f4d8c 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
@@ -43,6 +43,7 @@
#define NDEFTECHNOLOGY "android.nfc.tech.Ndef"
#define NDEFFORMATABLETECHNOLOGY "android.nfc.tech.NdefFormatable"
+#define ISODEPTECHNOLOGY "android.nfc.tech.IsoDep"
#define NFCATECHNOLOGY "android.nfc.tech.NfcA"
#define NFCBTECHNOLOGY "android.nfc.tech.NfcB"
#define NFCFTECHNOLOGY "android.nfc.tech.NfcF"
@@ -84,7 +85,19 @@ QNearFieldTarget::Type NearFieldTarget::type() const
QNearFieldTarget::AccessMethods NearFieldTarget::accessMethods() const
{
- AccessMethods result = NdefAccess;
+ AccessMethods result = UnknownAccess;
+
+ if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY)))
+ result |= NdefAccess;
+
+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCATECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))
+ || m_techList.contains(QStringLiteral(NFCVTECHNOLOGY)))
+ result |= TagTypeSpecificAccess;
+
return result;
}
@@ -157,24 +170,23 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
return requestId;
}
-
QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &command)
{
- Q_UNUSED(command);
- Q_EMIT QNearFieldTarget::error(QNearFieldTarget::UnsupportedError, QNearFieldTarget::RequestId());
- return QNearFieldTarget::RequestId();
-
- //Not supported for now
- /*if (command.size() == 0) {
+ if (command.size() == 0) {
Q_EMIT QNearFieldTarget::error(QNearFieldTarget::InvalidParametersError, QNearFieldTarget::RequestId());
return QNearFieldTarget::RequestId();
}
- AndroidNfc::AttachedJNIEnv aenv;
- JNIEnv *env = aenv.jniEnv;
+ // Making sure that target has commands
+ if (!(accessMethods() & TagTypeSpecificAccess))
+ return QNearFieldTarget::RequestId();
+
+ QAndroidJniEnvironment env;
- jobject tagTech;
- if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
+ QAndroidJniObject tagTech;
+ if (m_techList.contains(ISODEPTECHNOLOGY)) {
+ tagTech = getTagTechnology(ISODEPTECHNOLOGY);
+ } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
} else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
@@ -187,30 +199,41 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
return QNearFieldTarget::RequestId();
}
- QByteArray ba(ba);
-
- jclass techClass = env->GetObjectClass(tagTech);
- jmethodID tranceiveMID = env->GetMethodID(techClass, "tranceive", "([B)[B");
- Q_ASSERT_X(tranceiveMID != 0, "sendCommand", "could not find tranceive method");
+ // Connecting
+ QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
+ tagTech.callMethod<void>("connect");
+ if (catchJavaExceptions()) {
+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
+ Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
+ return requestId;
+ }
+ // Making QByteArray
+ QByteArray ba(command);
jbyteArray jba = env->NewByteArray(ba.size());
env->SetByteArrayRegion(jba, 0, ba.size(), reinterpret_cast<jbyte*>(ba.data()));
- jbyteArray rsp = reinterpret_cast<jbyteArray>(env->CallObjectMethod(tagTech, tranceiveMID, jba));
-
- jsize len = env->GetArrayLength(rsp);
- QByteArray rspQBA;
- rspQBA.resize(len);
-
- env->GetByteArrayRegion(rsp, 0, len, reinterpret_cast<jbyte*>(rspQBA.data()));
-
- qDebug() << "Send command returned QBA size: " << rspQBA.size();
-
-
+ // Writing
+ QAndroidJniObject myNewVal = tagTech.callObjectMethod("transceive", "([B)[B", jba);
+ if (catchJavaExceptions()) {
+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
+ Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
+ return requestId;
+ }
+ QByteArray result = jbyteArrayToQByteArray(myNewVal.object<jbyteArray>());
env->DeleteLocalRef(jba);
+ handleResponse(requestId, result);
- return QNearFieldTarget::RequestId();*/
+ // Closing connection, sending signal and exit
+ tagTech.callMethod<void>("close");
+ catchJavaExceptions(); // IOException at this point does not matter anymore.
+ QMetaObject::invokeMethod(this, "requestCompleted", Qt::QueuedConnection,
+ Q_ARG(const QNearFieldTarget::RequestId&, requestId));
+
+ return requestId;
}
QNearFieldTarget::RequestId NearFieldTarget::sendCommands(const QList<QByteArray> &commands)
--
2.11.0

View File

@ -0,0 +1,374 @@
From f4f7f906ed1c9763c8e79f0882d25caaa00eb264 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 29 Nov 2016 16:34:37 +0100
Subject: Android: QNearfieldTarget: Introduce maxCommandLength()
For the communication with a German ID card its required to execute
commands with a length up to 500 byte. With this change it is
possible to check if the required length is supported.
[ChangeLog][QNearfieldTarget] Introduce maxCommandLength() to
make it possible to check the maximum supported length for commands.
Change-Id: I7e655f419765d8ad728f6d6005a85a01d5aa03e9
---
src/nfc/nfc.pro | 7 +++--
src/nfc/qnearfieldtarget.cpp | 15 +++++++++-
src/nfc/qnearfieldtarget.h | 1 +
src/nfc/qnearfieldtarget_android.cpp | 31 ++++++++++++++++++--
src/nfc/qnearfieldtarget_android_p.cpp | 53 ++++++++++++++++++++++++++++++++++
src/nfc/qnearfieldtarget_android_p.h | 1 +
src/nfc/qnearfieldtarget_neard_p.cpp | 52 +++++++++++++++++++++++++++++++++
src/nfc/qnearfieldtarget_p.cpp | 52 +++++++++++++++++++++++++++++++++
src/nfc/qnearfieldtarget_p.h | 8 +++++
9 files changed, 214 insertions(+), 6 deletions(-)
create mode 100644 src/nfc/qnearfieldtarget_android_p.cpp
create mode 100644 src/nfc/qnearfieldtarget_neard_p.cpp
create mode 100644 src/nfc/qnearfieldtarget_p.cpp
diff --git x/qtconnectivity/src/nfc/nfc.pro y/qtconnectivity/src/nfc/nfc.pro
index 0819cc4f..ce193efa 100644
--- x/qtconnectivity/src/nfc/nfc.pro
+++ y/qtconnectivity/src/nfc/nfc.pro
@@ -74,7 +74,8 @@ linux:!android:qtHaveModule(dbus) {
qllcpserver_p.cpp \
qnearfieldsharemanagerimpl_p.cpp \
qnearfieldsharetargetimpl_p.cpp \
- qnearfieldmanager_neard.cpp
+ qnearfieldmanager_neard.cpp \
+ qnearfieldtarget_neard_p.cpp
include(neard/neard.pri)
@@ -107,6 +108,7 @@ linux:!android:qtHaveModule(dbus) {
android/androidjninfc.cpp \
qnearfieldmanager_android.cpp \
qnearfieldtarget_android.cpp \
+ qnearfieldtarget_android_p.cpp \
qnearfieldsharemanagerimpl_p.cpp \
qnearfieldsharetargetimpl_p.cpp \
android/androidmainnewintentlistener.cpp
@@ -127,7 +129,8 @@ isEmpty(NFC_BACKEND_AVAILABLE) {
qllcpserver_p.cpp \
qnearfieldmanagerimpl_p.cpp \
qnearfieldsharemanagerimpl_p.cpp \
- qnearfieldsharetargetimpl_p.cpp
+ qnearfieldsharetargetimpl_p.cpp \
+ qnearfieldtarget_p.cpp
}
HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
index a65b4be2..274ef175 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
@@ -277,7 +277,7 @@ QNearFieldTarget::RequestId &QNearFieldTarget::RequestId::operator=(const Reques
Constructs a new near field target with \a parent.
*/
QNearFieldTarget::QNearFieldTarget(QObject *parent)
-: QObject(parent), d_ptr(new QNearFieldTargetPrivate)
+: QObject(parent), d_ptr(new QNearFieldTargetPrivate(this))
{
qRegisterMetaType<QNearFieldTarget::RequestId>();
qRegisterMetaType<QNearFieldTarget::Error>();
@@ -365,6 +365,19 @@ QNearFieldTarget::RequestId QNearFieldTarget::writeNdefMessages(const QList<QNde
}
/*!
+ \since 5.9
+
+ Returns the maximum number of bytes that can be sent with sendCommand. 0 will
+ be returned if the target does not support sending tag type specific commands.
+
+ \sa sendCommand(), sendCommands()
+*/
+int QNearFieldTarget::maxCommandLength() const
+{
+ return d_ptr->maxCommandLength();
+}
+
+/*!
Sends \a command to the near field target. Returns a request id which can be used to track the
completion status of the request. An invalid request id will be returned if the target does not
support sending tag type specific commands.
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
index dfb474f6..620ea813 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
@@ -134,6 +134,7 @@ public:
virtual RequestId writeNdefMessages(const QList<QNdefMessage> &messages);
// TagTypeSpecificAccess
+ int maxCommandLength() const;
virtual RequestId sendCommand(const QByteArray &command);
virtual RequestId sendCommands(const QList<QByteArray> &commands);
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
index 478f4d8c..f41b0b2e 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
@@ -170,9 +170,34 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
return requestId;
}
+int NearFieldTarget::maxCommandLength() const
+{
+ QAndroidJniObject tagTech;
+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
+ } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
+ } else {
+ return 0;
+ }
+
+ int returnVal = tagTech.callMethod<jint>("getMaxTransceiveLength");
+ if (catchJavaExceptions()) {
+ return 0;
+ }
+
+ return returnVal;
+}
+
QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &command)
{
- if (command.size() == 0) {
+ if (command.size() == 0 || command.size() > maxCommandLength()) {
Q_EMIT QNearFieldTarget::error(QNearFieldTarget::InvalidParametersError, QNearFieldTarget::RequestId());
return QNearFieldTarget::RequestId();
}
@@ -184,8 +209,8 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
QAndroidJniEnvironment env;
QAndroidJniObject tagTech;
- if (m_techList.contains(ISODEPTECHNOLOGY)) {
- tagTech = getTagTechnology(ISODEPTECHNOLOGY);
+ if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
+ tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
} else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
} else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
new file mode 100644
index 00000000..da2d8f2d
--- /dev/null
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Governikus GmbH & Co. KG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNfc module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCoreApplication>
+
+#include "qnearfieldtarget_p.h"
+#include "qnearfieldtarget_android_p.h"
+
+QT_BEGIN_NAMESPACE
+
+int QNearFieldTargetPrivate::maxCommandLength() const
+{
+ NearFieldTarget * const q = reinterpret_cast<NearFieldTarget *>(q_ptr);
+ return q->maxCommandLength();
+}
+
+QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
index 94bb394d..f2e2ee7f 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
@@ -77,6 +77,7 @@ public:
virtual AccessMethods accessMethods() const;
virtual bool hasNdefMessage();
virtual RequestId readNdefMessages();
+ int maxCommandLength() const;
virtual RequestId sendCommand(const QByteArray &command);
virtual RequestId sendCommands(const QList<QByteArray> &commands);
virtual RequestId writeNdefMessages(const QList<QNdefMessage> &messages);
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
new file mode 100644
index 00000000..3d1bfa6c
--- /dev/null
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Governikus GmbH & Co. K
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNfc module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCoreApplication>
+
+#include "qnearfieldtarget.h"
+#include "qnearfieldtarget_p.h"
+
+QT_BEGIN_NAMESPACE
+
+int QNearFieldTargetPrivate::maxCommandLength() const
+{
+ return 0;
+}
+
+QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
new file mode 100644
index 00000000..3d1bfa6c
--- /dev/null
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Governikus GmbH & Co. K
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNfc module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCoreApplication>
+
+#include "qnearfieldtarget.h"
+#include "qnearfieldtarget_p.h"
+
+QT_BEGIN_NAMESPACE
+
+int QNearFieldTargetPrivate::maxCommandLength() const
+{
+ return 0;
+}
+
+QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
index 7a787ace..9b2ed480 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
@@ -57,6 +57,7 @@
#include <QtCore/QMap>
#include <QtCore/QSharedData>
+#include <QtCore/QVariant>
QT_BEGIN_NAMESPACE
@@ -66,8 +67,15 @@ class QNearFieldTarget::RequestIdPrivate : public QSharedData
class QNearFieldTargetPrivate
{
+ QNearFieldTarget *q_ptr;
+ Q_DECLARE_PUBLIC(QNearFieldTarget)
+
public:
+ QNearFieldTargetPrivate(QNearFieldTarget *q) : q_ptr(q) {}
+
QMap<QNearFieldTarget::RequestId, QVariant> m_decodedResponses;
+
+ int maxCommandLength() const;
};
QT_END_NAMESPACE
--
2.11.0

View File

@ -0,0 +1,44 @@
From 1e9d5b22fbd18cfcf56f5c6ced19c0d9ba55a4f1 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Wed, 11 Jan 2017 17:29:40 +0100
Subject: [PATCH] Do not request an unnessessary dangerous right
Bluetooth LE discovery needs ACCESS_COARSE_LOCATION permission
since android 6.0. In the manifest file it is possible use it by
"<uses-permission-sdk-23 android:name="ACCESS_COARSE_LOCATION" />"
in general. But the bluetooth LE discovery requests it for every
android version. This change enables the request for android > 6.0
only (API-Level >=23).
Task-number: QTBUG-58085
Change-Id: I78ad2fe83eb16eaf45813137335f85c7b3930992
---
src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
index 2d6e64be..e76ddff7 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
+++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_android.cpp
@@ -45,6 +45,7 @@
#include <QtCore/private/qjnihelpers_p.h>
#include "android/devicediscoverybroadcastreceiver_p.h"
#include <QtAndroidExtras/QAndroidJniEnvironment>
+#include <QtAndroid>
QT_BEGIN_NAMESPACE
@@ -147,7 +148,9 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent
// check Android v23+ permissions
// -> BTLE search requires android.permission.ACCESS_COARSE_LOCATION
- if (requestedMethods && QBluetoothDeviceDiscoveryAgent::LowEnergyMethod) {
+ if (requestedMethods & QBluetoothDeviceDiscoveryAgent::LowEnergyMethod
+ && QtAndroid::androidSdkVersion() >= 23)
+ {
QString permission(QLatin1String("android.permission.ACCESS_COARSE_LOCATION"));
// do we have required permission already, if so nothing to do
--
2.11.0

View File

@ -0,0 +1,140 @@
From 523c61571e234865e411d823366dc87d62fe50ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20L=C3=B6sch?= <Sebastian.Loesch@governikus.de>
Date: Wed, 10 Aug 2016 16:51:34 +0200
Subject: Introduce QNetworkAccessManager::clearConnectionCache()
Sometimes it is desirable to use a new connection but keep already
entered user credentials for usability reasons. This is now possible by
clearing the connection cache (but keeping the authentication cache).
Change-Id: I2f5f64836ce19f81c8525701783a3da823dd468e
---
src/network/access/qnetworkaccessmanager.cpp | 25 +++++++++++++++++++---
src/network/access/qnetworkaccessmanager.h | 2 ++
src/network/access/qnetworkaccessmanager_p.h | 3 ++-
.../access/qnetworkreply/tst_qnetworkreply.cpp | 3 ++-
.../tst_network_remote_stresstest.cpp | 3 ++-
.../network_stresstest/tst_network_stresstest.cpp | 3 ++-
6 files changed, 32 insertions(+), 7 deletions(-)
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.cpp y/qtbase/src/network/access/qnetworkaccessmanager.cpp
index 6d5b2400f1..b763547a15 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.cpp
+++ y/qtbase/src/network/access/qnetworkaccessmanager.cpp
@@ -1352,10 +1352,26 @@ QStringList QNetworkAccessManager::supportedSchemesImplementation() const
This function is useful for doing auto tests.
+ \sa clearConnectionCache()
*/
void QNetworkAccessManager::clearAccessCache()
{
- QNetworkAccessManagerPrivate::clearCache(this);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(this);
+ QNetworkAccessManagerPrivate::clearConnectionCache(this);
+}
+
+/*!
+ \since 5.9
+
+ Flushes the internal cache of network connections.
+ In contrast to clearAccessCache() the authentication data
+ is preserved.
+
+ \sa clearAccessCache()
+*/
+void QNetworkAccessManager::clearConnectionCache()
+{
+ QNetworkAccessManagerPrivate::clearConnectionCache(this);
}
void QNetworkAccessManagerPrivate::_q_replyFinished()
@@ -1552,11 +1568,14 @@ QList<QNetworkProxy> QNetworkAccessManagerPrivate::queryProxy(const QNetworkProx
}
#endif
-void QNetworkAccessManagerPrivate::clearCache(QNetworkAccessManager *manager)
+void QNetworkAccessManagerPrivate::clearAuthenticationCache(QNetworkAccessManager *manager)
{
- manager->d_func()->objectCache.clear();
manager->d_func()->authenticationManager->clearCache();
+}
+void QNetworkAccessManagerPrivate::clearConnectionCache(QNetworkAccessManager *manager)
+{
+ manager->d_func()->objectCache.clear();
manager->d_func()->destroyThread();
}
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.h y/qtbase/src/network/access/qnetworkaccessmanager.h
index 4b8c4ddf0e..649013cced 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.h
+++ y/qtbase/src/network/access/qnetworkaccessmanager.h
@@ -106,6 +106,8 @@ public:
void clearAccessCache();
+ void clearConnectionCache();
+
#ifndef QT_NO_NETWORKPROXY
QNetworkProxy proxy() const;
void setProxy(const QNetworkProxy &proxy);
diff --git x/qtbase/src/network/access/qnetworkaccessmanager_p.h y/qtbase/src/network/access/qnetworkaccessmanager_p.h
index bb4641ab8b..b4b5e6a789 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager_p.h
+++ y/qtbase/src/network/access/qnetworkaccessmanager_p.h
@@ -202,7 +202,8 @@ public:
QNetworkAccessCache objectCache;
static inline QNetworkAccessCache *getObjectCache(QNetworkAccessBackend *backend)
{ return &backend->manager->objectCache; }
- Q_AUTOTEST_EXPORT static void clearCache(QNetworkAccessManager *manager);
+ Q_AUTOTEST_EXPORT static void clearAuthenticationCache(QNetworkAccessManager *manager);
+ Q_AUTOTEST_EXPORT static void clearConnectionCache(QNetworkAccessManager *manager);
#ifndef QT_NO_BEARERMANAGEMENT
Q_AUTOTEST_EXPORT static const QWeakPointer<const QNetworkSession> getNetworkSession(const QNetworkAccessManager *manager);
#endif
diff --git x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 649278d48b..c555cd8fa0 100644
--- x/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ y/qtbase/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -6797,7 +6797,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
// QTBUG-23136 workaround (needed even with danted v1.1.19):
if (proxy.port() == 1081) {
#ifdef QT_BUILD_INTERNAL
- QNetworkAccessManagerPrivate::clearCache(&manager);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
#else
return;
#endif
diff --git x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
index 05ede9da99..99e3d148df 100644
--- x/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
+++ y/qtbase/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
@@ -147,7 +147,8 @@ void tst_NetworkRemoteStressTest::init()
void tst_NetworkRemoteStressTest::clearManager()
{
#ifdef QT_BUILD_INTERNAL
- QNetworkAccessManagerPrivate::clearCache(&manager);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
manager.setProxy(QNetworkProxy());
manager.setCache(0);
#endif
diff --git x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
index e3c76ea11b..d46703c671 100644
--- x/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
+++ y/qtbase/tests/manual/network_stresstest/tst_network_stresstest.cpp
@@ -138,7 +138,8 @@ void tst_NetworkStressTest::init()
void tst_NetworkStressTest::clearManager()
{
#ifdef QT_BUILD_INTERNAL
- QNetworkAccessManagerPrivate::clearCache(&manager);
+ QNetworkAccessManagerPrivate::clearAuthenticationCache(&manager);
+ QNetworkAccessManagerPrivate::clearConnectionCache(&manager);
manager.setProxy(QNetworkProxy());
manager.setCache(0);
#endif
--
2.11.0

View File

@ -1,7 +1,7 @@
From 017de42929811e384a9741d46e4553e74605b79c Mon Sep 17 00:00:00 2001
From e1ba5a3265be01d7d353bf82e4d8af331edbb434 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 13 Sep 2016 14:24:25 +0200
Subject: [PATCH] Introduce QNetworkAccessManager::useAuthenticationManagerFrom
Subject: Introduce QNetworkAccessManager::useAuthenticationManagerFrom
Sometimes it is desirable to use a new connection but keep already
entered user credentials for usability reasons. This is now possible by
@ -16,10 +16,10 @@ Change-Id: If61f0d03fc8b2f159bad869d0a2b650170e1e174
2 files changed, 17 insertions(+)
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.cpp y/qtbase/src/network/access/qnetworkaccessmanager.cpp
index 927e103..c6dfca4 100644
index b763547a15..83cb33ce72 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.cpp
+++ y/qtbase/src/network/access/qnetworkaccessmanager.cpp
@@ -1083,6 +1083,21 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
@@ -1079,6 +1079,21 @@ void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port)
}
/*!
@ -42,10 +42,10 @@ index 927e103..c6dfca4 100644
Sends a custom request to the server identified by the URL of \a request.
diff --git x/qtbase/src/network/access/qnetworkaccessmanager.h y/qtbase/src/network/access/qnetworkaccessmanager.h
index 4ce4757..66e3ffb 100644
index 649013cced..24f3c7147c 100644
--- x/qtbase/src/network/access/qnetworkaccessmanager.h
+++ y/qtbase/src/network/access/qnetworkaccessmanager.h
@@ -143,6 +143,8 @@ public:
@@ -149,6 +149,8 @@ public:
#endif
void connectToHost(const QString &hostName, quint16 port = 80);
@ -55,5 +55,5 @@ index 4ce4757..66e3ffb 100644
#ifndef QT_NO_NETWORKPROXY
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
--
2.9.3
2.11.0

View File

@ -1,44 +0,0 @@
From a899b4f42ba33cf1e40f6177da00c5bc901264aa Mon Sep 17 00:00:00 2001
From: "Richard J. Moore" <rich@kde.org>
Date: Thu, 30 Jul 2015 21:42:45 +0100
Subject: [PATCH] Make QCryptographicHash a Q_GADGET.
This makes the hash algorithm play nicely with qDebug.
Change-Id: I6db651cd5c73e8be65442dd68d6b865dcb975f4c
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
---
src/corelib/tools/qcryptographichash.h | 3 +++
1 file changed, 3 insertions(+)
diff --git x/qtbase/src/corelib/tools/qcryptographichash.h y/qtbase/src/corelib/tools/qcryptographichash.h
index a19c734..0f17baa 100644
--- x/qtbase/src/corelib/tools/qcryptographichash.h
+++ y/qtbase/src/corelib/tools/qcryptographichash.h
@@ -42,6 +42,7 @@
#define QCRYPTOGRAPHICHASH_H
#include <QtCore/qbytearray.h>
+#include <QtCore/qobjectdefs.h>
QT_BEGIN_NAMESPACE
@@ -51,6 +52,7 @@ class QIODevice;
class Q_CORE_EXPORT QCryptographicHash
{
+ Q_GADGET
public:
enum Algorithm {
#ifndef QT_CRYPTOGRAPHICHASH_ONLY_SHA1
@@ -69,6 +71,7 @@ public:
Sha3_512
#endif
};
+ Q_ENUM(Algorithm)
explicit QCryptographicHash(Algorithm method);
~QCryptographicHash();
--
2.10.0

View File

@ -11,19 +11,20 @@ server side.
Change-Id: Ia178efd4778b91863fcc919bf50219115b300d77
---
src/network/ssl/qsslconfiguration.cpp | 42 +++++++++++++
src/network/ssl/qsslconfiguration.h | 6 ++
src/network/ssl/qsslconfiguration.h | 8 ++-
src/network/ssl/qsslconfiguration_p.h | 5 ++
src/network/ssl/qsslcontext_openssl.cpp | 45 ++++++++++++++
src/network/ssl/qsslcontext_openssl_p.h | 1 +
src/network/ssl/qsslsocket.cpp | 2 +
src/network/ssl/qsslsocket_openssl_symbols_p.h | 5 ++
.../auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 71 ++++++++++++++++++++++
7 files changed, 176 insertions(+)
.../auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 70 ++++++++++++++++++++++
8 files changed, 177 insertions(+), 1 deletion(-)
diff --git x/qtbase/src/network/ssl/qsslconfiguration.cpp y/qtbase/src/network/ssl/qsslconfiguration.cpp
index c8040de..6bfca86 100644
index 75a880f..37f99fe 100644
--- x/qtbase/src/network/ssl/qsslconfiguration.cpp
+++ y/qtbase/src/network/ssl/qsslconfiguration.cpp
@@ -217,6 +217,7 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const
@@ -221,6 +221,7 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const
d->peerVerifyMode == other.d->peerVerifyMode &&
d->peerVerifyDepth == other.d->peerVerifyDepth &&
d->allowRootCertOnDemandLoading == other.d->allowRootCertOnDemandLoading &&
@ -31,7 +32,7 @@ index c8040de..6bfca86 100644
d->sslOptions == other.d->sslOptions &&
d->sslSession == other.d->sslSession &&
d->sslSessionTicketLifeTimeHint == other.d->sslSessionTicketLifeTimeHint &&
@@ -258,6 +259,7 @@ bool QSslConfiguration::isNull() const
@@ -263,6 +264,7 @@ bool QSslConfiguration::isNull() const
d->privateKey.isNull() &&
d->peerCertificate.isNull() &&
d->peerCertificateChain.count() == 0 &&
@ -39,7 +40,7 @@ index c8040de..6bfca86 100644
d->sslOptions == QSslConfigurationPrivate::defaultSslOptions &&
d->sslSession.isNull() &&
d->sslSessionTicketLifeTimeHint == -1 &&
@@ -811,6 +813,46 @@ QVector<QSslEllipticCurve> QSslConfiguration::supportedEllipticCurves()
@@ -870,6 +872,46 @@ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParame
}
/*!
@ -87,23 +88,27 @@ index c8040de..6bfca86 100644
This function returns the protocol negotiated with the server
diff --git x/qtbase/src/network/ssl/qsslconfiguration.h y/qtbase/src/network/ssl/qsslconfiguration.h
index f0754d7..cfa1e81 100644
index 1c57beb..4d3e512 100644
--- x/qtbase/src/network/ssl/qsslconfiguration.h
+++ y/qtbase/src/network/ssl/qsslconfiguration.h
@@ -56,7 +56,10 @@
@@ -56,10 +56,13 @@
#ifndef QSSLCONFIGURATION_H
#define QSSLCONFIGURATION_H
-#include <QtNetwork/qtnetworkglobal.h>
+#include <QtCore/qcryptographichash.h>
+#include <QtCore/qpair.h>
#include <QtCore/qshareddata.h>
+#include <QtCore/qvector.h>
#include <QtNetwork/qsslsocket.h>
#include <QtNetwork/qssl.h>
+#include <QtNetwork/qtnetworkglobal.h>
@@ -141,6 +144,9 @@ public:
void setEllipticCurves(const QVector<QSslEllipticCurve> &curves);
static QVector<QSslEllipticCurve> supportedEllipticCurves();
#ifndef QT_NO_SSL
@@ -149,6 +152,9 @@ public:
QSslDiffieHellmanParameters diffieHellmanParameters() const;
void setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams);
+ QVector<QPair<QSsl::KeyAlgorithm, QCryptographicHash::Algorithm> > signatureAndHashAlgorithms() const;
+ void setSignatureAndHashAlgorithms(const QVector<QPair<QSsl::KeyAlgorithm, QCryptographicHash::Algorithm> > &algorithms);
@ -112,22 +117,22 @@ index f0754d7..cfa1e81 100644
static void setDefaultConfiguration(const QSslConfiguration &configuration);
diff --git x/qtbase/src/network/ssl/qsslconfiguration_p.h y/qtbase/src/network/ssl/qsslconfiguration_p.h
index 364bba9..9553088 100644
index 6adf2c9..7be2539 100644
--- x/qtbase/src/network/ssl/qsslconfiguration_p.h
+++ y/qtbase/src/network/ssl/qsslconfiguration_p.h
@@ -73,6 +73,9 @@
#include "qsslcipher.h"
@@ -75,6 +75,9 @@
#include "qsslkey.h"
#include "qsslellipticcurve.h"
#include "qssldiffiehellmanparameters.h"
+#include <QtCore/qcryptographichash.h>
+#include <QtCore/qpair.h>
+#include <QtCore/qvector.h>
QT_BEGIN_NAMESPACE
@@ -117,6 +120,8 @@ public:
@@ -123,6 +126,8 @@ public:
QVector<QSslEllipticCurve> ellipticCurves;
QSslDiffieHellmanParameters dhParams;
+ QVector<QPair<QSsl::KeyAlgorithm, QCryptographicHash::Algorithm> > signatureAndHashAlgorithms;
+
@ -135,18 +140,18 @@ index 364bba9..9553088 100644
int sslSessionTicketLifeTimeHint;
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl.cpp y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
index f132d02..83f2435 100644
index c92d8fc..29df53a 100644
--- x/qtbase/src/network/ssl/qsslcontext_openssl.cpp
+++ y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
@@ -41,6 +41,7 @@
@@ -42,6 +42,7 @@
#include <QtNetwork/qsslsocket.h>
#include <QtNetwork/qssldiffiehellmanparameters.h>
+#include <QtCore/qmetaobject.h>
#include <QtCore/qmutex.h>
#include "private/qssl_p.h"
@@ -92,6 +93,11 @@ QSslContext::~QSslContext()
@@ -78,6 +79,11 @@ QSslContext::~QSslContext()
q_SSL_SESSION_free(session);
}
@ -158,7 +163,7 @@ index f132d02..83f2435 100644
static inline QString msgErrorSettingEllipticCurves(const QString &why)
{
return QSslSocket::tr("Error when setting the elliptic curves (%1)").arg(why);
@@ -367,6 +373,45 @@ init_context:
@@ -371,6 +377,45 @@ init_context:
sslContext->errorCode = QSslError::UnspecifiedError;
}
}
@ -204,11 +209,23 @@ index f132d02..83f2435 100644
}
QSslContext* QSslContext::fromConfiguration(QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl_p.h y/qtbase/src/network/ssl/qsslcontext_openssl_p.h
index 06a31af..c8c8e194 100644
--- x/qtbase/src/network/ssl/qsslcontext_openssl_p.h
+++ y/qtbase/src/network/ssl/qsslcontext_openssl_p.h
@@ -54,6 +54,7 @@
//
#include <QtNetwork/private/qtnetworkglobal_p.h>
+#include <QtCore/qobjectdefs.h>
#include <QtCore/qvariant.h>
#include <QtNetwork/qsslcertificate.h>
#include <QtNetwork/qsslconfiguration.h>
diff --git x/qtbase/src/network/ssl/qsslsocket.cpp y/qtbase/src/network/ssl/qsslsocket.cpp
index a5ee9bf..c92645f 100644
index 29e1f32..8257112 100644
--- x/qtbase/src/network/ssl/qsslsocket.cpp
+++ y/qtbase/src/network/ssl/qsslsocket.cpp
@@ -927,6 +927,7 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
@@ -922,6 +922,7 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
d->configuration.peerVerifyDepth = configuration.peerVerifyDepth();
d->configuration.peerVerifyMode = configuration.peerVerifyMode();
d->configuration.protocol = configuration.protocol();
@ -216,7 +233,7 @@ index a5ee9bf..c92645f 100644
d->configuration.sslOptions = configuration.d->sslOptions;
d->configuration.sslSession = configuration.sessionTicket();
d->configuration.sslSessionTicketLifeTimeHint = configuration.sessionTicketLifeTimeHint();
@@ -2235,6 +2236,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
@@ -2230,6 +2231,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
ptr->peerVerifyDepth = global->peerVerifyDepth;
ptr->sslOptions = global->sslOptions;
ptr->ellipticCurves = global->ellipticCurves;
@ -225,10 +242,10 @@ index a5ee9bf..c92645f 100644
/*!
diff --git x/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h y/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
index 36e041b..7bdd719 100644
index b35a895..d4cd493 100644
--- x/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ y/qtbase/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -493,6 +493,11 @@ int q_EC_curve_nist2nid(const char *name);
@@ -517,6 +517,11 @@ int q_EC_curve_nist2nid(const char *name);
#define q_SSL_get_server_tmp_key(ssl, key) q_SSL_ctrl((ssl), SSL_CTRL_GET_SERVER_TMP_KEY, 0, (char *)key)
#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
@ -241,22 +258,22 @@ index 36e041b..7bdd719 100644
int q_PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca);
PKCS12 *q_d2i_PKCS12_bio(BIO *bio, PKCS12 **pkcs12);
diff --git x/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp y/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index f8c5b8b..a94e385 100644
index 4eb26d1..79a55cc 100644
--- x/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ y/qtbase/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -229,6 +229,8 @@ private slots:
void simplePskConnect();
void ephemeralServerKey_data();
@@ -236,6 +236,8 @@ private slots:
void ephemeralServerKey();
void allowedProtocolNegotiation();
void pskServer();
+ void signatureAlgorithm_data();
+ void signatureAlgorithm();
#endif
static void exitLoop()
@@ -3375,6 +3377,75 @@ void tst_QSslSocket::ephemeralServerKey()
QCOMPARE(client->sslConfiguration().ephemeralServerKey().isNull(), emptyKey);
void setEmptyDefaultConfiguration(); // this test should be last
@@ -3744,6 +3746,74 @@ void tst_QSslSocket::pskServer()
QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState);
QCOMPARE(disconnectedSpy.count(), 1);
}
+using SigAlgPair = QPair<QSsl::KeyAlgorithm, QCryptographicHash::Algorithm>;
+Q_DECLARE_METATYPE(QCryptographicHash::Algorithm);
+Q_DECLARE_METATYPE(QSsl::KeyAlgorithm);
@ -325,10 +342,9 @@ index f8c5b8b..a94e385 100644
+ QCOMPARE(client.state(), state);
+}
+
+
#endif // QT_NO_OPENSSL
#endif // QT_NO_SSL
--
2.10.0
2.10.2

View File

@ -1,100 +0,0 @@
From 29618d33243783725bb601ff8d9bd263309f4f32 Mon Sep 17 00:00:00 2001
From: Vladimir Prus <vladimir.prus@gmail.com>
Date: Fri, 20 Nov 2015 11:20:02 +0300
Subject: [PATCH] Make sure SSL configuration is correct in
QNetworkReply::encrypted.
In some cases, when QNetworkReply::encrypted is emitted,
QNetworkReply::sslConfiguration is not yet initialized, in particular
certificate chain is empty, which breaks the documented usage of
'encrypted' to perform additional checks on certificate chain.
It looks to be caused by the fact that QHttpNetworkReply is originally
associated with 0th QHttpNetworkConnectionChannel, and this association
is not updated if HTTP pipelining is not used. Therefore, a reply on
channel >0 might arrive before reply on channel 0, and then using ssl
configuration from channel 0, which not made it through handshake, is
not usable.
Task-number: QTBUG-49554
Change-Id: Ie5d4b5a0c503d5bdc44761ce8581f6ffe4e3bac2
---
src/network/access/qhttpnetworkconnection.cpp | 15 +++++++++++----
src/network/access/qhttpnetworkconnection_p.h | 1 +
src/network/access/qhttpnetworkconnectionchannel.cpp | 3 +--
3 files changed, 13 insertions(+), 6 deletions(-)
diff --git x/qtbase/src/network/access/qhttpnetworkconnection.cpp y/qtbase/src/network/access/qhttpnetworkconnection.cpp
index 79f418f..7f07403 100644
--- x/qtbase/src/network/access/qhttpnetworkconnection.cpp
+++ y/qtbase/src/network/access/qhttpnetworkconnection.cpp
@@ -674,8 +674,7 @@ bool QHttpNetworkConnectionPrivate::dequeueRequest(QAbstractSocket *socket)
HttpMessagePair messagePair = highPriorityQueue.takeLast();
if (!messagePair.second->d_func()->requestIsPrepared)
prepareRequest(messagePair);
- channels[i].request = messagePair.first;
- channels[i].reply = messagePair.second;
+ updateChannel(i, messagePair);
return true;
}
@@ -684,13 +683,21 @@ bool QHttpNetworkConnectionPrivate::dequeueRequest(QAbstractSocket *socket)
HttpMessagePair messagePair = lowPriorityQueue.takeLast();
if (!messagePair.second->d_func()->requestIsPrepared)
prepareRequest(messagePair);
- channels[i].request = messagePair.first;
- channels[i].reply = messagePair.second;
+ updateChannel(i, messagePair);
return true;
}
return false;
}
+void QHttpNetworkConnectionPrivate::updateChannel(int i, const HttpMessagePair &messagePair)
+{
+ channels[i].request = messagePair.first;
+ channels[i].reply = messagePair.second;
+ // Now that reply is assigned a channel, correct reply to channel association
+ // previously set in queueRequest.
+ channels[i].reply->d_func()->connectionChannel = &channels[i];
+}
+
QHttpNetworkRequest QHttpNetworkConnectionPrivate::predictNextRequest() const
{
if (!highPriorityQueue.isEmpty())
diff --git x/qtbase/src/network/access/qhttpnetworkconnection_p.h y/qtbase/src/network/access/qhttpnetworkconnection_p.h
index e05bc1d..df71425 100644
--- x/qtbase/src/network/access/qhttpnetworkconnection_p.h
+++ y/qtbase/src/network/access/qhttpnetworkconnection_p.h
@@ -213,6 +213,7 @@ public:
void requeueRequest(const HttpMessagePair &pair); // e.g. after pipeline broke
bool dequeueRequest(QAbstractSocket *socket);
void prepareRequest(HttpMessagePair &request);
+ void updateChannel(int i, const HttpMessagePair &messagePair);
QHttpNetworkRequest predictNextRequest() const;
void fillPipeline(QAbstractSocket *socket);
diff --git x/qtbase/src/network/access/qhttpnetworkconnectionchannel.cpp y/qtbase/src/network/access/qhttpnetworkconnectionchannel.cpp
index 56716cb..8e0e88d 100644
--- x/qtbase/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ y/qtbase/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -1076,6 +1076,7 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
connection->d_func()->dequeueRequest(socket);
if (reply) {
reply->setSpdyWasUsed(false);
+ Q_ASSERT(reply->d_func()->connectionChannel == this);
emit reply->encrypted();
}
if (reply)
@@ -1115,8 +1116,6 @@ void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors)
connection->d_func()->pauseConnection();
if (pendingEncrypt && !reply)
connection->d_func()->dequeueRequest(socket);
- if (reply) // a reply was actually dequeued.
- reply->d_func()->connectionChannel = this; // set correct channel like in sendRequest() and queueRequest();
if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP) {
if (reply)
emit reply->sslErrors(errors);
--
2.10.0

View File

@ -0,0 +1,69 @@
From a3a86b6b4acb210392d0aa0aad555f7afb455e0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20L=C3=B6sch?= <Sebastian.Loesch@governikus.de>
Date: Tue, 1 Nov 2016 11:16:32 +0100
Subject: Make variant selection possible if base is missing
[ChangeLog][QtCore][QFileSelector] Removed the requirement for an unused
default base file in case you want to load only a variant.
When the base file (e.g. /image.jpg) was missing, no selectors were
considered and it was not possible to load variants of this file (e.g.
/+android/image.jpg, /+android/+tablet/image.jpg) without specifying the
directory as well.
As a work around, one previously had to place a default file in
the base location, which is undesirable in some cases because:
1. The extra file consumes unnecessary space.
2. It is impossible to encapsulate platform-specific implementation
details by hiding files in a subdirectory.
Task-number: QTBUG-51230
Change-Id: I4c7f9ec952bff6e5b7738d8cabe3c762c208a38e
---
src/corelib/io/qfileselector.cpp | 9 +++------
tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp | 2 +-
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git x/qtbase/src/corelib/io/qfileselector.cpp y/qtbase/src/corelib/io/qfileselector.cpp
index 920281cef7..b48b3e1162 100644
--- x/qtbase/src/corelib/io/qfileselector.cpp
+++ y/qtbase/src/corelib/io/qfileselector.cpp
@@ -133,9 +133,9 @@ QFileSelectorPrivate::QFileSelectorPrivate()
With those files available, you would select a different file on the android platform,
but only if the locale was en_GB.
- QFileSelector will not attempt to select if the base file does not exist. For error handling in
- the case no valid selectors are present, it is recommended to have a default or error-handling
- file in the base file location even if you expect selectors to be present for all deployments.
+ For error handling in the case no valid selectors are present, it is recommended to have a default or
+ error-handling file in the base file location even if you expect selectors to be present for all
+ deployments.
In a future version, some may be marked as deploy-time static and be moved during the
deployment step as an optimization. As selectors come with a performance cost, it is
@@ -298,9 +298,6 @@ QString QFileSelectorPrivate::select(const QString &filePath) const
{
Q_Q(const QFileSelector);
QFileInfo fi(filePath);
- // If file doesn't exist, don't select
- if (!fi.exists())
- return filePath;
QString ret = selectionHelper(fi.path().isEmpty() ? QString() : fi.path() + QLatin1Char('/'),
fi.fileName(), q->allSelectors());
diff --git x/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp y/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
index e5ede1ad06..8c2886f337 100644
--- x/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
+++ y/qtbase/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
@@ -138,7 +138,7 @@ void tst_QFileSelector::basicTest_data()
<< QString(":/extras/test2");
QTest::newRow("custom1-withselector-nobasefile") << QString(":/extras/test3") << (QStringList() << custom1)
- << QString(":/extras/test3");
+ << QString(":/extras/+custom1/test3");
QString custom2("custom2");
QString custom3("custom3");
--
2.11.0

View File

@ -0,0 +1,681 @@
From 0d81394307262f386e9e7d05b37f373c6e64066d Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Thu, 5 Jan 2017 13:43:57 +0100
Subject: QNearfieldTarget: Introduce (set)keepConnection() and disconnect()
For the communication with a German ID card its required to execute
several commands in a row, whereby a state is generated. Every command
works on the state created by the command before. Depending on the
Android version the state gets lost when the connection is closed.
With this change it is possible to keep the connection as long as needed
and close it manually. Because of backward compatibility the connection
is created and closed automatically by default. With the use of
setKeepConnection(true) the communication with the target is also a
lot of faster.
[ChangeLog][QNearfieldTarget] Introduce (set)keepConnection() and
disconnect() to keep the state of a target and speed up communication.
Change-Id: I5778c9bdaf04cfeae78b3222bef4475f4cd7c436
---
src/nfc/qnearfieldtarget.cpp | 46 ++++++
src/nfc/qnearfieldtarget.h | 4 +
src/nfc/qnearfieldtarget_android.cpp | 252 ++++++++++++++++++++-------------
src/nfc/qnearfieldtarget_android_p.cpp | 20 ++-
src/nfc/qnearfieldtarget_android_p.h | 8 ++
src/nfc/qnearfieldtarget_neard_p.cpp | 15 ++
src/nfc/qnearfieldtarget_p.cpp | 16 +++
src/nfc/qnearfieldtarget_p.h | 5 +
8 files changed, 265 insertions(+), 101 deletions(-)
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
index 274ef175..4477d74b 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
@@ -319,6 +319,52 @@ QUrl QNearFieldTarget::url() const
*/
/*!
+ \since 5.9
+
+ Returns true if this feature is enabled.
+
+ \sa setKeepConnection(), disconnect()
+*/
+bool QNearFieldTarget::keepConnection() const
+{
+ return d_ptr->keepConnection();
+}
+
+/*!
+ \since 5.9
+
+ Causes QNearFieldTarget to keep the connection after processing a command
+ or reading/writing NDEF messages. A call of this function is only needed once.
+
+ Returns true if enabling this feature was successful. A possible
+ reason for a failure is the lack of support on the used platform.
+
+ Enabling this feature requires to use the disconnect() function too, to close the
+ connection manually and enable communication with the target from a different instance.
+ Disabling this feature will also close an open connection.
+
+ \sa keepConnection(), disconnect()
+*/
+bool QNearFieldTarget::setKeepConnection(bool isPersistent)
+{
+ return d_ptr->setKeepConnection(isPersistent);
+}
+
+/*!
+ \since 5.9
+
+ Closes the connection to the target.
+
+ Returns true only if an existing connection was successfully closed.
+
+ \sa keepConnection(), setKeepConnection()
+*/
+bool QNearFieldTarget::disconnect()
+{
+ return d_ptr->disconnect();
+}
+
+/*!
Returns true if the target is processing commands; otherwise returns false.
*/
bool QNearFieldTarget::isProcessingCommand() const
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
index 620ea813..19d87e96 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
@@ -126,6 +126,10 @@ public:
virtual Type type() const = 0;
virtual AccessMethods accessMethods() const = 0;
+ bool keepConnection() const;
+ bool setKeepConnection(bool isPersistent);
+ bool disconnect();
+
bool isProcessingCommand() const;
// NdefAccess
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
index f41b0b2e..04718fc5 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
@@ -41,26 +41,27 @@
#include "android/androidjninfc_p.h"
#include "qdebug.h"
-#define NDEFTECHNOLOGY "android.nfc.tech.Ndef"
-#define NDEFFORMATABLETECHNOLOGY "android.nfc.tech.NdefFormatable"
-#define ISODEPTECHNOLOGY "android.nfc.tech.IsoDep"
-#define NFCATECHNOLOGY "android.nfc.tech.NfcA"
-#define NFCBTECHNOLOGY "android.nfc.tech.NfcB"
-#define NFCFTECHNOLOGY "android.nfc.tech.NfcF"
-#define NFCVTECHNOLOGY "android.nfc.tech.NfcV"
-#define MIFARECLASSICTECHNOLOGY "android.nfc.tech.MifareClassic"
-#define MIFARECULTRALIGHTTECHNOLOGY "android.nfc.tech.MifareUltralight"
-
-#define MIFARETAG "com.nxp.ndef.mifareclassic"
-#define NFCTAGTYPE1 "org.nfcforum.ndef.type1"
-#define NFCTAGTYPE2 "org.nfcforum.ndef.type2"
-#define NFCTAGTYPE3 "org.nfcforum.ndef.type3"
-#define NFCTAGTYPE4 "org.nfcforum.ndef.type4"
+#define NDEFTECHNOLOGY QStringLiteral("android.nfc.tech.Ndef")
+#define NDEFFORMATABLETECHNOLOGY QStringLiteral("android.nfc.tech.NdefFormatable")
+#define ISODEPTECHNOLOGY QStringLiteral("android.nfc.tech.IsoDep")
+#define NFCATECHNOLOGY QStringLiteral("android.nfc.tech.NfcA")
+#define NFCBTECHNOLOGY QStringLiteral("android.nfc.tech.NfcB")
+#define NFCFTECHNOLOGY QStringLiteral("android.nfc.tech.NfcF")
+#define NFCVTECHNOLOGY QStringLiteral("android.nfc.tech.NfcV")
+#define MIFARECLASSICTECHNOLOGY QStringLiteral("android.nfc.tech.MifareClassic")
+#define MIFARECULTRALIGHTTECHNOLOGY QStringLiteral("android.nfc.tech.MifareUltralight")
+
+#define MIFARETAG QStringLiteral("com.nxp.ndef.mifareclassic")
+#define NFCTAGTYPE1 QStringLiteral("org.nfcforum.ndef.type1")
+#define NFCTAGTYPE2 QStringLiteral("org.nfcforum.ndef.type2")
+#define NFCTAGTYPE3 QStringLiteral("org.nfcforum.ndef.type3")
+#define NFCTAGTYPE4 QStringLiteral("org.nfcforum.ndef.type4")
NearFieldTarget::NearFieldTarget(QAndroidJniObject intent, const QByteArray uid, QObject *parent) :
QNearFieldTarget(parent),
m_intent(intent),
- m_uid(uid)
+ m_uid(uid),
+ m_keepConnection(false)
{
updateTechList();
updateType();
@@ -87,23 +88,54 @@ QNearFieldTarget::AccessMethods NearFieldTarget::accessMethods() const
{
AccessMethods result = UnknownAccess;
- if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY)))
+ if (m_techList.contains(NDEFTECHNOLOGY)
+ || m_techList.contains(NDEFFORMATABLETECHNOLOGY))
result |= NdefAccess;
- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCATECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))
- || m_techList.contains(QStringLiteral(NFCVTECHNOLOGY)))
+ if (m_techList.contains(ISODEPTECHNOLOGY)
+ || m_techList.contains(NFCATECHNOLOGY)
+ || m_techList.contains(NFCBTECHNOLOGY)
+ || m_techList.contains(NFCFTECHNOLOGY)
+ || m_techList.contains(NFCVTECHNOLOGY))
result |= TagTypeSpecificAccess;
return result;
}
+bool NearFieldTarget::keepConnection() const
+{
+ return m_keepConnection;
+}
+
+bool NearFieldTarget::setKeepConnection(bool isPersistent)
+{
+ m_keepConnection = isPersistent;
+
+ if (!m_keepConnection)
+ disconnect();
+
+ return true;
+}
+
+bool NearFieldTarget::disconnect()
+{
+ if (!m_tagTech.isValid())
+ return false;
+
+ bool connected = m_tagTech.callMethod<jboolean>("isConnected");
+ if (catchJavaExceptions())
+ return false;
+
+ if (!connected)
+ return false;
+
+ m_tagTech.callMethod<void>("close");
+ return !catchJavaExceptions();
+}
+
bool NearFieldTarget::hasNdefMessage()
{
- return m_techList.contains(QStringLiteral(NDEFTECHNOLOGY));
+ return m_techList.contains(NDEFTECHNOLOGY);
}
QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
@@ -122,8 +154,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
}
// Getting Ndef technology object
- QAndroidJniObject ndef = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
- if (!ndef.isValid()) {
+ if (!setTagTechnology({NDEFTECHNOLOGY})) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -131,8 +162,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
}
// Connect
- ndef.callMethod<void>("connect");
- if (catchJavaExceptions()) {
+ if (!connect()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -140,7 +170,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
}
// Get NdefMessage object
- QAndroidJniObject ndefMessage = ndef.callObjectMethod("getNdefMessage", "()Landroid/nfc/NdefMessage;");
+ QAndroidJniObject ndefMessage = m_tagTech.callObjectMethod("getNdefMessage", "()Landroid/nfc/NdefMessage;");
if (catchJavaExceptions())
ndefMessage = QAndroidJniObject();
if (!ndefMessage.isValid()) {
@@ -154,9 +184,10 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
QAndroidJniObject ndefMessageBA = ndefMessage.callObjectMethod("toByteArray", "()[B");
QByteArray ndefMessageQBA = jbyteArrayToQByteArray(ndefMessageBA.object<jbyteArray>());
- // Closing connection
- ndef.callMethod<void>("close");
- catchJavaExceptions(); // IOException at this point does not matter anymore.
+ if (!m_keepConnection) {
+ // Closing connection
+ disconnect(); // IOException at this point does not matter anymore.
+ }
// Sending QNdefMessage, requestCompleted and exit.
QNdefMessage qNdefMessage = QNdefMessage::fromByteArray(ndefMessageQBA);
@@ -173,24 +204,22 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
int NearFieldTarget::maxCommandLength() const
{
QAndroidJniObject tagTech;
- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
- } else {
+ if (m_techList.contains(ISODEPTECHNOLOGY))
+ tagTech = getTagTechnology(ISODEPTECHNOLOGY);
+ else if (m_techList.contains(NFCATECHNOLOGY))
+ tagTech = getTagTechnology(NFCATECHNOLOGY);
+ else if (m_techList.contains(NFCBTECHNOLOGY))
+ tagTech = getTagTechnology(NFCBTECHNOLOGY);
+ else if (m_techList.contains(NFCFTECHNOLOGY))
+ tagTech = getTagTechnology(NFCFTECHNOLOGY);
+ else if (m_techList.contains(NFCVTECHNOLOGY))
+ tagTech = getTagTechnology(NFCVTECHNOLOGY);
+ else
return 0;
- }
int returnVal = tagTech.callMethod<jint>("getMaxTransceiveLength");
- if (catchJavaExceptions()) {
+ if (catchJavaExceptions())
return 0;
- }
return returnVal;
}
@@ -208,26 +237,14 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
QAndroidJniEnvironment env;
- QAndroidJniObject tagTech;
- if (m_techList.contains(QStringLiteral(ISODEPTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(ISODEPTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCBTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCFTECHNOLOGY));
- } else if (m_techList.contains(QStringLiteral(NFCVTECHNOLOGY))) {
- tagTech = getTagTechnology(QStringLiteral(NFCVTECHNOLOGY));
- } else {
+ if (!setTagTechnology({ISODEPTECHNOLOGY, NFCATECHNOLOGY, NFCBTECHNOLOGY, NFCFTECHNOLOGY, NFCVTECHNOLOGY})) {
Q_EMIT QNearFieldTarget::error(QNearFieldTarget::UnsupportedError, QNearFieldTarget::RequestId());
return QNearFieldTarget::RequestId();
}
// Connecting
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
- tagTech.callMethod<void>("connect");
- if (catchJavaExceptions()) {
+ if (!connect()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -240,7 +257,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
env->SetByteArrayRegion(jba, 0, ba.size(), reinterpret_cast<jbyte*>(ba.data()));
// Writing
- QAndroidJniObject myNewVal = tagTech.callObjectMethod("transceive", "([B)[B", jba);
+ QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba);
if (catchJavaExceptions()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
@@ -252,9 +269,10 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
handleResponse(requestId, result);
- // Closing connection, sending signal and exit
- tagTech.callMethod<void>("close");
- catchJavaExceptions(); // IOException at this point does not matter anymore.
+ if (!m_keepConnection) {
+ // Closing connection
+ disconnect(); // IOException at this point does not matter anymore.
+ }
QMetaObject::invokeMethod(this, "requestCompleted", Qt::QueuedConnection,
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -264,9 +282,8 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
QNearFieldTarget::RequestId NearFieldTarget::sendCommands(const QList<QByteArray> &commands)
{
QNearFieldTarget::RequestId requestId;
- for (int i=0; i < commands.size(); i++){
+ for (int i=0; i < commands.size(); i++)
requestId = sendCommand(commands.at(i));
- }
return requestId;
}
@@ -282,22 +299,18 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
const char *writeMethod;
QAndroidJniObject tagTechnology;
+ if (!setTagTechnology({NDEFFORMATABLETECHNOLOGY, NDEFTECHNOLOGY}))
+ return QNearFieldTarget::RequestId();
+
// Getting write method
- if (m_techList.contains(QStringLiteral(NDEFFORMATABLETECHNOLOGY))) {
- tagTechnology = getTagTechnology(QStringLiteral(NDEFFORMATABLETECHNOLOGY));
+ if (m_tech == NDEFFORMATABLETECHNOLOGY)
writeMethod = "format";
- } else if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))) {
- tagTechnology = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
+ else
writeMethod = "writeNdefMessage";
- } else {
- // An invalid request id will be returned if the target does not support writing NDEF messages.
- return QNearFieldTarget::RequestId();
- }
// Connecting
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
- tagTechnology.callMethod<void>("connect");
- if (catchJavaExceptions()) {
+ if (!connect()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -326,9 +339,8 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
return requestId;
}
- // Closing connection, sending signal and exit
- tagTechnology.callMethod<void>("close");
- catchJavaExceptions(); // IOException at this point does not matter anymore.
+ if (!m_keepConnection)
+ disconnect(); // IOException at this point does not matter anymore.
QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection);
return requestId;
}
@@ -350,19 +362,26 @@ void NearFieldTarget::setIntent(QAndroidJniObject intent)
void NearFieldTarget::checkIsTargetLost()
{
- if (!m_intent.isValid() || m_techList.isEmpty()) {
+ if (!m_intent.isValid() || !setTagTechnology(m_techList)) {
handleTargetLost();
return;
}
- // Using first available technology to check connection
- QString techStr = m_techList.first();
- QAndroidJniObject tagTech = getTagTechnology(techStr);
- tagTech.callMethod<void>("connect");
+
+ bool connected = m_tagTech.callMethod<jboolean>("isConnected");
+ if (catchJavaExceptions()) {
+ handleTargetLost();
+ return;
+ }
+
+ if (connected)
+ return;
+
+ m_tagTech.callMethod<void>("connect");
if (catchJavaExceptions(false)) {
handleTargetLost();
return;
}
- tagTech.callMethod<void>("close");
+ m_tagTech.callMethod<void>("close");
if (catchJavaExceptions(false))
handleTargetLost();
}
@@ -406,28 +425,28 @@ QNearFieldTarget::Type NearFieldTarget::getTagType() const
{
QAndroidJniEnvironment env;
- if (m_techList.contains(QStringLiteral(NDEFTECHNOLOGY))) {
- QAndroidJniObject ndef = getTagTechnology(QStringLiteral(NDEFTECHNOLOGY));
+ if (m_techList.contains(NDEFTECHNOLOGY)) {
+ QAndroidJniObject ndef = getTagTechnology(NDEFTECHNOLOGY);
QString qtype = ndef.callObjectMethod("getType", "()Ljava/lang/String;").toString();
- if (qtype.compare(QStringLiteral(MIFARETAG)) == 0)
+ if (qtype.compare(MIFARETAG) == 0)
return MifareTag;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE1)) == 0)
+ if (qtype.compare(NFCTAGTYPE1) == 0)
return NfcTagType1;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE2)) == 0)
+ if (qtype.compare(NFCTAGTYPE2) == 0)
return NfcTagType2;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE3)) == 0)
+ if (qtype.compare(NFCTAGTYPE3) == 0)
return NfcTagType3;
- if (qtype.compare(QStringLiteral(NFCTAGTYPE4)) == 0)
+ if (qtype.compare(NFCTAGTYPE4) == 0)
return NfcTagType4;
return ProprietaryTag;
- } else if (m_techList.contains(QStringLiteral(NFCATECHNOLOGY))) {
- if (m_techList.contains(QStringLiteral(MIFARECLASSICTECHNOLOGY)))
+ } else if (m_techList.contains(NFCATECHNOLOGY)) {
+ if (m_techList.contains(MIFARECLASSICTECHNOLOGY))
return MifareTag;
// Checking ATQA/SENS_RES
// xxx0 0000 xxxx xxxx: Identifies tag Type 1 platform
- QAndroidJniObject nfca = getTagTechnology(QStringLiteral(NFCATECHNOLOGY));
+ QAndroidJniObject nfca = getTagTechnology(NFCATECHNOLOGY);
QAndroidJniObject atqaBA = nfca.callObjectMethod("getAtqa", "()[B");
QByteArray atqaQBA = jbyteArrayToQByteArray(atqaBA.object<jbyteArray>());
if (atqaQBA.isEmpty())
@@ -444,9 +463,9 @@ QNearFieldTarget::Type NearFieldTarget::getTagType() const
else if ((sakS & 0x0064) == 0x0020)
return NfcTagType4;
return ProprietaryTag;
- } else if (m_techList.contains(QStringLiteral(NFCBTECHNOLOGY))) {
+ } else if (m_techList.contains(NFCBTECHNOLOGY)) {
return NfcTagType4;
- } else if (m_techList.contains(QStringLiteral(NFCFTECHNOLOGY))) {
+ } else if (m_techList.contains(NFCFTECHNOLOGY)) {
return NfcTagType3;
}
@@ -457,7 +476,7 @@ void NearFieldTarget::setupTargetCheckTimer()
{
m_targetCheckTimer = new QTimer(this);
m_targetCheckTimer->setInterval(1000);
- connect(m_targetCheckTimer, SIGNAL(timeout()), this, SLOT(checkIsTargetLost()));
+ QObject::connect(m_targetCheckTimer, &QTimer::timeout, this, &NearFieldTarget::checkIsTargetLost);
m_targetCheckTimer->start();
}
@@ -475,9 +494,42 @@ QAndroidJniObject NearFieldTarget::getTagTechnology(const QString &tech) const
// Getting requested technology
QAndroidJniObject tag = AndroidNfc::getTag(m_intent);
const QString sig = QString::fromUtf8("(Landroid/nfc/Tag;)L%1;");
- QAndroidJniObject tagtech = QAndroidJniObject::callStaticObjectMethod(techClass.toUtf8().constData(), "get",
+ QAndroidJniObject tagTech = QAndroidJniObject::callStaticObjectMethod(techClass.toUtf8().constData(), "get",
sig.arg(techClass).toUtf8().constData(), tag.object<jobject>());
- return tagtech;
+
+ return tagTech;
+}
+
+bool NearFieldTarget::setTagTechnology(const QStringList &techList)
+{
+ for (const QString &tech : techList) {
+ if (m_techList.contains(tech)) {
+ if (m_tech == tech) {
+ return true;
+ }
+ m_tech = tech;
+ m_tagTech = getTagTechnology(tech);
+ return m_tagTech.isValid();
+ }
+ }
+
+ return false;
+}
+
+bool NearFieldTarget::connect()
+{
+ if (!m_tagTech.isValid())
+ return false;
+
+ bool connected = m_tagTech.callMethod<jboolean>("isConnected");
+ if (catchJavaExceptions())
+ return false;
+
+ if (connected)
+ return true;
+
+ m_tagTech.callMethod<void>("connect");
+ return !catchJavaExceptions();
}
QByteArray NearFieldTarget::jbyteArrayToQByteArray(const jbyteArray &byteArray) const
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
index da2d8f2d..de553ea9 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.cpp
@@ -44,9 +44,27 @@
QT_BEGIN_NAMESPACE
+bool QNearFieldTargetPrivate::keepConnection() const
+{
+ NEARFIELDTARGET_Q();
+ return q->keepConnection();
+}
+
+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
+{
+ NEARFIELDTARGET_Q();
+ return q->setKeepConnection(isPersistent);
+}
+
+bool QNearFieldTargetPrivate::disconnect()
+{
+ NEARFIELDTARGET_Q();
+ return q->disconnect();
+}
+
int QNearFieldTargetPrivate::maxCommandLength() const
{
- NearFieldTarget * const q = reinterpret_cast<NearFieldTarget *>(q_ptr);
+ NEARFIELDTARGET_Q();
return q->maxCommandLength();
}
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
index f2e2ee7f..0063e9a5 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android_p.h
@@ -75,6 +75,9 @@ public:
virtual QByteArray uid() const;
virtual Type type() const;
virtual AccessMethods accessMethods() const;
+ bool keepConnection() const;
+ bool setKeepConnection(bool isPersistent);
+ bool disconnect();
virtual bool hasNdefMessage();
virtual RequestId readNdefMessages();
int maxCommandLength() const;
@@ -99,6 +102,8 @@ protected:
void setupTargetCheckTimer();
void handleTargetLost();
QAndroidJniObject getTagTechnology(const QString &tech) const;
+ bool setTagTechnology(const QStringList &techList);
+ bool connect();
QByteArray jbyteArrayToQByteArray(const jbyteArray &byteArray) const;
bool catchJavaExceptions(bool verbose = true) const;
@@ -108,6 +113,9 @@ protected:
QStringList m_techList;
Type m_type;
QTimer *m_targetCheckTimer;
+ QString m_tech;
+ QAndroidJniObject m_tagTech;
+ bool m_keepConnection;
};
QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
index 3d1bfa6c..411b80d5 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.cpp
@@ -44,6 +44,21 @@
QT_BEGIN_NAMESPACE
+bool QNearFieldTargetPrivate::keepConnection() const
+{
+ return false;
+}
+
+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
+{
+ return false;
+}
+
+bool QNearFieldTargetPrivate::disconnect()
+{
+ return false;
+}
+
int QNearFieldTargetPrivate::maxCommandLength() const
{
return 0;
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
index 3d1bfa6c..4ed17a15 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.cpp
@@ -44,6 +44,22 @@
QT_BEGIN_NAMESPACE
+bool QNearFieldTargetPrivate::keepConnection() const
+{
+ return false;
+}
+
+bool QNearFieldTargetPrivate::setKeepConnection(bool isPersistent)
+{
+ Q_UNUSED(isPersistent);
+ return false;
+}
+
+bool QNearFieldTargetPrivate::disconnect()
+{
+ return false;
+}
+
int QNearFieldTargetPrivate::maxCommandLength() const
{
return 0;
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
index 9b2ed480..9cef2f55 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_p.h
@@ -59,6 +59,8 @@
#include <QtCore/QSharedData>
#include <QtCore/QVariant>
+#define NEARFIELDTARGET_Q() NearFieldTarget * const q = reinterpret_cast<NearFieldTarget *>(q_ptr)
+
QT_BEGIN_NAMESPACE
class QNearFieldTarget::RequestIdPrivate : public QSharedData
@@ -75,6 +77,9 @@ public:
QMap<QNearFieldTarget::RequestId, QVariant> m_decodedResponses;
+ bool keepConnection() const;
+ bool setKeepConnection(bool isPersistent);
+ bool disconnect();
int maxCommandLength() const;
};
--
2.11.0

View File

@ -1,45 +0,0 @@
From 0d2e326699d2646e38d60036659a7ff3e0b7b8d0 Mon Sep 17 00:00:00 2001
From: Simon Hausmann <simon.hausmann@theqtcompany.com>
Date: Fri, 13 May 2016 14:24:59 +0200
Subject: [PATCH] Re-apply the cast part of commit
392c7b99348e2a96ef11adb5712095fbd13fb780
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
We reverted this in 6f59c91c51edd7207635c3fa2f0b2b1179e7aa6e to avoid further
breakage in a patch release. Now let's do the right thing in the next minor
release and replace the qobject_cast on the instance with the IID check that
won't require instantiating the plugin in the qml loader thread.
[ChangeLog][QtQml][Important Behavior Changes] When the engine looks for QML
modules / extension plugins in statically linked applications, the plugins are
not instantiated in the qml loader thread anymore. For this to work however
it is necessary for plugins to use Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
in their class declaration instead of hardcoding the interface id as a string
literal.
Task-number: QTBUG-52012
Change-Id: I45fe8b9fec23b3d0408b7ee79ce297c7d47ce36d
Reviewed-by: Sebastian Lösch <Sebastian.Loesch@governikus.com>
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
---
src/qml/qml/qqmlimport.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git x/qtdeclarative/src/qml/qml/qqmlimport.cpp y/qtdeclarative/src/qml/qml/qqmlimport.cpp
index b51c78b..32faf76 100644
--- x/qtdeclarative/src/qml/qml/qqmlimport.cpp
+++ y/qtdeclarative/src/qml/qml/qqmlimport.cpp
@@ -913,7 +913,7 @@ bool QQmlImportsPrivate::populatePluginPairVector(QVector<StaticPluginPair> &res
// To avoid traversing all static plugins for all imports, we cut down
// the list the first time called to only contain QML plugins:
foreach (const QStaticPlugin &plugin, QPluginLoader::staticPlugins()) {
- if (qobject_cast<QQmlExtensionPlugin *>(plugin.instance()))
+ if (plugin.metaData().value(QStringLiteral("IID")).toString() == QLatin1String(QQmlExtensionInterface_iid))
plugins.append(plugin);
}
}
--
2.8.3

View File

@ -0,0 +1,176 @@
From 797de4af8231945e1b3688b14719900d9fd0f09e Mon Sep 17 00:00:00 2001
From: BogDan Vatra <bogdan@kdab.com>
Date: Tue, 1 Nov 2016 17:53:29 +0200
Subject: [PATCH] Use apksigner by default if available to sign the APKs
apksigner is smart enough to know which techique to use to sign the apk
based on apk's manifest file.
People that really want to use jarsigner they need to pass --jarsigner
argument
Task-number: QTBUG-56702
Change-Id: I3acd26576c5b0b312d5f2424b1c0a52e48fb920e
---
src/androiddeployqt/main.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 109 insertions(+), 1 deletion(-)
diff --git x/qttools/src/androiddeployqt/main.cpp y/qttools/src/androiddeployqt/main.cpp
index c1fd130..fc1cb94 100644
--- x/qttools/src/androiddeployqt/main.cpp
+++ y/qttools/src/androiddeployqt/main.cpp
@@ -102,6 +102,7 @@ struct Options
, internalSf(false)
, sectionsOnly(false)
, protectedAuthenticationPath(false)
+ , jarSigner(false)
, gdbServer(Auto)
, installApk(false)
, uninstallApk(false)
@@ -181,6 +182,7 @@ struct Options
bool internalSf;
bool sectionsOnly;
bool protectedAuthenticationPath;
+ bool jarSigner;
// Gdbserver
TriState gdbServer;
@@ -446,6 +448,8 @@ Options parseOptions()
options.sectionsOnly = true;
} else if (argument.compare(QLatin1String("--protected"), Qt::CaseInsensitive) == 0) {
options.protectedAuthenticationPath = true;
+ } else if (argument.compare(QLatin1String("--jarsigner"), Qt::CaseInsensitive) == 0) {
+ options.jarSigner = true;
} else if (argument.compare(QLatin1String("--no-generated-assets-cache"), Qt::CaseInsensitive) == 0) {
options.generateAssetsFileList = false;
}
@@ -519,6 +523,8 @@ void printHelp()
" --internalsf: Include the .SF file inside the signature block.\n"
" --sectionsonly: Don't compute hash of entire manifest.\n"
" --protected: Keystore has protected authentication path.\n"
+ " --jarsigner: Force jarsigner usage, otherwise apksigner will be\n"
+ " used if available.\n"
" --gdbserver: Adds the gdbserver to the package. By default the gdbserver\n"
" is bundled for debug pacakges.\n"
" --no-gdbserver: Prevents the gdbserver from being added to the package\n"
@@ -2554,7 +2560,7 @@ bool copyGnuStl(Options *options)
return true;
}
-bool signPackage(const Options &options)
+bool jarSignerSignPackage(const Options &options)
{
if (options.verbose)
fprintf(stdout, "Signing Android package.\n");
@@ -2680,6 +2686,108 @@ bool signPackage(const Options &options)
return QFile::remove(apkPath(options, UnsignedAPK));
}
+bool signPackage(const Options &options)
+{
+ QString apksignerTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/apksigner");
+#if defined(Q_OS_WIN32)
+ apksignerTool += QLatin1String(".bat");
+#endif
+
+ if (options.jarSigner || !QFile::exists(apksignerTool))
+ return jarSignerSignPackage(options);
+
+ // APKs signed with apksigner must not be changed after they're signed, therefore we need to zipalign it before we sign it.
+
+ QString zipAlignTool = options.sdkPath + QLatin1String("/tools/zipalign");
+#if defined(Q_OS_WIN32)
+ zipAlignTool += QLatin1String(".exe");
+#endif
+
+ if (!QFile::exists(zipAlignTool)) {
+ zipAlignTool = options.sdkPath + QLatin1String("/build-tools/") + options.sdkBuildToolsVersion + QLatin1String("/zipalign");
+#if defined(Q_OS_WIN32)
+ zipAlignTool += QLatin1String(".exe");
+#endif
+ if (!QFile::exists(zipAlignTool)) {
+ fprintf(stderr, "zipalign tool not found: %s\n", qPrintable(zipAlignTool));
+ return false;
+ }
+ }
+
+ zipAlignTool = QString::fromLatin1("%1%2 -f 4 %3 %4")
+ .arg(shellQuote(zipAlignTool))
+ .arg(options.verbose ? QString::fromLatin1(" -v") : QString())
+ .arg(apkPath(options, UnsignedAPK))
+ .arg(apkPath(options, SignedAPK));
+
+ FILE *zipAlignCommand = openProcess(zipAlignTool);
+ if (zipAlignCommand == 0) {
+ fprintf(stderr, "Couldn't run zipalign.\n");
+ return false;
+ }
+
+ char buffer[512];
+ while (fgets(buffer, sizeof(buffer), zipAlignCommand) != 0)
+ fprintf(stdout, "%s", buffer);
+
+ int errorCode = pclose(zipAlignCommand);
+ if (errorCode != 0) {
+ fprintf(stderr, "zipalign command failed.\n");
+ if (!options.verbose)
+ fprintf(stderr, " -- Run with --verbose for more information.\n");
+ return false;
+ }
+
+ QString apkSignerCommandLine = QString::fromLatin1("%1 sign --ks %2")
+ .arg(shellQuote(apksignerTool)).arg(shellQuote(options.keyStore));
+
+ if (!options.keyStorePassword.isEmpty())
+ apkSignerCommandLine += QString::fromLatin1(" --ks-pass pass:%1").arg(shellQuote(options.keyStorePassword));
+
+ if (!options.keyStoreAlias.isEmpty())
+ apkSignerCommandLine += QString::fromLatin1(" --ks-key-alias %1").arg(shellQuote(options.keyStoreAlias));
+
+ if (!options.keyPass.isEmpty())
+ apkSignerCommandLine += QString::fromLatin1(" --key-pass pass:%1").arg(shellQuote(options.keyPass));
+
+ if (options.verbose)
+ apkSignerCommandLine += QLatin1String(" --verbose");
+
+ apkSignerCommandLine += QString::fromLatin1(" %1")
+ .arg(apkPath(options, SignedAPK));
+
+ auto apkSignerRunner = [&] {
+ FILE *apkSignerCommand = openProcess(apkSignerCommandLine);
+ if (apkSignerCommand == 0) {
+ fprintf(stderr, "Couldn't run apksigner.\n");
+ return false;
+ }
+
+ char buffer[512];
+ while (fgets(buffer, sizeof(buffer), apkSignerCommand) != 0)
+ fprintf(stdout, "%s", buffer);
+
+ errorCode = pclose(apkSignerCommand);
+ if (errorCode != 0) {
+ fprintf(stderr, "apksigner command failed.\n");
+ if (!options.verbose)
+ fprintf(stderr, " -- Run with --verbose for more information.\n");
+ return false;
+ }
+ return true;
+ };
+
+ // Sign the package
+ if (!apkSignerRunner())
+ return false;
+
+ apkSignerCommandLine = QString::fromLatin1("%1 verify --verbose %2")
+ .arg(shellQuote(apksignerTool)).arg(apkPath(options, SignedAPK));
+
+ // Verify the package and remove the unsigned apk
+ return apkSignerRunner() && QFile::remove(apkPath(options, UnsignedAPK));
+}
+
bool copyGdbServer(const Options &options)
{
if (options.verbose)
--
2.10.2

View File

@ -0,0 +1,379 @@
From eba0d9bdf34f60f2c36f8cef6c412cbed210fa2f Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Fri, 2 Dec 2016 08:05:46 +0100
Subject: Use defaultSize according to svg standard in svg plugin
The viewBox attribute defines the svg internal coordinate system. If no
width/height is set, the viewBox size is the right choice for defaultSize.
Otherwise the standard prescribes that the specified height/width must be
used.
The old behavior ignored the width and height attributes, and this caused a
lot of problems in qml. If the viewBox was very small the result was a low
resolution image. If the viewBox was very large, loading took ages and the
result used much more memory than needed. Both situations could be avoided
by setting sourceSize. But when using the same image several times, the
sourceSize must be set every time to the same value, otherwise the image
cache would not work. It is cheaper to have the same high-quality source
image in the cache, and scale it down when required.
With the new behavior it is possible to control the default image size
directly in the svg file at one place while it is still possible to set
different sourceSizes if needed.
Task-number: QTBUG-44863
Change-Id: I9c2fc7c122a29ebcf288b7cbd12427e081d404d5
---
src/plugins/imageformats/svg/qsvgiohandler.cpp | 2 +-
tests/auto/auto.pro | 1 +
tests/auto/qsvgplugin/.gitignore | 1 +
tests/auto/qsvgplugin/qsvgplugin.pro | 8 ++
tests/auto/qsvgplugin/resources.qrc | 16 ++++
tests/auto/qsvgplugin/square.svg | 5 ++
tests/auto/qsvgplugin/square_size.svg | 5 ++
tests/auto/qsvgplugin/square_size_viewbox.svg | 5 ++
tests/auto/qsvgplugin/square_viewbox.svg | 5 ++
tests/auto/qsvgplugin/tall.svg | 5 ++
tests/auto/qsvgplugin/tall_size.svg | 5 ++
tests/auto/qsvgplugin/tall_size_viewbox.svg | 5 ++
tests/auto/qsvgplugin/tall_viewbox.svg | 5 ++
tests/auto/qsvgplugin/tst_qsvgplugin.cpp | 108 +++++++++++++++++++++++++
tests/auto/qsvgplugin/wide.svg | 5 ++
tests/auto/qsvgplugin/wide_size.svg | 5 ++
tests/auto/qsvgplugin/wide_size_viewbox.svg | 5 ++
tests/auto/qsvgplugin/wide_viewbox.svg | 5 ++
18 files changed, 195 insertions(+), 1 deletion(-)
create mode 100644 tests/auto/qsvgplugin/.gitignore
create mode 100644 tests/auto/qsvgplugin/qsvgplugin.pro
create mode 100644 tests/auto/qsvgplugin/resources.qrc
create mode 100644 tests/auto/qsvgplugin/square.svg
create mode 100644 tests/auto/qsvgplugin/square_size.svg
create mode 100644 tests/auto/qsvgplugin/square_size_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/square_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/tall.svg
create mode 100644 tests/auto/qsvgplugin/tall_size.svg
create mode 100644 tests/auto/qsvgplugin/tall_size_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/tall_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/tst_qsvgplugin.cpp
create mode 100644 tests/auto/qsvgplugin/wide.svg
create mode 100644 tests/auto/qsvgplugin/wide_size.svg
create mode 100644 tests/auto/qsvgplugin/wide_size_viewbox.svg
create mode 100644 tests/auto/qsvgplugin/wide_viewbox.svg
diff --git x/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp y/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
index 88d37bc..0c26cb5 100644
--- x/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
+++ y/qtsvg/src/plugins/imageformats/svg/qsvgiohandler.cpp
@@ -98,7 +98,7 @@ bool QSvgIOHandlerPrivate::load(QIODevice *device)
}
if (res) {
- defaultSize = QSize(r.viewBox().width(), r.viewBox().height());
+ defaultSize = r.defaultSize();
loaded = true;
}
diff --git x/qtsvg/tests/auto/auto.pro y/qtsvg/tests/auto/auto.pro
index 43ff500..e2d84ec 100644
--- x/qtsvg/tests/auto/auto.pro
+++ y/qtsvg/tests/auto/auto.pro
@@ -4,6 +4,7 @@ qtHaveModule(widgets) {
qsvgdevice \
qsvggenerator \
qsvgrenderer \
+ qsvgplugin \
qicon_svg \
cmake \
installed_cmake
diff --git x/qtsvg/tests/auto/qsvgplugin/.gitignore y/qtsvg/tests/auto/qsvgplugin/.gitignore
new file mode 100644
index 0000000..c41c448
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/.gitignore
@@ -0,0 +1 @@
+tst_qsvgplugin
diff --git x/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro y/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro
new file mode 100644
index 0000000..3fec52e
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/qsvgplugin.pro
@@ -0,0 +1,8 @@
+TARGET = tst_qsvgplugin
+CONFIG += testcase
+QT += svg testlib widgets gui-private
+
+SOURCES += tst_qsvgplugin.cpp
+RESOURCES += resources.qrc
+
+DEFINES += SRCDIR=\\\"$$PWD/\\\"
diff --git x/qtsvg/tests/auto/qsvgplugin/resources.qrc y/qtsvg/tests/auto/qsvgplugin/resources.qrc
new file mode 100644
index 0000000..fcb311a
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/resources.qrc
@@ -0,0 +1,16 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>square.svg</file>
+ <file>square_size.svg</file>
+ <file>square_size_viewbox.svg</file>
+ <file>square_viewbox.svg</file>
+ <file>tall.svg</file>
+ <file>tall_size.svg</file>
+ <file>tall_size_viewbox.svg</file>
+ <file>tall_viewbox.svg</file>
+ <file>wide.svg</file>
+ <file>wide_size.svg</file>
+ <file>wide_size_viewbox.svg</file>
+ <file>wide_viewbox.svg</file>
+</qresource>
+</RCC>
diff --git x/qtsvg/tests/auto/qsvgplugin/square.svg y/qtsvg/tests/auto/qsvgplugin/square.svg
new file mode 100644
index 0000000..f35fb87
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/square_size.svg y/qtsvg/tests/auto/qsvgplugin/square_size.svg
new file mode 100644
index 0000000..f4aeb67
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square_size.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="200px">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg
new file mode 100644
index 0000000..cf39bd7
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square_size_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="200px" viewBox="0 0 100 100">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg
new file mode 100644
index 0000000..5811505
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/square_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+ <circle cx="50" cy="50" r="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall.svg y/qtsvg/tests/auto/qsvgplugin/tall.svg
new file mode 100644
index 0000000..b243b62
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall_size.svg y/qtsvg/tests/auto/qsvgplugin/tall_size.svg
new file mode 100644
index 0000000..6121451
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall_size.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="100px" height="200px">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg
new file mode 100644
index 0000000..9d82492
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall_size_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="100px" height="200px" viewBox="0 0 50 100">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg
new file mode 100644
index 0000000..8ed61a9
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tall_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 100">
+ <ellipse cx="25" cy="50" rx="12.5" ry="25" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp y/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp
new file mode 100644
index 0000000..4ec1737
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/tst_qsvgplugin.cpp
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+
+#include "../../../src/plugins/imageformats/svg/qsvgiohandler.cpp"
+#include <QImage>
+#include <QStringList>
+#include <QVector>
+
+#ifndef SRCDIR
+#define SRCDIR
+#endif
+
+
+class tst_QSvgPlugin : public QObject
+{
+Q_OBJECT
+
+public:
+ tst_QSvgPlugin();
+ virtual ~tst_QSvgPlugin();
+
+private slots:
+ void checkSize_data();
+ void checkSize();
+};
+
+
+
+tst_QSvgPlugin::tst_QSvgPlugin()
+{
+}
+
+tst_QSvgPlugin::~tst_QSvgPlugin()
+{
+}
+
+void tst_QSvgPlugin::checkSize_data()
+{
+ QTest::addColumn<QString>("filename");
+ QTest::addColumn<int>("imageHeight");
+ QTest::addColumn<int>("imageWidth");
+
+ QTest::newRow("square") << SRCDIR "square.svg" << 50 << 50;
+ QTest::newRow("square_size") << SRCDIR "square_size.svg" << 200 << 200;
+ QTest::newRow("square_size_viewbox") << SRCDIR "square_size_viewbox.svg" << 200 << 200;
+ QTest::newRow("square_viewbox") << SRCDIR "square_viewbox.svg" << 100 << 100;
+ QTest::newRow("tall") << SRCDIR "tall.svg" << 50 << 25;
+ QTest::newRow("tall_size") << SRCDIR "tall_size.svg" << 200 << 100;
+ QTest::newRow("tall_size_viewbox") << SRCDIR "tall_size_viewbox.svg" << 200 << 100;
+ QTest::newRow("tall_viewbox") << SRCDIR "tall_viewbox.svg" << 100 << 50;
+ QTest::newRow("wide") << SRCDIR "wide.svg" << 25 << 50;
+ QTest::newRow("wide_size") << SRCDIR "wide_size.svg" << 100 << 200;
+ QTest::newRow("wide_size_viewbox") << SRCDIR "wide_size_viewbox.svg" << 100 << 200;
+ QTest::newRow("wide_viewbox") << SRCDIR "wide_viewbox.svg" << 50 << 100;
+}
+
+void tst_QSvgPlugin::checkSize()
+{
+ QFETCH(QString, filename);
+ QFETCH(int, imageHeight);
+ QFETCH(int, imageWidth);
+
+ QFile file(filename);
+ file.open(QIODevice::ReadOnly);
+
+ QSvgIOHandler plugin;
+ plugin.setDevice(&file);
+
+ QImage image;
+ plugin.read(&image);
+
+ file.close();
+
+ QCOMPARE(imageHeight, image.height());
+ QCOMPARE(imageWidth, image.width());
+}
+
+
+QTEST_MAIN(tst_QSvgPlugin)
+#include "tst_qsvgplugin.moc"
diff --git x/qtsvg/tests/auto/qsvgplugin/wide.svg y/qtsvg/tests/auto/qsvgplugin/wide.svg
new file mode 100644
index 0000000..9166606
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/wide_size.svg y/qtsvg/tests/auto/qsvgplugin/wide_size.svg
new file mode 100644
index 0000000..e816154
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide_size.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="100px">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg
new file mode 100644
index 0000000..3d9b044
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide_size_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="200px" height="100px" viewBox="0 0 100 50">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
diff --git x/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg y/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg
new file mode 100644
index 0000000..aface45
--- /dev/null
+++ y/qtsvg/tests/auto/qsvgplugin/wide_viewbox.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 50">
+ <ellipse cx="50" cy="25" rx="25" ry="12.5" fill="#00ff00" />
+</svg>
--
2.11.0

View File

@ -1,26 +0,0 @@
From 792487510efc7a1fb34366804c431aee6e1219c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Tue, 22 Dec 2015 18:43:02 +0100
Subject: [PATCH] Disable qtpluginfo as it breaks install step on Android
---
src/src.pro | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git x/qttools/src/src.pro y/qttools/src/src.pro
index 387d54f..3151495 100644
--- x/qttools/src/src.pro
+++ y/qttools/src/src.pro
@@ -14,8 +14,7 @@ qtHaveModule(widgets) {
}
SUBDIRS += linguist \
- qdoc \
- qtplugininfo
+ qdoc
if(!android|android_app):!ios: SUBDIRS += qtpaths
mac {
--
2.6.4

View File

@ -3,13 +3,15 @@ SET(QRC_FILES "ausweisapp.qrc")
IF(IOS OR ANDROID OR ${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
LIST(APPEND QRC_FILES "ausweisapp_mobile.qrc")
ENDIF()
IF(LINUX OR WIN32 OR MAC)
IF(DESKTOP)
LIST(APPEND QRC_FILES "ausweisapp_desktop.qrc")
ENDIF()
SET(RCC ${CMAKE_BINARY_DIR}/src/${PROJECT_NAME}.rcc)
SET(RCC ${RCC} PARENT_SCOPE)
qt5_add_binary_resources(AusweisAppRcc "${QRC_FILES}" DESTINATION ${RCC})
SET(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qml ${CMAKE_CURRENT_SOURCE_DIR}/qml_stationary CACHE string "qml files" FORCE)
IF(WIN32)
SET(WINDOWS_RC "${CMAKE_CURRENT_SOURCE_DIR}/windows.rc" PARENT_SCOPE)

View File

@ -0,0 +1,7 @@
# Recommended usage:
# LSAN_OPTIONS=suppressions=/home/dev/src/asan_blacklist ./AusweisApp2
leak:g_malloc*
leak:CRYPTO_malloc
leak:libxcb*
leak:Q*

View File

@ -1,15 +1,6 @@
<RCC>
<qresource prefix="/">
<file>images/beta.svg</file>
<file>images/siteWithLogo.png</file>
<file>images/MenuSelected.png</file>
<file>images/MenuUnselected.png</file>
<file>images/MenuUnselectedDisabled.png</file>
<file>images/information.png</file>
<file>images/npa.ico</file>
<file>images/Logo_AutentApp2_2014.png</file>
<file>images/AppLogo_AutentApp2_2014.png</file>
<file>images/start_nPA_eAT.png</file>
<file>images/npa.svg</file>
<file>images/bg_da.png</file>
<file>images/bt_1.svg</file>
<file>images/bt_1b.svg</file>
@ -21,26 +12,14 @@
<file>images/bt_4b.svg</file>
<file>images/bspd1.svg</file>
<file>images/canHint.png</file>
<file>images/busy_animation.gif</file>
<file>images/icon_attention.svg</file>
<file>images/icon_ok.png</file>
<file>images/icon_cancelled.png</file>
<file>images/Icon_Checked.svg</file>
<file>images/autentapp2.iconset/icon_16x16.png</file>
<file>images/autentapp2.iconset/icon_32x32.png</file>
<file>images/autentapp2.iconset/icon_512x512.png</file>
<file>images/reader/default_no_cardreader_01.png</file>
<file>images/reader/default_more_cardreader.png</file>
<file>images/reader/default_no_card_found.png</file>
<file>images/reader/img_cyberjack_wave.png</file>
<file>images/reader/img_cyberjack_wave_mit_ausweis.png</file>
<file>stylesheets/common.qss</file>
<file>stylesheets/macos.qss</file>
<file>stylesheets/windows.qss</file>
<file>stylesheets/desktop.qss</file>
<file>images/magnifying-glass.png</file>
<file>images/text-edit-x.png</file>
<file>images/android/search_icon.svg</file>
<file>images/android/search_cancel.svg</file>
<file>images/iOS/search_icon.svg</file>
<file>images/iOS/search_cancel.svg</file>
<file>images/back-chevron.png</file>
<file>images/iOS/tabBar/Anbieter-off.png</file>
<file>images/iOS/tabBar/Anbieter-on.png</file>
@ -50,29 +29,56 @@
<file>images/iOS/tabBar/Pin-on.png</file>
<file>images/iOS/tabBar/Verlauf-off.png</file>
<file>images/iOS/tabBar/Verlauf-on.png</file>
<file>images/iOS/gruener_Haken.svg</file>
<file>images/icon_Bluetooth.svg</file>
<file>images/icon_Pin.svg</file>
<file>images/All.png</file>
<file>images/iOS/tabBar/More-off.svg</file>
<file>images/iOS/tabBar/More-on.svg</file>
<file>images/iOS/rotes_X.svg</file>
<file>images/iOS/ProviderInformation.png</file>
<file>images/iOS/ProviderPurpose.png</file>
<file>images/rotes_X.svg</file>
<file>images/gruener_Haken.svg</file>
<file>images/iOS/CheckedCheckbox.png</file>
<file>images/iOS/Header-Ausweisapp@3x.png</file>
<file>images/delete.png</file>
<file>images/delete.svg</file>
<file>images/NFCPhoneCard.png</file>
<file>images/submit.png</file>
<file>images/androidtelefon.png</file>
<file>images/submit.svg</file>
<file>images/ausweis.png</file>
<file>images/provider/information.svg</file>
<file>images/provider/purpose.svg</file>
<file>images/provider/adresse.png</file>
<file>images/provider/+tablet/adresse.png</file>
<file>images/provider/mail.png</file>
<file>images/provider/+tablet/mail.png</file>
<file>images/provider/telefon.png</file>
<file>images/provider/+tablet/telefon.png</file>
<file>images/provider/url.png</file>
<file>images/provider/+tablet/url.png</file>
<file>images/provider/gradient-citizen.png</file>
<file>images/provider/gradient-insurance.png</file>
<file>images/provider/gradient-finance.png</file>
<file>images/provider/gradient-other.png</file>
<file>images/provider/categoryIcons/+android/General.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices.svg</file>
<file>images/provider/categoryIcons/+android/Financials.svg</file>
<file>images/provider/categoryIcons/+android/Insurances.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices.svg</file>
<file>images/provider/categoryIcons/+android/General_bg.svg</file>
<file>images/provider/categoryIcons/+android/General_button.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices_bg.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices_button.svg</file>
<file>images/provider/categoryIcons/+android/Financials_bg.svg</file>
<file>images/provider/categoryIcons/+android/Financials_button.svg</file>
<file>images/provider/categoryIcons/+android/Insurances_bg.svg</file>
<file>images/provider/categoryIcons/+android/Insurances_button.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices_bg.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices_button.svg</file>
<file>images/provider/categoryIcons/+android/General_section.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices_section.svg</file>
<file>images/provider/categoryIcons/+android/Financials_section.svg</file>
<file>images/provider/categoryIcons/+android/Insurances_section.svg</file>
<file>images/provider/categoryIcons/+android/OtherServices_section.svg</file>
<file>images/icon_nfc.svg</file>
<file>images/phone_nfc.svg</file>
<file>images/phone_bluetooth.svg</file>
</qresource>
</RCC>

View File

@ -2,6 +2,22 @@
<qresource prefix="/">
<file>html_templates/alreadyactive.html</file>
<file>html_templates/error.html</file>
<file>stylesheets/common.qss</file>
<file>stylesheets/macos.qss</file>
<file>stylesheets/windows.qss</file>
<file>stylesheets/desktop.qss</file>
<file>images/beta.svg</file>
<file>images/MenuSelected.png</file>
<file>images/MenuUnselected.png</file>
<file>images/MenuUnselectedDisabled.png</file>
<file>images/npa.ico</file>
<file>images/siteWithLogo.png</file>
<file>images/Logo_AutentApp2_2014.png</file>
<file>images/AppLogo_AutentApp2_2014.png</file>
<file>images/start_nPA_eAT.png</file>
<file>images/busy_animation.gif</file>
<file>images/html_message_section.jpg</file>
<file>images/randompin/btn_normal_0.png</file>
<file>images/randompin/btn_normal_1.png</file>
@ -17,7 +33,12 @@
<file>images/randompin/btn_ok.png</file>
<file>images/randompin/btn_cancel.png</file>
<file>images/randompin/btn_clear.png</file>
<file>images/reader/default_no_cardreader_01.png</file>
<file>images/reader/default_more_cardreader.png</file>
<file>images/reader/default_no_card_found.png</file>
<file>images/reader/img_cyberjack_wave.png</file>
<file>images/reader/img_cyberjack_wave_mit_ausweis.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_komfort.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_komfort_mit_ausweis.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_standard.png</file>
@ -25,14 +46,14 @@
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_basis.png</file>
<file>images/reader/img_Reiner_SCT_cyberjack_RFID_basis_mit_ausweis.png</file>
<file>images/reader/img_Identive_SCL011.png</file>
<file>images/reader/img_Identive_SCL011_mit_ausweis.png</file>
<file>images/reader/img_Identive_SCL011_mit_ausweis.png</file>
<file>images/reader/img_Identive_SDI011.png</file>
<file>images/reader/img_Identive_SDI011_mit_ausweis.png</file>
<file>images/reader/img_KOBIL_ID_Token.png</file>
<file>images/reader/img_KOBIL_ID_Token_mit_ausweis.png</file>
<file>images/reader/img_ACS_ACR1281U.png</file>
<file>images/reader/img_ACS_ACR1281U_mit_ausweis.png</file>
<file>images/reader/img_ACS_ACR1281U_mit_ausweis.png</file>
<file>images/reader/img_HID_Global_OMNIKEY_5321_V2.png</file>
<file>images/reader/img_HID_Global_OMNIKEY_5321_V2_mit_ausweis.png</file>
<file>images/reader/img_HID_Omnikey_Mobile_Reader_4121_CL.png</file>

View File

@ -1,31 +1,30 @@
<RCC>
<qresource prefix="/">
<file>images/mobile/appStartPageBackground.jpg</file>
<file>qtquickcontrols2.conf</file>
<file>images/zahnraeder.svg</file>
<file>images/check.svg</file>
<file>images/iOS/arrowLeft.svg</file>
<file>images/iOS/arrowRight.svg</file>
<file>images/iOS/check.svg</file>
<file>images/iOS/list_item_arrow.svg</file>
<file>images/iOS/radio_button_check_ios.svg</file>
<file>images/iOS/toggle_on.png</file>
<file>images/iOS/toggle_off.png</file>
<file>images/iOS/toggle_disabled.png</file>
<file>images/android/navigation/ausweisen.png</file>
<file>images/android/navigation/anbieter.png</file>
<file>images/android/navigation/verlauf.png</file>
<file>images/android/navigation/pin.png</file>
<file>images/android/navigation/versionsinformation.png</file>
<file>images/android/navigation/faq.png</file>
<file>images/android/navigation/support.png</file>
<file>images/android/navigation/bewerten.png</file>
<file>images/android/navigation/teilen.png</file>
<file>images/android/navigation/ausweisen.svg</file>
<file>images/android/navigation/anbieter.svg</file>
<file>images/android/navigation/balloon.svg</file>
<file>images/android/navigation/verlauf.svg</file>
<file>images/android/navigation/pin.svg</file>
<file>images/android/navigation/versionsinformation.svg</file>
<file>images/android/navigation/faq.svg</file>
<file>images/android/navigation/support.svg</file>
<file>images/android/navigation/bewerten.svg</file>
<file>images/android/navigation/teilen.svg</file>
<file>images/android/mdpi/haken.png</file>
<file>images/android/hdpi/haken.png</file>
<file>images/android/xhdpi/haken.png</file>
<file>images/android/xxhdpi/haken.png</file>
<file>images/android/xxxhdpi/haken.png</file>
<file>images/android/checkbox_0.svg</file>
<file>images/android/checkbox_1.svg</file>
<file>images/android/tabDivider.svg</file>
@ -39,45 +38,24 @@
<file>images/android/android_toggle_off_disabled.png</file>
<file>images/android/android_arrow_back.svg</file>
<file>images/android/android_arrow_back_white.svg</file>
<file>images/android/android_search_icon.svg</file>
<file>images/more/icon_mehr_favorit.svg</file>
<file>images/more/icon_mehr_fragen.svg</file>
<file>images/more/icon_mehr_upload.svg</file>
<file>images/more/icon_mehr_info.svg</file>
<file>images/provider/categoryIcons/+android/CitizenServices.png</file>
<file>images/provider/categoryIcons/+android/Financials.png</file>
<file>images/provider/categoryIcons/+android/Insurances.png</file>
<file>images/provider/categoryIcons/+android/OtherServices.png</file>
<file>images/provider/categoryIcons/+android/CitizenServices_bg.png</file>
<file>images/provider/categoryIcons/+android/Financials_bg.png</file>
<file>images/provider/categoryIcons/+android/Insurances_bg.png</file>
<file>images/provider/categoryIcons/+android/OtherServices_bg.png</file>
<file>images/provider/categoryIcons/+android/CitizenServices_button.png</file>
<file>images/provider/categoryIcons/+android/Financials_button.png</file>
<file>images/provider/categoryIcons/+android/Insurances_button.png</file>
<file>images/provider/categoryIcons/+android/OtherServices_button.png</file>
<file>images/provider/categoryIcons/+android/General_bg.png</file>
<file>images/provider/categoryIcons/CitizenServices.png</file>
<file>images/provider/categoryIcons/Financials.png</file>
<file>images/provider/categoryIcons/Insurances.png</file>
<file>images/provider/categoryIcons/OtherServices.png</file>
<file>images/provider/+tablet/adresse.png</file>
<file>images/provider/+tablet/mail.png</file>
<file>images/provider/+tablet/telefon.png</file>
<file>images/provider/+tablet/url.png</file>
<file alias="images/provider/categoryIcons/CitizenServices_bg.png">images/provider/categoryIcons/+android/CitizenServices_bg.png</file>
<file alias="images/provider/categoryIcons/Financials_bg.png">images/provider/categoryIcons/+android/Financials_bg.png</file>
<file alias="images/provider/categoryIcons/Insurances_bg.png">images/provider/categoryIcons/+android/Insurances_bg.png</file>
<file alias="images/provider/categoryIcons/OtherServices_bg.png">images/provider/categoryIcons/+android/OtherServices_bg.png</file>
<file alias="images/provider/categoryIcons/CitizenServices_button.png">images/provider/categoryIcons/+android/CitizenServices_button.png</file>
<file alias="images/provider/categoryIcons/Financials_button.png">images/provider/categoryIcons/+android/Financials_button.png</file>
<file alias="images/provider/categoryIcons/Insurances_button.png">images/provider/categoryIcons/+android/Insurances_button.png</file>
<file alias="images/provider/categoryIcons/OtherServices_button.png">images/provider/categoryIcons/+android/OtherServices_button.png</file>
<file alias="images/provider/categoryIcons/General_bg.png">images/provider/categoryIcons/+android/General_bg.png</file>
<file>images/provider/categoryIcons/+android/CitizenServices_section.png</file>
<file>images/provider/categoryIcons/+android/Financials_section.png</file>
<file>images/provider/categoryIcons/+android/Insurances_section.png</file>
<file>images/provider/categoryIcons/+android/OtherServices_section.png</file>
<file>images/zahnraeder.svg</file>
<file>images/iOS/more/icon_mehr_favorit.svg</file>
<file>images/iOS/more/icon_mehr_fragen.svg</file>
<file>images/iOS/more/icon_mehr_upload.svg</file>
<file>images/iOS/more/icon_mehr_info.svg</file>
<file>images/provider/categoryIcons/General.svg</file>
<file>images/provider/categoryIcons/CitizenServices.svg</file>
<file>images/provider/categoryIcons/Financials.svg</file>
<file>images/provider/categoryIcons/Insurances.svg</file>
<file>images/provider/categoryIcons/OtherServices.svg</file>
<file alias="images/provider/categoryIcons/General_bg.svg">images/provider/categoryIcons/+android/General_bg.svg</file>
<file alias="images/provider/categoryIcons/General_button.svg">images/provider/categoryIcons/+android/General_button.svg</file>
<file alias="images/provider/categoryIcons/CitizenServices_bg.svg">images/provider/categoryIcons/+android/CitizenServices_bg.svg</file>
<file alias="images/provider/categoryIcons/CitizenServices_button.svg">images/provider/categoryIcons/+android/CitizenServices_button.svg</file>
<file alias="images/provider/categoryIcons/Financials_bg.svg">images/provider/categoryIcons/+android/Financials_bg.svg</file>
<file alias="images/provider/categoryIcons/Financials_button.svg">images/provider/categoryIcons/+android/Financials_button.svg</file>
<file alias="images/provider/categoryIcons/Insurances_bg.svg">images/provider/categoryIcons/+android/Insurances_bg.svg</file>
<file alias="images/provider/categoryIcons/Insurances_button.svg">images/provider/categoryIcons/+android/Insurances_button.svg</file>
<file alias="images/provider/categoryIcons/OtherServices_bg.svg">images/provider/categoryIcons/+android/OtherServices_bg.svg</file>
<file alias="images/provider/categoryIcons/OtherServices_button.svg">images/provider/categoryIcons/+android/OtherServices_button.svg</file>
</qresource>
</RCC>

View File

@ -5,14 +5,12 @@
"_comment_2": [
"certificate 1: DECVCAeID00103_DECVCAeID00104",
"certificate 2: DECVCAeID00102_DECVCAeID00103",
"certificate 3: DECVCAeID00102",
"certificate 7: DECVCAeIDCT00001"
"certificate 3: DECVCAeID00102"
],
"cvRootCertificates": [
"7f218201b67f4e82016e5f290100420e44454356434165494430303130337f4982011d060a04007f000702020202038120a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537782207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9832026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b68441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f0469978520a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7864104241d8627338b64f20077ffd558909a096c635ddb222852038eaae642e869a40173d588f817d95db2a6a0f077ea5ee63596a20f85bc3cb176d2f98d88d90219aa8701015f200e44454356434165494430303130347f4c12060904007f0007030102025305fc0f13ffff5f25060105000901045f24060108000901045f3740313a81ed8734e7a8c45f16b55fb603e63027b7f44c2de3a8e782552d35949db221ca33bd41a01da6a1288c7885714fc3a03fa45683b75d3884930ec6738af8a0",
"7f218201b67f4e82016e5f290100420e44454356434165494430303130327f4982011d060a04007f000702020202038120a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537782207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9832026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b68441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f0469978520a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a78641048925419fc7f194922cfc6b8dd25ae6a19c1b59216e6cf06270e5d75cfd64205f55cf867bbfefeefd6e680e1fd197f18ab684484901362568efc9adb5c6018d728701015f200e44454356434165494430303130337f4c12060904007f0007030102025305fc0f13ffff5f25060102010200035f24060105010200035f37404d6f08a86a4f18409f6685387dd3c6a7ff5d68ea4f7714a861bbb3bb721d05d3014adf1763c9292f715d8e94ee9b3e1b73ab1382414ebf39dfb3b0fb6c09dbeb",
"7F218201B67F4E82016E5F290100420E44454356434165494430303130327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641043347ECF96FFB4BD9B8554EFBCCFC7D0B242F1071E29B4C9C622C79E339D840AF67BEB9B912692265D9C16C62573F4579FFD4DE2DE92BAB409DD5C5D48244A9F78701015F200E44454356434165494430303130327F4C12060904007F0007030102025305FE0F01FFFF5F25060100010001085F24060103010001085F37405067145C68CAE9520F5BB34817F1CA9C43593DB56406C6A3B006CBF3F314E7349ACF0CC6BFEBCBDEFD10B4DCF0F231DA56977D88F9F90182D199076A56506451",
"7f218201ba7f4e8201725f2901004210444543564341654944435430303030317f4982011d060a04007f000702020202038120a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537782207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9832026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b68441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f0469978520a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a78641041f86a5f098c0d277ccece27e4fc35687ca67027563c4301956859b7c60ce65991a412c57d02871e22616ea63578ad2267c4cc82a4e3432901bf33693e436d4528701015f2010444543564341654944435430303030317f4c12060904007f0007030102025305fe1fffffff5f25060103000701065f24060106000701055f37407cbf6936f5557d8331321d34c6f59332115fdb704166dd360f7443b0cbb28a815dd111647e354009f7c2de142306954283a4d8fcd2311898729f095763d556cb"
"7F218201B67F4E82016E5F290100420E44454356434165494430303130337F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104241D8627338B64F20077FFD558909A096C635DDB222852038EAAE642E869A40173D588F817D95DB2A6A0F077EA5EE63596A20F85BC3CB176D2F98D88D90219AA8701015F200E44454356434165494430303130347F4C12060904007F0007030102025305FC0F13FFFF5F25060105000901045F24060108000901045F3740313A81ED8734E7A8C45F16B55FB603E63027B7F44C2DE3A8E782552D35949DB221CA33BD41A01DA6A1288C7885714FC3A03FA45683B75D3884930EC6738AF8A0",
"7F218201B67F4E82016E5F290100420E44454356434165494430303130327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641048925419FC7F194922CFC6B8DD25AE6A19C1B59216E6CF06270E5D75CFD64205F55CF867BBFEFEEFD6E680E1FD197F18AB684484901362568EFC9ADB5C6018D728701015F200E44454356434165494430303130337F4C12060904007F0007030102025305FC0F13FFFF5F25060102010200035F24060105010200035F37404D6F08A86A4F18409F6685387DD3C6A7FF5D68EA4F7714A861BBB3BB721D05D3014ADF1763C9292F715D8E94EE9B3E1B73AB1382414EBF39DFB3B0FB6C09DBEB",
"7F218201B67F4E82016E5F290100420E44454356434165494430303130327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641043347ECF96FFB4BD9B8554EFBCCFC7D0B242F1071E29B4C9C622C79E339D840AF67BEB9B912692265D9C16C62573F4579FFD4DE2DE92BAB409DD5C5D48244A9F78701015F200E44454356434165494430303130327F4C12060904007F0007030102025305FE0F01FFFF5F25060100010001085F24060103010001085F37405067145C68CAE9520F5BB34817F1CA9C43593DB56406C6A3B006CBF3F314E7349ACF0CC6BFEBCBDEFD10B4DCF0F231DA56977D88F9F90182D199076A56506451"
],
"_comment_3": "array of Test-CVCs; hex encoded",
@ -20,13 +18,19 @@
"certificate 4: DETESTeID00001",
"certificate 5: DETESTeID00002_DETESTeID00001",
"certificate 6: DETESTeID00004_DETESTeID00002",
"certificate 8: DETESTeID00005_DETESTeID00004"
"certificate 7: DETESTeID00005_DETESTeID00004",
"certificate 8: DECVCAeIDCTL0401_DECVCAeIDCTL0402",
"certificate 9: DECVCAeIDCT00001_DECVCAeIDCTL0401",
"certificate 10: DECVCAeIDCT00001_DECVCAeIDCT00001"
],
"cvRootCertificatesTest": [
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104184BB519FC2A8F52DC0DC73112FACFE914F2A49B678DD5799A2B1DFE95E1A66359014E22FA8D66438413CEBA6CF0E215576B673376BF617AF4DFE9761D2290148701015F200E44455445535465494430303030317F4C12060904007F0007030102025305FE0F01FFFF5F25060100000801035F24060103000801035F37409F25EBFAF4B91E4C60A1683754C5DC076A3179753EF97D9F8CB01FE1DCD3B8C83E7A26602AB1F344BE5706006D79A9FF6A9716404DC83B9F30E1213B393128A2",
"7f218201b67f4e82016e5f290100420e44455445535465494430303030317f4982011d060a04007f000702020202038120a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537782207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9832026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b68441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f0469978520a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a7864104096eb58bfd86252238ec2652185c43c3a56c320681a21e37a8e69ddc387c0c5f5513856efe2fdc656e604893212e29449b365e304605ac5413e75be31e641f128701015f200e44455445535465494430303030327f4c12060904007f0007030102025305fe0f01ffff5f25060100000902015f24060103000902015f3740141120a0fdfc011a52f3f72b387a3dc7aca88b4868d5ae9741780b6ff8a0b49e5f55169a2d298ef5cf95935dca0c3df3e9d42dc45f74f2066317154961e6c746",
"7f218201b67f4e82016e5f290100420e44455445535465494430303030327f4982011d060a04007f000702020202038120a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537782207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9832026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b68441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f0469978520a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a786410474ff63ab838c73c303ac003dfee95cf8bf55f91e8febcb7395d942036e47cf1845ec786ec95bb453aac288ad023b6067913cf9b63f908f49304e5cfc8b3050dd8701015f200e44455445535465494430303030347f4c12060904007f0007030102025305fc0f13ffff5f25060102000501015f24060105000501015f37405c035a0611b6c58f0b5261fdd009decab7dc7a79482d5248cca119059b7d82b2157cf0c4a499bcf441efdd35e294a58c0af19a34a0762159533285acf170a505",
"7f218201b67f4e82016e5f290100420e44455445535465494430303030347f4982011d060a04007f000702020202038120a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537782207d5a0975fc2c3057eef67530417affe7fb8055c126dc5c6ce94a4b44f330b5d9832026dc5c6ce94a4b44f330b5d9bbd77cbf958416295cf7e1ce6bccdc18ff8c07b68441048bd2aeb9cb7e57cb2c4b482ffc81b7afb9de27e1e3bd23c23a4453bd9ace3262547ef835c3dac4fd97f8461a14611dc9c27745132ded8e545c1d54c72f0469978520a9fb57dba1eea9bc3e660a909d838d718c397aa3b561a6f7901e0e82974856a78641049bfeba8dc7faab6e3bdeb3ff794dbb800848fe4f6940a4cc7eecb5159c87da5395505892026d420a22596cd014ed1fd872dada597db0f8d64441041198f62d448701015f200e44455445535465494430303030357f4c12060904007f0007030102025305fc0f13ffff5f25060105000500045f24060108000500045f37402d2468416d66bcbe259b9b907a73395bc1ef94ed75f9c17615210246e9efb06e6753e9055ce76623b7699b9efb1a7d3a9dd83f6e6e09e55a33ea0a5f62a1c719"
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104096EB58BFD86252238EC2652185C43C3A56C320681A21E37A8E69DDC387C0C5F5513856EFE2FDC656E604893212E29449B365E304605AC5413E75BE31E641F128701015F200E44455445535465494430303030327F4C12060904007F0007030102025305FE0F01FFFF5F25060100000902015F24060103000902015F3740141120A0FDFC011A52F3F72B387A3DC7ACA88B4868D5AE9741780B6FF8A0B49E5F55169A2D298EF5CF95935DCA0C3DF3E9D42DC45F74F2066317154961E6C746",
"7F218201B67F4E82016E5F290100420E44455445535465494430303030327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37405C035A0611B6C58F0B5261FDD009DECAB7DC7A79482D5248CCA119059B7D82B2157CF0C4A499BCF441EFDD35E294A58C0AF19A34A0762159533285ACF170A505",
"7F218201B67F4E82016E5F290100420E44455445535465494430303030347F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641049BFEBA8DC7FAAB6E3BDEB3FF794DBB800848FE4F6940A4CC7EECB5159C87DA5395505892026D420A22596CD014ED1FD872DADA597DB0F8D64441041198F62D448701015F200E44455445535465494430303030357F4C12060904007F0007030102025305FC0F13FFFF5F25060105000500045F24060108000500045F37402D2468416D66BCBE259B9B907A73395BC1EF94ED75F9C17615210246E9EFB06E6753E9055CE76623B7699B9EFB1A7D3A9DD83F6E6E09E55A33EA0A5F62A1C719",
"7F218201BA7F4E8201725F290100421044454356434165494443544C303430317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641043EE15015916563E31459045924DE804C1D93A77652AA25D0B753730DBA3233886A9A9B28A06AF84CC5A40F78E9167CA40B8098724A3A0332283D0A52C5453FE08701015F201044454356434165494443544C303430327F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F374068261CEB4DC915301371C9B273377F33CEB25AFA07E70EDB3498ACF0327DC13B9AF99A9D694A6D048F0DB6FF1774E882CA8F41C8A0B96FDDF6F6DDABFD55CB43",
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641042C037C6CF8C0B62E36E220B7D411404AF248A2C83C569A49FAB02FC232D2395B3A5FF80DDB01D0DFAFCEF55E54ACCBA4C56E528F0746BEF1108E7D9B0122EBA78701015F201044454356434165494443544C303430317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37404FB2F9F17D38656EEC2846CBB1711E07D739E6A584D487B3AFBA5C723C73A10236995E6A19499DE941DFE3CC044E2AACB6B5869C0E46C9585AEF892E2236F62E",
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104206160B85B82B2BE249DCD7B15FD1AD46CA03F39FE675C07535806E57CE24349392BBB9F73B364672F12243F18083DCC49ACA613767F0873AEB60715FC605A288701015F2010444543564341654944435430303030317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37402B62927D46BF675DB387FC4A425FF3B604B20DD5ED6FFCDAFA9DA1DD920DC996245B358167C66A721DF39C6897864E4D648746339A97D22D08659885F92BDE21"
],
"_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded",
@ -36,73 +40,91 @@
"308202eb308201d3a003020102020437a18b8a300d06092a864886f70d01010b05003026310b3009060355040613024445311730150603550403130e6275696c64617574656e74617070301e170d3134303732343131323334325a170d3234303732313131323334325a3026310b3009060355040613024445311730150603550403130e6275696c64617574656e7461707030820122300d06092a864886f70d01010105000382010f003082010a0282010100ca573d1c79c72f15dd80020b39886bec2de9004556eabc833f61b86aac3b4658ed8ecf7f32cb3daeb34576b49ff13e9eaaafa5ce2cf7cb13df2f89be6a1659f79cca6b4276b90914594e74998f9b9fffa0c8efdf4409be91a195458e1a0dce707cb1573cab99d297c80e8026c2f299fd97b8bbf14b172094f17abe50483a2e1df0cf6629d024cf5b752a1bb0edbe172dcce7ed30cc3c193ba742bff2e0afa0f15c414f27bdb374f65ac71c0c7af3a4a5fe1707d22bed1b63019e659c42e763c601f45d60094be915a422a0c183da33e8b3909cf83c0d7dfd3d5ffd1a92cf00c07961b284ddbef1e9b9d5536e12630cefa8493c8244edd2f687b09d38e79f639d0203010001a321301f301d0603551d0e04160414b29d3e7f193789f68d2234738a2773e737c4ce1c300d06092a864886f70d01010b0500038201010030800530f9d3abb215e8c8da5ee62ee083bdd8fce00d673702d00fac194eabd4c0b9338166a6dd76711651e685d0b9a50cdf2dc4872edeb5f4369372fb0d70d8fe02892b962e5fafd73add31ec0fd6708aa6ad2c82beca260773dd3e62460d1e416ac8d931e221b1bcf8255abd44933d38660e5bad639c38fb7dbbcf1f9504e20b27d75810b5ab475ce061d725b54628b4cfd7bd53f29d93a8ecb16e96df9ff654da55ea8ed1700c8d3135b1bc97655595a56f75dfb101c27341309602dce89e9c4db08a7c19d7fb199394f0ec478c4f246dbab0a37c2cea22b5b2b4c9e589a640611348b77dddd0fc412c9980cb5d516b274b9649debdd22df123cd06495924%"
],
"_comment_6": "ciphers are ordered by preference",
"_comment_7": "prime256v1 := secp256r1",
"ecCiphers": [
"brainpoolP512r1",
"brainpoolP384r1",
"brainpoolP256r1",
"secp384r1",
"prime256v1",
"secp224r1"
],
"pskCiphers": [
"RSA-PSK-AES256-GCM-SHA384",
"RSA-PSK-AES256-CBC-SHA384",
"RSA-PSK-AES128-GCM-SHA256",
"RSA-PSK-AES128-CBC-SHA256",
"RSA-PSK-AES256-CBC-SHA"
],
"fsCiphers": [
"ECDHE-ECDSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES256-GCM-SHA384",
"DHE-DSS-AES256-GCM-SHA384",
"DHE-RSA-AES256-GCM-SHA384",
"ECDHE-ECDSA-AES256-SHA384",
"ECDHE-RSA-AES256-SHA384",
"DHE-DSS-AES256-SHA256",
"DHE-RSA-AES256-SHA256",
"ECDHE-ECDSA-AES128-GCM-SHA256",
"ECDHE-RSA-AES128-GCM-SHA256",
"DHE-DSS-AES128-GCM-SHA256",
"DHE-RSA-AES128-GCM-SHA256",
"ECDHE-ECDSA-AES128-SHA256",
"ECDHE-RSA-AES128-SHA256",
"DHE-DSS-AES128-SHA256",
"DHE-RSA-AES128-SHA256"
],
"fsCiphersWithBc": [
"ECDHE-ECDSA-AES256-SHA",
"ECDHE-RSA-AES256-SHA",
"DHE-DSS-AES256-SHA",
"DHE-RSA-AES256-SHA",
"ECDHE-ECDSA-AES128-SHA",
"ECDHE-RSA-AES128-SHA",
"DHE-DSS-AES128-SHA",
"DHE-RSA-AES128-SHA"
],
"sslProtocolVersion": "TlsV1_0OrLater",
"sslProtocolVersionPsk": "TlsV1_1OrLater",
"signatureAlgorithms" : [
"Rsa+Sha512",
"Dsa+Sha512",
"Ec+Sha512",
"Rsa+Sha384",
"Dsa+Sha384",
"Ec+Sha384",
"Rsa+Sha256",
"Dsa+Sha256",
"Ec+Sha256",
"Rsa+Sha224",
"Dsa+Sha224",
"Ec+Sha224"
],
"signatureAlgorithmsPsk" : [
"Rsa+Sha512",
"Rsa+Sha384",
"Rsa+Sha256",
"Rsa+Sha224"
],
"tlsSettings" : {
"protocolVersion": "TlsV1_0OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
"ECDHE-ECDSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES256-GCM-SHA384",
"DHE-DSS-AES256-GCM-SHA384",
"DHE-RSA-AES256-GCM-SHA384",
"ECDHE-ECDSA-AES256-SHA384",
"ECDHE-RSA-AES256-SHA384",
"DHE-DSS-AES256-SHA256",
"DHE-RSA-AES256-SHA256",
"ECDHE-ECDSA-AES128-GCM-SHA256",
"ECDHE-RSA-AES128-GCM-SHA256",
"DHE-DSS-AES128-GCM-SHA256",
"DHE-RSA-AES128-GCM-SHA256",
"ECDHE-ECDSA-AES128-SHA256",
"ECDHE-RSA-AES128-SHA256",
"DHE-DSS-AES128-SHA256",
"DHE-RSA-AES128-SHA256",
"ECDHE-ECDSA-AES256-SHA",
"ECDHE-RSA-AES256-SHA",
"DHE-DSS-AES256-SHA",
"DHE-RSA-AES256-SHA",
"ECDHE-ECDSA-AES128-SHA",
"ECDHE-RSA-AES128-SHA",
"DHE-DSS-AES128-SHA",
"DHE-RSA-AES128-SHA"
],
"_comment_2": "prime256v1 := secp256r1",
"ellipticCurves": [
"brainpoolP512r1",
"brainpoolP384r1",
"brainpoolP256r1",
"secp384r1",
"prime256v1",
"secp224r1"
],
"signatureAlgorithms" : [
"Rsa+Sha512",
"Dsa+Sha512",
"Ec+Sha512",
"Rsa+Sha384",
"Dsa+Sha384",
"Ec+Sha384",
"Rsa+Sha256",
"Dsa+Sha256",
"Ec+Sha256",
"Rsa+Sha224",
"Dsa+Sha224",
"Ec+Sha224"
]
},
"tlsSettingsPsk" : {
"protocolVersion": "TlsV1_1OrLater",
"_comment_1": "ciphers are ordered by preference",
"ciphers": [
"RSA-PSK-AES256-GCM-SHA384",
"RSA-PSK-AES256-CBC-SHA384",
"RSA-PSK-AES128-GCM-SHA256",
"RSA-PSK-AES128-CBC-SHA256",
"RSA-PSK-AES256-CBC-SHA"
],
"_comment_2": "ellipticCurves not needed",
"signatureAlgorithms" : [
"Rsa+Sha512",
"Rsa+Sha384",
"Rsa+Sha256",
"Rsa+Sha224"
]
},
"minStaticKeySizes": {
"Rsa": 2000,
"Dsa": 2000,
"Ec": 224
},
"minEphemeralKeySizes": {
"Rsa": 2000,
"Dsa": 1024,
"Ec": 224
},
"selfAuthentication": {
"_comment_1": "TCTokenURL for self authentication (AusweisAuskunft)",
@ -122,7 +144,7 @@
},
"updates": {
"release": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_APPCAST@/Appcast.xml",
"beta": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_APPCAST_BETA@/Appcast.xml"
"release": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_APPCAST@/Appcast.json",
"beta": "@REMOTE_CONFIG_URL@@REMOTE_CONFIG_PATH_APPCAST_BETA@/Appcast.json"
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 B

View File

@ -1,42 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="188px" height="40.5px" viewBox="0 0 188 40.5" enable-background="new 0 0 188 40.5" xml:space="preserve">
<g>
<defs>
<rect id="SVGID_1_" x="-0.026" width="232.784" height="40.5"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_2_)">
<defs>
<rect id="SVGID_3_" x="-0.026" width="232.784" height="40.5"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" fill="#FFFFFF" d="M4.798,4.205c0,0-4.212,0-4.212,4.213v25.037c0,0,0,4.213,4.212,4.213h25.038
c0,0,4.212,0,4.212-4.213V8.418c0,0,0-4.213-4.212-4.213H4.798z"/>
</g>
<g clip-path="url(#SVGID_2_)">
<defs>
<path id="SVGID_5_" d="M4.89,21.283c0,6.68,5.088,12.109,11.589,12.779v-4.551c-3.985-0.639-7.038-4.063-7.038-8.229
c0-4.165,3.053-7.591,7.038-8.228V8.504C9.978,9.176,4.89,14.604,4.89,21.283"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_6_)">
<defs>
<rect id="SVGID_7_" x="4.844" y="8.47" width="11.719" height="25.636"/>
</defs>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_7_" overflow="visible"/>
</clipPath>
<g transform="matrix(1 0 0 1 -1.810140e-007 1.930745e-006)" clip-path="url(#SVGID_8_)">
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="188px" height="40.5px" viewBox="0 0 188 40.5" enable-background="new 0 0 188 40.5" xml:space="preserve">
<g>
<defs>
<rect id="SVGID_1_" x="-0.026" width="232.784" height="40.5"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_2_)">
<defs>
<rect id="SVGID_3_" x="-0.026" width="232.784" height="40.5"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" fill="#FFFFFF" d="M4.798,4.205c0,0-4.212,0-4.212,4.213v25.037c0,0,0,4.213,4.212,4.213h25.038
c0,0,4.212,0,4.212-4.213V8.418c0,0,0-4.213-4.212-4.213H4.798z"/>
</g>
<g clip-path="url(#SVGID_2_)">
<defs>
<path id="SVGID_5_" d="M4.89,21.283c0,6.68,5.088,12.109,11.589,12.779v-4.551c-3.985-0.639-7.038-4.063-7.038-8.229
c0-4.165,3.053-7.591,7.038-8.228V8.504C9.978,9.176,4.89,14.604,4.89,21.283"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_6_)">
<defs>
<rect id="SVGID_7_" x="4.844" y="8.47" width="11.719" height="25.636"/>
</defs>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_7_" overflow="visible"/>
</clipPath>
<g transform="matrix(1 0 0 1 -1.810140e-007 1.930745e-006)" clip-path="url(#SVGID_8_)">
<image overflow="visible" width="176" height="385" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEEOQQ5AAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
EAMCAwYAAAU+AAAGxAAACZX/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
@ -80,28 +79,28 @@ Gr7khs8xq+5IbPMavuSGzzGr7khs8xq+5IbPMavuSGzzGr7khs8xq+5IbNMavuSGzTGr7khs0xq+
zTGr7khs0xq+5IbNMavuSGzTGr7khs0xq+5IbNMavuSGzTGr7khs0xq+5IbNMavuSGzTGr7khs0x
q+5IbNMavuSGzTGr/wDpVRx+U/lPP1+zchatrchatrchatrchatrchatrchatrchatrchatrchat
rchatrchatrchatrchatrchatrchatrchatrchatrchatrchatrchatrchatrH/kJSTyn5efP2+q
I7//2Q==" transform="matrix(0.0666 0 0 -0.0666 4.8438 34.1055)">
</image>
</g>
</g>
</g>
<g clip-path="url(#SVGID_2_)">
<defs>
<path id="SVGID_9_" d="M18.859,13.056c3.984,0.637,7.038,4.063,7.038,8.228c0,4.166-3.053,7.59-7.038,8.229v4.551
c6.5-0.67,11.589-6.1,11.589-12.779c0-6.679-5.089-12.107-11.589-12.779V13.056z"/>
</defs>
<clipPath id="SVGID_10_">
<use xlink:href="#SVGID_9_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_10_)">
<defs>
<rect id="SVGID_11_" x="18.767" y="8.47" width="11.852" height="25.636"/>
</defs>
<clipPath id="SVGID_12_">
<use xlink:href="#SVGID_11_" overflow="visible"/>
</clipPath>
<g transform="matrix(1 0 0 1 7.456483e-007 1.930745e-006)" clip-path="url(#SVGID_12_)">
I7//2Q==" transform="matrix(0.0666 0 0 -0.0666 4.8438 34.1055)">
</image>
</g>
</g>
</g>
<g clip-path="url(#SVGID_2_)">
<defs>
<path id="SVGID_9_" d="M18.859,13.056c3.984,0.637,7.038,4.063,7.038,8.228c0,4.166-3.053,7.59-7.038,8.229v4.551
c6.5-0.67,11.589-6.1,11.589-12.779c0-6.679-5.089-12.107-11.589-12.779V13.056z"/>
</defs>
<clipPath id="SVGID_10_">
<use xlink:href="#SVGID_9_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_10_)">
<defs>
<rect id="SVGID_11_" x="18.767" y="8.47" width="11.852" height="25.636"/>
</defs>
<clipPath id="SVGID_12_">
<use xlink:href="#SVGID_11_" overflow="visible"/>
</clipPath>
<g transform="matrix(1 0 0 1 7.456483e-007 1.930745e-006)" clip-path="url(#SVGID_12_)">
<image overflow="visible" width="178" height="385" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEEOQQ5AAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
EAMCAwYAAATzAAAGdwAACSv/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
@ -143,83 +142,83 @@ mcBXhcJY0zgK8ThLGlcBXicJY0rgK8ThLGlcBXicJY0rgK8ThLGlcBXicJY0rgK8ThLGlcBXicJY
GlcBXicJY0rgK8bhLGkcBXjcJY0jgK8bhLGkcBXjcJY0jgK8bhLGkcBXjcJY0jgK8bhLGkcBXjcJ
Y0jgK8bhLGkcBXjcJY0jgK8bhLGkcBXT/qEUp+/1+ffz/Fbq5da3Vy61url1rdXLrW6uXWt1cutb
q5da3Vy61url1rdXLrW6uXWt1cutbq5da3Vy61url1rdXLrW6uXWt1cutbq5da3Vy61url1pX+UR
Un7/AG+/fz/Nv//Z" transform="matrix(0.0666 0 0 -0.0666 18.7666 34.1055)">
</image>
</g>
</g>
</g>
<g clip-path="url(#SVGID_2_)">
<defs>
<rect id="SVGID_13_" x="-0.026" width="232.784" height="40.5"/>
</defs>
<clipPath id="SVGID_14_">
<use xlink:href="#SVGID_13_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_14_)" fill="#5286C1" d="M33.628,33.143c0,4.105-4.104,4.105-4.104,4.105H5.111
c-4.105,0-4.105-4.105-4.105-4.105V8.73c0-4.104,4.105-4.104,4.105-4.104h24.413c4.104,0,4.104,4.104,4.104,4.104V33.143z
M34.66,33.354V8.52c0,0,0-4.926-4.926-4.926H4.9c0,0-4.926,0-4.926,4.926v24.834c0,0,0,4.926,4.926,4.926h24.833
C29.733,38.279,34.66,38.279,34.66,33.354"/>
<g opacity="0.8" clip-path="url(#SVGID_14_)">
<g>
<defs>
<rect id="SVGID_15_" x="31.426" width="201.332" height="40.5"/>
</defs>
<clipPath id="SVGID_16_">
<use xlink:href="#SVGID_15_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_16_)">
<path fill="#5288C1" d="M54.316,30.701l-1.209-4.072H48.07l-1.21,4.072h-3.604l5.629-17.208h3.728l5.407,17.208H54.316z
M51.329,20.307l-0.691-3.037c-0.099,0.396-0.518,2.173-0.814,3.309c-0.321,1.235-0.543,2.05-0.914,3.185h3.358
C52.144,23.394,51.6,21.492,51.329,20.307z"/>
<path fill="#5288C1" d="M67.522,31.047c-0.42-0.295-0.766-0.715-0.988-1.234c-0.814,0.791-2,1.211-3.333,1.211
c-1.778,0-3.309-0.84-3.728-2.051c-0.198-0.566-0.272-1.234-0.272-2.518v-8.099l3.259-0.617v8.124
c0,1.135,0.099,1.729,0.271,2.073c0.173,0.346,0.667,0.594,1.16,0.594c0.815,0,1.802-0.594,2.049-1.211V18.43l3.16-0.666v9.654
c0,0.84,0.271,1.703,0.765,2.297L67.522,31.047z"/>
<path fill="#5288C1" d="M75.839,31.096c-1.555,0-3.259-0.492-5.11-1.455l1.185-2.42c1.012,0.617,2.765,1.432,4.197,1.432
c0.938,0,1.679-0.617,1.679-1.432c0-0.865-0.617-1.309-1.951-1.555l-1.481-0.271c-0.84-0.148-1.876-0.742-2.321-1.285
s-0.716-1.457-0.716-2.271c0-2.469,1.951-4.123,4.889-4.123c2.024,0,3.357,0.617,4.518,1.186l-1.086,2.222
c-1.259-0.642-2.173-0.914-3.111-0.914c-0.963,0-1.604,0.494-1.604,1.236c0,0.642,0.419,0.988,1.58,1.283l1.53,0.396
c1.556,0.395,2.074,0.863,2.519,1.432c0.469,0.592,0.691,1.309,0.691,2.147C81.247,29.318,79.074,31.096,75.839,31.096z"/>
<path fill="#5288C1" d="M94.897,30.701H91.86l-1.136-4.346c-0.271-1.012-0.568-2.221-0.716-3.061l-0.197-1.26
c-0.074,0.543-0.099,0.717-0.296,1.631c-0.247,1.086-0.79,3.258-1.086,4.444l-0.642,2.592h-3.086l-3.457-12.418l3.284-0.371
l1.037,4.865c0.296,1.309,0.642,3.432,0.716,3.924c0.148-0.963,0.518-2.987,0.913-4.395l1.185-4.246h3.111l1.012,4.174
c0.494,2.098,0.864,4.049,0.938,4.467c0.074-0.543,0.346-2.518,0.691-4.124l0.963-4.518h3.407L94.897,30.701z"/>
<path fill="#5288C1" d="M103.312,25.417v0.1c0,1.95,0.963,3.061,2.667,3.061c1.136,0,2.197-0.42,3.21-1.26l1.283,1.977
c-1.457,1.184-2.987,1.752-4.766,1.752c-3.628,0-5.974-2.566-5.974-6.543c0-2.27,0.469-3.777,1.58-5.012
c1.037-1.16,2.296-1.703,3.975-1.703c1.456,0,2.839,0.494,3.653,1.333c1.161,1.186,1.68,2.89,1.68,5.53v0.766H103.312z
M107.189,22.851c0-0.939-0.1-1.433-0.396-1.902c-0.321-0.494-0.79-0.741-1.456-0.741c-1.26,0-1.976,0.988-1.976,2.741v0.049
h3.827V22.851z"/>
<path fill="#5288C1" d="M113.902,16.628c-1.111,0-2.025-0.914-2.025-2.05s0.938-2.049,2.074-2.049c1.111,0,2,0.913,2,2.049
S115.037,16.628,113.902,16.628z M112.248,30.701V18.283l3.309-0.519v12.937H112.248z"/>
<path fill="#5288C1" d="M122.294,31.096c-1.555,0-3.259-0.492-5.11-1.455l1.185-2.42c1.013,0.617,2.766,1.432,4.197,1.432
c0.938,0,1.68-0.617,1.68-1.432c0-0.865-0.617-1.309-1.951-1.555l-1.48-0.271c-0.84-0.148-1.877-0.742-2.321-1.285
s-0.716-1.457-0.716-2.271c0-2.469,1.95-4.123,4.889-4.123c2.023,0,3.357,0.617,4.518,1.186l-1.086,2.222
c-1.26-0.642-2.174-0.914-3.111-0.914c-0.963,0-1.604,0.494-1.604,1.236c0,0.642,0.419,0.988,1.58,1.283l1.53,0.396
c1.556,0.395,2.074,0.863,2.519,1.432c0.469,0.592,0.691,1.309,0.691,2.147C127.702,29.318,125.529,31.096,122.294,31.096z"/>
<path fill="#5288C1" d="M139.549,30.701l-1.209-4.072h-5.037l-1.209,4.072h-3.604l5.63-17.208h3.727l5.408,17.208H139.549z
M136.563,20.307l-0.691-3.037c-0.1,0.396-0.518,2.173-0.814,3.309c-0.32,1.235-0.543,2.05-0.914,3.185h3.357
C137.377,23.394,136.834,21.492,136.563,20.307z"/>
<path fill="#5288C1" d="M154.188,29.541c-0.865,0.914-2,1.432-3.383,1.432c-0.988,0-1.926-0.246-2.641-0.666
c0.049,0.297,0.049,0.666,0.049,1.037v3.949l-3.186,0.84V21.517c0-1.654-0.023-2.124-0.197-3.185l2.938-0.519
c0.123,0.444,0.197,0.79,0.223,1.186c0.568-0.691,1.826-1.186,3.111-1.186c0.889,0,1.803,0.297,2.492,0.766
c1.359,0.913,2.346,2.543,2.346,5.456C155.939,26.752,155.496,28.135,154.188,29.541z M152.014,21.566
c-0.246-0.692-0.764-1.062-1.58-1.062c-0.814,0-1.604,0.346-2.197,0.963v6.147c0.445,0.371,1.162,0.74,1.828,0.74
c1.629,0,2.271-1.109,2.271-3.999C152.336,23.146,152.236,22.183,152.014,21.566z"/>
<path fill="#5288C1" d="M166.578,29.541c-0.863,0.914-2,1.432-3.381,1.432c-0.988,0-1.926-0.246-2.643-0.666
c0.049,0.297,0.049,0.666,0.049,1.037v3.949l-3.184,0.84V21.517c0-1.654-0.025-2.124-0.197-3.185l2.938-0.519
c0.123,0.444,0.197,0.79,0.223,1.186c0.566-0.691,1.826-1.186,3.109-1.186c0.889,0,1.803,0.297,2.494,0.766
c1.357,0.913,2.346,2.543,2.346,5.456C168.332,26.752,167.887,28.135,166.578,29.541z M164.406,21.566
c-0.246-0.692-0.766-1.062-1.58-1.062s-1.605,0.346-2.197,0.963v6.147c0.443,0.371,1.16,0.74,1.826,0.74
c1.631,0,2.271-1.109,2.271-3.999C164.727,23.146,164.629,22.183,164.406,21.566z"/>
</g>
<g clip-path="url(#SVGID_16_)">
<path fill="#5288C1" d="M185.299,30.701h-12.586v-3.076l3.734-2.417c3.453-2.229,4.99-3.672,4.99-5.557
c0-1.569-1.129-2.385-2.887-2.385c-1.947,0-3.768,1.381-4.52,1.978l-1.854-2.009c2.262-2.009,4.457-3.014,7.314-3.014
c3.516,0,5.9,1.915,5.9,4.896c0,2.699-2.229,5.055-6.717,7.786l-1.758,1.066c0.283-0.031,1.57-0.125,3.17-0.125h5.932
L185.299,30.701z"/>
</g>
</g>
</g>
</g>
</g>
</svg>
Un7/AG+/fz/Nv//Z" transform="matrix(0.0666 0 0 -0.0666 18.7666 34.1055)">
</image>
</g>
</g>
</g>
<g clip-path="url(#SVGID_2_)">
<defs>
<rect id="SVGID_13_" x="-0.026" width="232.784" height="40.5"/>
</defs>
<clipPath id="SVGID_14_">
<use xlink:href="#SVGID_13_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_14_)" fill="#5286C1" d="M33.628,33.143c0,4.105-4.104,4.105-4.104,4.105H5.111
c-4.105,0-4.105-4.105-4.105-4.105V8.73c0-4.104,4.105-4.104,4.105-4.104h24.413c4.104,0,4.104,4.104,4.104,4.104V33.143z
M34.66,33.354V8.52c0,0,0-4.926-4.926-4.926H4.9c0,0-4.926,0-4.926,4.926v24.834c0,0,0,4.926,4.926,4.926h24.833
C29.733,38.279,34.66,38.279,34.66,33.354"/>
<g opacity="0.8" clip-path="url(#SVGID_14_)">
<g>
<defs>
<rect id="SVGID_15_" x="31.426" width="201.332" height="40.5"/>
</defs>
<clipPath id="SVGID_16_">
<use xlink:href="#SVGID_15_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_16_)">
<path fill="#5288C1" d="M54.316,30.701l-1.209-4.072H48.07l-1.21,4.072h-3.604l5.629-17.208h3.728l5.407,17.208H54.316z
M51.329,20.307l-0.691-3.037c-0.099,0.396-0.518,2.173-0.814,3.309c-0.321,1.235-0.543,2.05-0.914,3.185h3.358
C52.144,23.394,51.6,21.492,51.329,20.307z"/>
<path fill="#5288C1" d="M67.522,31.047c-0.42-0.295-0.766-0.715-0.988-1.234c-0.814,0.791-2,1.211-3.333,1.211
c-1.778,0-3.309-0.84-3.728-2.051c-0.198-0.566-0.272-1.234-0.272-2.518v-8.099l3.259-0.617v8.124
c0,1.135,0.099,1.729,0.271,2.073c0.173,0.346,0.667,0.594,1.16,0.594c0.815,0,1.802-0.594,2.049-1.211V18.43l3.16-0.666v9.654
c0,0.84,0.271,1.703,0.765,2.297L67.522,31.047z"/>
<path fill="#5288C1" d="M75.839,31.096c-1.555,0-3.259-0.492-5.11-1.455l1.185-2.42c1.012,0.617,2.765,1.432,4.197,1.432
c0.938,0,1.679-0.617,1.679-1.432c0-0.865-0.617-1.309-1.951-1.555l-1.481-0.271c-0.84-0.148-1.876-0.742-2.321-1.285
s-0.716-1.457-0.716-2.271c0-2.469,1.951-4.123,4.889-4.123c2.024,0,3.357,0.617,4.518,1.186l-1.086,2.222
c-1.259-0.642-2.173-0.914-3.111-0.914c-0.963,0-1.604,0.494-1.604,1.236c0,0.642,0.419,0.988,1.58,1.283l1.53,0.396
c1.556,0.395,2.074,0.863,2.519,1.432c0.469,0.592,0.691,1.309,0.691,2.147C81.247,29.318,79.074,31.096,75.839,31.096z"/>
<path fill="#5288C1" d="M94.897,30.701H91.86l-1.136-4.346c-0.271-1.012-0.568-2.221-0.716-3.061l-0.197-1.26
c-0.074,0.543-0.099,0.717-0.296,1.631c-0.247,1.086-0.79,3.258-1.086,4.444l-0.642,2.592h-3.086l-3.457-12.418l3.284-0.371
l1.037,4.865c0.296,1.309,0.642,3.432,0.716,3.924c0.148-0.963,0.518-2.987,0.913-4.395l1.185-4.246h3.111l1.012,4.174
c0.494,2.098,0.864,4.049,0.938,4.467c0.074-0.543,0.346-2.518,0.691-4.124l0.963-4.518h3.407L94.897,30.701z"/>
<path fill="#5288C1" d="M103.312,25.417v0.1c0,1.95,0.963,3.061,2.667,3.061c1.136,0,2.197-0.42,3.21-1.26l1.283,1.977
c-1.457,1.184-2.987,1.752-4.766,1.752c-3.628,0-5.974-2.566-5.974-6.543c0-2.27,0.469-3.777,1.58-5.012
c1.037-1.16,2.296-1.703,3.975-1.703c1.456,0,2.839,0.494,3.653,1.333c1.161,1.186,1.68,2.89,1.68,5.53v0.766H103.312z
M107.189,22.851c0-0.939-0.1-1.433-0.396-1.902c-0.321-0.494-0.79-0.741-1.456-0.741c-1.26,0-1.976,0.988-1.976,2.741v0.049
h3.827V22.851z"/>
<path fill="#5288C1" d="M113.902,16.628c-1.111,0-2.025-0.914-2.025-2.05s0.938-2.049,2.074-2.049c1.111,0,2,0.913,2,2.049
S115.037,16.628,113.902,16.628z M112.248,30.701V18.283l3.309-0.519v12.937H112.248z"/>
<path fill="#5288C1" d="M122.294,31.096c-1.555,0-3.259-0.492-5.11-1.455l1.185-2.42c1.013,0.617,2.766,1.432,4.197,1.432
c0.938,0,1.68-0.617,1.68-1.432c0-0.865-0.617-1.309-1.951-1.555l-1.48-0.271c-0.84-0.148-1.877-0.742-2.321-1.285
s-0.716-1.457-0.716-2.271c0-2.469,1.95-4.123,4.889-4.123c2.023,0,3.357,0.617,4.518,1.186l-1.086,2.222
c-1.26-0.642-2.174-0.914-3.111-0.914c-0.963,0-1.604,0.494-1.604,1.236c0,0.642,0.419,0.988,1.58,1.283l1.53,0.396
c1.556,0.395,2.074,0.863,2.519,1.432c0.469,0.592,0.691,1.309,0.691,2.147C127.702,29.318,125.529,31.096,122.294,31.096z"/>
<path fill="#5288C1" d="M139.549,30.701l-1.209-4.072h-5.037l-1.209,4.072h-3.604l5.63-17.208h3.727l5.408,17.208H139.549z
M136.563,20.307l-0.691-3.037c-0.1,0.396-0.518,2.173-0.814,3.309c-0.32,1.235-0.543,2.05-0.914,3.185h3.357
C137.377,23.394,136.834,21.492,136.563,20.307z"/>
<path fill="#5288C1" d="M154.188,29.541c-0.865,0.914-2,1.432-3.383,1.432c-0.988,0-1.926-0.246-2.641-0.666
c0.049,0.297,0.049,0.666,0.049,1.037v3.949l-3.186,0.84V21.517c0-1.654-0.023-2.124-0.197-3.185l2.938-0.519
c0.123,0.444,0.197,0.79,0.223,1.186c0.568-0.691,1.826-1.186,3.111-1.186c0.889,0,1.803,0.297,2.492,0.766
c1.359,0.913,2.346,2.543,2.346,5.456C155.939,26.752,155.496,28.135,154.188,29.541z M152.014,21.566
c-0.246-0.692-0.764-1.062-1.58-1.062c-0.814,0-1.604,0.346-2.197,0.963v6.147c0.445,0.371,1.162,0.74,1.828,0.74
c1.629,0,2.271-1.109,2.271-3.999C152.336,23.146,152.236,22.183,152.014,21.566z"/>
<path fill="#5288C1" d="M166.578,29.541c-0.863,0.914-2,1.432-3.381,1.432c-0.988,0-1.926-0.246-2.643-0.666
c0.049,0.297,0.049,0.666,0.049,1.037v3.949l-3.184,0.84V21.517c0-1.654-0.025-2.124-0.197-3.185l2.938-0.519
c0.123,0.444,0.197,0.79,0.223,1.186c0.566-0.691,1.826-1.186,3.109-1.186c0.889,0,1.803,0.297,2.494,0.766
c1.357,0.913,2.346,2.543,2.346,5.456C168.332,26.752,167.887,28.135,166.578,29.541z M164.406,21.566
c-0.246-0.692-0.766-1.062-1.58-1.062s-1.605,0.346-2.197,0.963v6.147c0.443,0.371,1.16,0.74,1.826,0.74
c1.631,0,2.271-1.109,2.271-3.999C164.727,23.146,164.629,22.183,164.406,21.566z"/>
</g>
<g clip-path="url(#SVGID_16_)">
<path fill="#5288C1" d="M185.299,30.701h-12.586v-3.076l3.734-2.417c3.453-2.229,4.99-3.672,4.99-5.557
c0-1.569-1.129-2.385-2.887-2.385c-1.947,0-3.768,1.381-4.52,1.978l-1.854-2.009c2.262-2.009,4.457-3.014,7.314-3.014
c3.516,0,5.9,1.915,5.9,4.896c0,2.699-2.229,5.055-6.717,7.786l-1.758,1.066c0.283-0.031,1.57-0.125,3.17-0.125h5.932
L185.299,30.701z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="70.87px" height="70.87px" viewBox="0 0 70.87 70.87" enable-background="new 0 0 70.87 70.87" xml:space="preserve">
<path fill="#5389C2" d="M35.43,17.849c-9.695,0-17.582,7.89-17.582,17.588c0,9.697,7.887,17.586,17.582,17.586
c9.699,0,17.592-7.889,17.592-17.586C53.021,25.738,45.129,17.849,35.43,17.849 M35.43,57.04c-11.91,0-21.6-9.688-21.6-21.604
c0-11.913,9.69-21.606,21.6-21.606c11.916,0,21.611,9.693,21.611,21.606C57.041,47.352,47.346,57.04,35.43,57.04"/>
<polygon fill="#84BC5A" points="34.535,46.109 23.721,37.85 27.314,33.139 33.25,37.689 42.432,24.761 47.148,28.356 "/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="70.87px" height="70.87px" viewBox="0 0 70.87 70.87" enable-background="new 0 0 70.87 70.87" xml:space="preserve">
<path fill="#5389C2" d="M35.43,17.849c-9.695,0-17.582,7.89-17.582,17.588c0,9.697,7.887,17.586,17.582,17.586
c9.699,0,17.592-7.889,17.592-17.586C53.021,25.738,45.129,17.849,35.43,17.849 M35.43,57.04c-11.91,0-21.6-9.688-21.6-21.604
c0-11.913,9.69-21.606,21.6-21.606c11.916,0,21.611,9.693,21.611,21.606C57.041,47.352,47.346,57.04,35.43,57.04"/>
<polygon fill="#84BC5A" points="34.535,46.109 23.721,37.85 27.314,33.139 33.25,37.689 42.432,24.761 47.148,28.356 "/>
</svg>

Before

Width:  |  Height:  |  Size: 969 B

After

Width:  |  Height:  |  Size: 852 B

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
<path fill="#010202" d="M20,11H7.828l5.586-5.586L12,4l-8,8l8,8l1.414-1.414L7.828,13H20V11z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
<path fill="#010202" d="M20,11H7.828l5.586-5.586L12,4l-8,8l8,8l1.414-1.414L7.828,13H20V11z"/>
</svg>

Before

Width:  |  Height:  |  Size: 572 B

After

Width:  |  Height:  |  Size: 466 B

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
<path fill="#FFFFFF" d="M20,11H7.828l5.586-5.586L12,4l-8,8l8,8l1.414-1.414L7.828,13H20V11z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
<path fill="#FFFFFF" d="M20,11H7.828l5.586-5.586L12,4l-8,8l8,8l1.414-1.414L7.828,13H20V11z"/>
</svg>

Before

Width:  |  Height:  |  Size: 572 B

After

Width:  |  Height:  |  Size: 466 B

View File

@ -1,65 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path display="none" fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887
c0-0.001,2.556-0.001,2.556-2.557V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12
c0,2.118,1.553,3.86,3.58,4.185v2.314C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314
c2.027-0.325,3.58-2.067,3.58-4.185s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12
C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" display="none" enable-background="new ">
<g id="TAGS" display="inline">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" enable-background="new ">
<g id="TEXT__x2F__LEFT">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" display="none" enable-background="new ">
<g id="COG" display="inline">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path display="none" fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887
c0-0.001,2.556-0.001,2.556-2.557V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12
c0,2.118,1.553,3.86,3.58,4.185v2.314C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314
c2.027-0.325,3.58-2.067,3.58-4.185s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12
C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" display="none" enable-background="new ">
<g id="TAGS" display="inline">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" enable-background="new ">
<g id="TEXT__x2F__LEFT">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" display="none" enable-background="new ">
<g id="COG" display="inline">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -1,64 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887c0-0.001,2.556-0.001,2.556-2.557
V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12c0,2.118,1.553,3.86,3.58,4.185v2.314
C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314c2.027-0.325,3.58-2.067,3.58-4.185
s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" display="none" enable-background="new ">
<g id="TAGS" display="inline">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" display="none" enable-background="new ">
<g id="TEXT__x2F__LEFT" display="inline">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" display="none" enable-background="new ">
<g id="COG" display="inline">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887c0-0.001,2.556-0.001,2.556-2.557
V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12c0,2.118,1.553,3.86,3.58,4.185v2.314
C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314c2.027-0.325,3.58-2.067,3.58-4.185
s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" display="none" enable-background="new ">
<g id="TAGS" display="inline">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" display="none" enable-background="new ">
<g id="TEXT__x2F__LEFT" display="inline">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" display="none" enable-background="new ">
<g id="COG" display="inline">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -1,65 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path display="none" fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887
c0-0.001,2.556-0.001,2.556-2.557V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12
c0,2.118,1.553,3.86,3.58,4.185v2.314C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314
c2.027-0.325,3.58-2.067,3.58-4.185s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12
C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" enable-background="new ">
<g id="TAGS">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" display="none" enable-background="new ">
<g id="TEXT__x2F__LEFT" display="inline">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" display="none" enable-background="new ">
<g id="COG" display="inline">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path display="none" fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887
c0-0.001,2.556-0.001,2.556-2.557V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12
c0,2.118,1.553,3.86,3.58,4.185v2.314C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314
c2.027-0.325,3.58-2.067,3.58-4.185s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12
C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" enable-background="new ">
<g id="TAGS">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" display="none" enable-background="new ">
<g id="TEXT__x2F__LEFT" display="inline">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" display="none" enable-background="new ">
<g id="COG" display="inline">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -1,65 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path display="none" fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887
c0-0.001,2.556-0.001,2.556-2.557V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12
c0,2.118,1.553,3.86,3.58,4.185v2.314C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314
c2.027-0.325,3.58-2.067,3.58-4.185s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12
C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" display="none" enable-background="new ">
<g id="TAGS" display="inline">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" display="none" enable-background="new ">
<g id="TEXT__x2F__LEFT" display="inline">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" enable-background="new ">
<g id="COG">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="56px" height="24px" viewBox="0 0 56 24" enable-background="new 0 0 56 24" xml:space="preserve">
<symbol id="ic_x5F_delete_x0D_" viewBox="0 -24 24 24">
<g>
<path fill="#010202" d="M6-19c0-1.104,0.895-2,2-2h8c1.104,0,2,0.896,2,2v12H6V-19z M19-4h-3.5l-1,1h-5l-1-1H5v-2h14V-4z"/>
</g>
<polygon fill="none" points="24,-24 0,-24 0,0 24,0 "/>
</symbol>
<use xlink:href="#ic_x5F_delete_x0D_" width="24" height="24" id="ic_x5F_delete" y="-24" transform="matrix(1 0 0 -1 0 0)" display="none" overflow="visible" opacity="0.54"/>
<path display="none" fill="#538AC3" d="M18.443,3H5.556C5.556,3,3,3,3,5.556v12.887C3,18.443,3,21,5.556,21h12.887
c0-0.001,2.556-0.001,2.556-2.557V5.556C21,5.556,21,3,18.443,3z M11.395,7.815C9.368,8.14,7.815,9.882,7.815,12
c0,2.118,1.553,3.86,3.58,4.185v2.314C8.088,18.158,5.5,15.396,5.5,12c0-3.397,2.588-6.158,5.895-6.5V7.815z M12.605,18.499v-2.314
c2.027-0.325,3.58-2.067,3.58-4.185s-1.553-3.861-3.58-4.185V5.5C15.911,5.841,18.5,8.603,18.5,12
C18.5,15.396,15.911,18.158,12.605,18.499z"/>
<g id="TAGS_1_" display="none" enable-background="new ">
<g id="TAGS" display="inline">
<g>
<path fill="#548AC3" d="M20.028,10.283l-1.709-1.634c-0.002,0.003-0.004,0.006-0.006,0.009l-5.605-5.362
c-0.181-0.182-0.431-0.294-0.708-0.294c-0.001,0-0.002,0-0.003,0V3H5.676v0.002c-0.552,0-0.999,0.447-0.999,0.999h7.324
l8.016,7.708l0.073-0.085l0.001,0c0.142-0.172,0.232-0.391,0.232-0.633C20.323,10.715,20.21,10.464,20.028,10.283z
M19.657,13.306c0-0.029-0.001-0.058-0.004-0.087c-0.001-0.006-0.002-0.01-0.003-0.015c-0.004-0.029-0.007-0.057-0.013-0.085
c0-0.001,0-0.001,0-0.001c-0.041-0.198-0.14-0.374-0.28-0.51L11.71,5.294C11.529,5.112,11.279,5,11.002,5C11.001,5,11.001,5,11,5
V4.997H4.678V5C4.126,5,3.679,5.447,3.679,5.998H3.677v6.341h0.004c0.005,0.292,0.136,0.552,0.341,0.731l-0.004,0.004
l8.322,7.656l0.002-0.002c0.131,0.116,0.293,0.198,0.472,0.231c0.007,0.002,0.015,0.003,0.022,0.004
c0.022,0.004,0.045,0.007,0.067,0.009c0.032,0.004,0.064,0.005,0.097,0.005c0.305,0,0.577-0.137,0.76-0.353l0,0.001l5.659-6.658
l0-0.001c0.148-0.174,0.238-0.399,0.238-0.646C19.658,13.317,19.657,13.311,19.657,13.306z M6.342,8.994
c-0.735,0-1.332-0.596-1.332-1.332s0.596-1.332,1.332-1.332s1.332,0.596,1.332,1.332S7.077,8.994,6.342,8.994z"/>
</g>
</g>
</g>
<g id="TEXT__x2F__LEFT_1_" display="none" enable-background="new ">
<g id="TEXT__x2F__LEFT" display="inline">
<g>
<path fill="#548AC3" d="M2.345,10.325h13.317c0,0,0,0,0,0h1.997c0.552,0,0.999-0.447,0.999-0.999
c0-0.552-0.447-0.999-0.999-0.999H2.345c-0.552,0-0.999,0.447-0.999,0.999C1.346,9.877,1.793,10.325,2.345,10.325z M2.345,4.998
h19.31c0.552,0,0.999-0.447,0.999-0.999S22.207,3,21.655,3H2.345C1.793,3,1.346,3.447,1.346,3.999S1.793,4.998,2.345,4.998z
M21.655,13.654H2.345c-0.552,0-0.999,0.447-0.999,0.999c0,0.552,0.447,0.999,0.999,0.999h19.31c0.552,0,0.999-0.447,0.999-0.999
C22.654,14.101,22.207,13.654,21.655,13.654z M15.662,18.981H2.345c-0.552,0-0.999,0.447-0.999,0.999
c0,0.552,0.447,0.999,0.999,0.999h13.317c0.552,0,0.999-0.447,0.999-0.999C16.661,19.428,16.214,18.981,15.662,18.981z"/>
</g>
</g>
</g>
<g id="COG_1_" enable-background="new ">
<g id="COG">
<g>
<path fill="#548AC3" d="M12.003,8.627c-1.864,0-3.375,1.511-3.375,3.375c0,1.864,1.511,3.375,3.375,3.375
s3.375-1.511,3.375-3.375S13.866,8.627,12.003,8.627z M12.003,13.69c-0.932,0-1.688-0.755-1.688-1.688s0.756-1.688,1.688-1.688
c0.932,0,1.688,0.755,1.688,1.688S12.935,13.69,12.003,13.69z M18.617,10.163c-0.152-0.55-0.373-1.072-0.65-1.557
c0.315-0.424,1.401-2.009,0.618-2.792L18.184,5.39c-0.669-0.669-2.378,0.376-2.793,0.646c-0.491-0.278-1.018-0.499-1.575-0.65
C13.726,4.856,13.336,3,12.235,3h-0.44c-0.945,0-1.488,1.919-1.609,2.4C9.636,5.554,9.116,5.775,8.632,6.053
C8.251,5.769,6.614,4.637,5.815,5.436L5.391,5.793C4.695,6.489,5.852,8.325,6.063,8.647c-0.267,0.478-0.482,0.989-0.63,1.529
c-0.462,0.074-2.433,0.454-2.433,1.588v0.44c0,0.982,2.067,1.528,2.444,1.62c0.15,0.536,0.366,1.043,0.634,1.517
c-0.222,0.348-1.335,2.176-0.645,2.867l0.401,0.334c0.908,0.908,2.805-0.584,2.805-0.584l-0.088-0.094
c0.503,0.298,1.048,0.533,1.623,0.695c0.094,0.388,0.64,2.44,1.619,2.44h0.44c1.284,0,1.602-2.397,1.602-2.397L13.72,18.6
c0.582-0.149,1.134-0.373,1.646-0.66c0.401,0.267,2.082,1.319,2.752,0.648l0.446-0.447c0.896-0.896-0.562-2.727-0.602-2.778
c0.276-0.485,0.498-1.004,0.651-1.554c0.501-0.127,2.386-0.668,2.386-1.605v-0.44C20.999,10.52,18.757,10.183,18.617,10.163z
M12.003,17.065c-2.796,0-5.063-2.267-5.063-5.063s2.267-5.063,5.063-5.063c2.796,0,5.063,2.267,5.063,5.063
S14.799,17.065,12.003,17.065z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
<g opacity="0.54">
<g>
<path fill="#010202" d="M15.502,14h-0.794l-0.275-0.274C15.408,12.589,16,11.115,16,9.5C16,5.91,13.09,3,9.5,3S3,5.91,3,9.5
C3,13.09,5.91,16,9.5,16c1.615,0,3.088-0.592,4.225-1.567l0.276,0.275V15.5l4.998,4.991L20.49,19L15.502,14z M9.5,14
C7.015,14,5,11.985,5,9.5C5,7.015,7.015,5,9.5,5S14,7.015,14,9.5C14,11.985,11.985,14,9.5,14z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 855 B

View File

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.645,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" d="M10.894,8.933l-4.108,7.025l4.095,6.983l-2.979-0.008L4,15.958L7.933,8.92L10.894,8.933z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.645,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" d="M10.894,8.933l-4.108,7.025l4.095,6.983l-2.979-0.008L4,15.958L7.933,8.92L10.894,8.933z"/>
</svg>

Before

Width:  |  Height:  |  Size: 886 B

After

Width:  |  Height:  |  Size: 776 B

View File

@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" fill="#FFFFFF" enable-background="new " d="M10.895,8.933l-4.108,7.025l4.095,6.983l-2.979-0.008L4,15.958
L7.934,8.92L10.895,8.933z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" fill="#FFFFFF" enable-background="new " d="M10.895,8.933l-4.108,7.025l4.095,6.983l-2.979-0.008L4,15.958
L7.934,8.92L10.895,8.933z"/>
</svg>

Before

Width:  |  Height:  |  Size: 932 B

After

Width:  |  Height:  |  Size: 821 B

View File

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.645,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" d="M3.106,22.928l4.108-7.025L3.12,8.92l2.979,0.008L10,15.903l-3.933,7.039L3.106,22.928z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.645,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" d="M3.106,22.928l4.108-7.025L3.12,8.92l2.979,0.008L10,15.903l-3.933,7.039L3.106,22.928z"/>
</svg>

Before

Width:  |  Height:  |  Size: 885 B

After

Width:  |  Height:  |  Size: 775 B

View File

@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" fill="#FFFFFF" enable-background="new " d="M3.106,22.928l4.108-7.025L3.12,8.92l2.979,0.008L10,15.903
l-3.933,7.039L3.106,22.928z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="14px" height="32px" viewBox="0 0 14 32" enable-background="new 0 0 14 32" xml:space="preserve">
<path display="none" fill="#3D3D3D" d="M23,15v8H9V9h13V8H8v16h16v-9H23z"/>
<path display="none" fill="#3D3D3D" d="M26.496,9.577l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.167,2.182l5.164,5.176
L26.496,9.577z"/>
<path display="none" fill="#3D3D3D" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
<path opacity="0.3" fill="#FFFFFF" enable-background="new " d="M3.106,22.928l4.108-7.025L3.12,8.92l2.979,0.008L10,15.903
l-3.933,7.039L3.106,22.928z"/>
</svg>

Before

Width:  |  Height:  |  Size: 931 B

After

Width:  |  Height:  |  Size: 820 B

View File

@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g display="none">
<path display="inline" fill="#2D2D2D" d="M26.493,9.359l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.166,2.182l5.164,5.175
L26.493,9.359z"/>
<path display="inline" fill="#2D2D2D" d="M23.001,15v8H9V9h13.001V8H8v16h16.001v-9H23.001z"/>
</g>
<path fill="#020202" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g display="none">
<path display="inline" fill="#2D2D2D" d="M26.493,9.359l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.166,2.182l5.164,5.175
L26.493,9.359z"/>
<path display="inline" fill="#2D2D2D" d="M23.001,15v8H9V9h13.001V8H8v16h16.001v-9H23.001z"/>
</g>
<path fill="#020202" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
</svg>

Before

Width:  |  Height:  |  Size: 807 B

After

Width:  |  Height:  |  Size: 696 B

View File

@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g>
<path d="M26.493,9.359l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.166,2.182l5.164,5.175L26.493,9.359z"/>
<path d="M23.001,15v8H9V9h13.001V8H8v16h16.001v-9H23.001z"/>
</g>
<path display="none" fill="#020202" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g>
<path d="M26.493,9.359l-2.178-2.172l-8.646,8.727l-3.014-3.051l-2.166,2.182l5.164,5.175L26.493,9.359z"/>
<path d="M23.001,15v8H9V9h13.001V8H8v16h16.001v-9H23.001z"/>
</g>
<path display="none" fill="#020202" d="M23,9v14H9V9H23 M24,8H8v16h16V8.039V8z"/>
</svg>

Before

Width:  |  Height:  |  Size: 739 B

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 840 840" >
<g transform="translate(-235,-280) scale(1.2,1.2)" fill="#8e8e93">
<path d="M 210 432 c0 -11 8 -26 18 -34 22 -18 293 -128 317 -128 24 0 295 110 318 128 9 8 17 23 17 34 0 17 -16 18 -335 18 -319 0 -335 -1 -335 -18 Z
M 320 460 L 770 460 770 840 a 50 50 0 0 1 -50 50 L 370 890 a 50 50 0 0 1 -50 -50 Z
M 546.5 505 a 168.33 168.33 0 0 0 0 336.66 a 168.33 168.33 0 0 0 0 -336.66 z
M 546.5 564.58 a 108.75 108.75 0 0 1 0 217.5 a 108.75 108.75 0 0 1 0 -217.5 z
M 530.875 470 h 31.25 v 410 h -31.25 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 621 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 840 840" >
<g transform="translate(-400,-590) scale(1.5,1.5)" fill="#8e8e93">
<path d="M 320 500 a 50 50 0 0 1 50 -50 h 350 a 50 50 0 0 1 50 50 v 350 a 50 50 0 0 1 -50 50 h -350 a 50 50 0 0 1 -50 -50 z
M 546.5 505 a 168.33 168.33 0 0 0 0 336.66 a 168.33 168.33 0 0 0 0 -336.66 z
M 546.5 564.58 a 108.75 108.75 0 0 1 0 217.5 a 108.75 108.75 0 0 1 0 -217.5 z
M 530.875 470 h 31.25 v 410 h -31.25 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 604 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96px" height="96px" viewBox="0 0 840 840" >
<path d="M95,250 c0,0 0,-100 100,-100 h450 c0,0 100,0 100,100 v300 c0,0 0,100 -100,100 h-450 c0,0 -100,0 -100,-100 Z
M210,295 c0,0 0,20 20,20 h390 c0,0 20,0 20,-20 v-5 c0,0 0,-20 -20,-20 h-390 c0,0 -20,0 -20,20 Z
M210,405 c0,0 0,20 20,20 h210 c0,0 20,0 20,-20 v-5 c0,0 0,-20 -20,-20 h-210 c0,0 -20,0 -20,20 Z
M210,515 c0,0 0,20 20,20 h310 c0,0 20,0 20,-20 v-5 c0,0 0,-20 -20,-20 h-310 c0,0 -20,0 -20,20 Z"
fill="#8e8e93" />
<path d="M210,650 L410,650 L210,790 Z" fill="#8e8e93" />
</svg>

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 643 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 840 840" >
<g transform="translate(-90,-90) scale(0.6,0.6)" fill="#8e8e93">
<path d="m840,275 -200,337.5 L252.5,715 517.5,1012.5 495,1415 860,1255 1235,1397.5 l-42.5,-395 255,-317.5 -392.5,-77.5 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 735 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 140 140" >
<g fill="#8e8e93">
<path d="M 70 10 a 60 60 0 0 0 0 120 a 60 60 0 0 0 0 -120 z
M 70 20 a 50 50 0 0 1 0 100 a 50 50 0 0 1 0 -100 z" />
<circle cx="70" cy="44" r="6"/>
<rect x="64" y="56" width="12" height="48" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 573 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 840 840" >
<g transform="translate(-400,-600) scale(1.5,1.5)" fill="#8e8e93">
<path d="M 330 630 a 50 50 0 0 1 50 -50 h 10 a 156 156 0 0 1 310 0 h 10 a 50 50 0 0 1 50 50 v 240 a 50 50 0 0 1 -50 50 h -330 a 50 50 0 0 1 -50 -50 z
M 400 630 a 20 20 0 0 0 -20 20 v 200 a 20 20 0 0 0 20 20 h 290 a 20 20 0 0 0 20 -20 v -200 a 20 20 0 0 0 -20 -20 z
M 650 580 a 106 106 0 0 0 -210 0 z
M 525 750 a 50 50 0 1 1 40 0 l 20 100 h -80 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 120 120" >
<g fill="#8e8e93">
<path d="M 37 25 C 78 -5 93 40 70 55 C 62 62 60 71 60 80" style="fill: none; stroke-width: 20; stroke: #8e8e93;" />
<circle cx="60" cy="100" r="14"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 B

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 120 120" >
<g fill="#8e8e93">
<circle cx="90" cy="30" r="15"/>
<line x1="90" y1="30" x2="30" y2="60" style="stroke:rgb(86,86,86); stroke-width: 6;" />
<circle cx="30" cy="60" r="15"/>
<line x1="30" y1="60" x2="90" y2="90" style="stroke:rgb(86,86,86); stroke-width: 6;" />
<circle cx="90" cy="90" r="15"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 821 B

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 120 120" >
<g fill="#8e8e93">
<path d="M 101 71 a 43 43 0 1 1 -10 -40" style="fill: none; stroke-width: 6; stroke: #8e8e93;" />
<path d="M 84 38 l 14 -14 l 4 20 z" />
<path d="M 60 30 a 30 30 0 0 0 0 60 a 30 30 0 0 0 0 -60 z
M 59 61 v -14 h 3 v 11 h 7 v 3" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 B

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 120 120" >
<g fill="#8e8e93">
<circle cx="60" cy="30" r="10"/>
<circle cx="60" cy="60" r="10"/>
<circle cx="60" cy="90" r="10"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 302 B

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="16 16 224 224">
<rect width="24" height="246" fill="#ffffff" transform="rotate(45) translate(169,-123)"/>
<rect width="24" height="246" fill="#ffffff" transform="rotate(-45) translate(-12,58)"/>
</svg>

After

Width:  |  Height:  |  Size: 392 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="2 2 20 20">
<path fill="#FFFFFF" d="M15.502,14h-0.794l-0.275-0.274C15.408,12.589,16,11.115,16,9.5C16,5.91,13.09,3,9.5,3S3,5.91,3,9.5
C3,13.09,5.91,16,9.5,16c1.615,0,3.088-0.592,4.225-1.567l0.276,0.275V15.5l4.998,4.991L20.49,19L15.502,14z M9.5,14
C7.015,14,5,11.985,5,9.5C5,7.015,7.015,5,9.5,5S14,7.015,14,9.5C14,11.985,11.985,14,9.5,14z"/>
</svg>

After

Width:  |  Height:  |  Size: 587 B

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="1.156px" height="24px" viewBox="0 0 1.156 24" enable-background="new 0 0 1.156 24" xml:space="preserve">
<line fill="none" stroke="#000000" stroke-miterlimit="10" stroke-opacity="0.1" x1="0.5" y1="0" x2="0.5" y2="24"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="1.156px" height="24px" viewBox="0 0 1.156 24" enable-background="new 0 0 1.156 24" xml:space="preserve">
<line fill="none" stroke="#000000" stroke-miterlimit="10" stroke-opacity="0.1" x1="0.5" y1="0" x2="0.5" y2="24"/>
</svg>

Before

Width:  |  Height:  |  Size: 601 B

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Some files were not shown because too many files have changed in this diff Show More