|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
52
LICENSE.txt
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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()
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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}")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -8,8 +8,6 @@ der AusweisApp2 unterstützt.
|
|||
|
||||
Betriebssysteme
|
||||
"""""""""""""""
|
||||
- OS X 10.9
|
||||
|
||||
- OS X 10.10
|
||||
|
||||
- OS X 10.11
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
Versionen
|
||||
=========
|
||||
|
||||
Versionszweig 1.12
|
||||
------------------
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
1.12.2
|
||||
1.12.1
|
||||
1.12.0
|
||||
|
||||
|
||||
Versionszweig 1.10
|
||||
------------------
|
||||
.. toctree::
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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::
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
|
@ -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*
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 445 B |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 766 B |
|
@ -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 |
Before Width: | Height: | Size: 621 B |
|
@ -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 |
|
@ -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 |
Before Width: | Height: | Size: 643 B |
|
@ -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 |
Before Width: | Height: | Size: 735 B |
|
@ -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 |
Before Width: | Height: | Size: 573 B |
|
@ -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 |
Before Width: | Height: | Size: 575 B |
|
@ -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 |
Before Width: | Height: | Size: 596 B |
|
@ -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 |
Before Width: | Height: | Size: 821 B |
|
@ -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 |
Before Width: | Height: | Size: 234 B |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 5.2 KiB |