Artifact cda61264f60105dc28ec081fd7ee7c6464a90325e79acd3ba8d7d1d58d2cc400:
- File
objfw.spec
— part of check-in
[d30efa8bbf]
at
2021-11-13 13:04:13
on branch trunk
— Completely rework the TLS/SSL API
The previous API could never work cleanly and would always require
hacks, as it needed intercepting all interactions of OFTCPSocket with
the raw socket and did not work at all if the OFTCPSocket had anything
in its read buffer before starting the TLS handshake. This also could
not be fixed easily, as it would have required the object to contain two
read buffers, one for the unencrypted connection and one for the
encrypted connection. There was also no clean way to perform the
handshake in a non-blocking way.The new API is a lot cleaner and requires none of the hacks, but using
it requires slightly more work. But this is more than made up for by
making a fully asynchronous handshake possible. It uses the concept of a
stream wrapping another stream, meaning the entire connecting part is
being handled by OFTCPSocket and then the connected socket is passed off
to OFTLSStream to wrap it. This also makes for a lot cleaner separation
of concerns. (user: js, size: 15375) [annotate] [blame] [check-ins using]
%global libobjfw_major 0 %global libobjfw_minor 0 %global libobjfwrt_major 0 %global libobjfwrt_minor 0 %if 0%{?suse_version} %global libobjfw_pkgname libobjfw%{libobjfw_major} %global libobjfwrt_pkgname libobjfwrt%{libobjfwrt_major} %else %global libobjfw_pkgname libobjfw %global libobjfwrt_pkgname libobjfwrt %endif Name: objfw Version: 1.1dev Release: 1%{?dist} Summary: Portable, lightweight framework for the Objective-C language %if 0%{?suse_version} License: QPL-1.0 or GPL-3.0 or GPL-2.0 Group: Development/Languages/C and C++ %else License: QPL or GPLv3 or GPLv2 %endif URL: https://objfw.nil.im Source0: objfw-%{version}.tar.gz BuildRequires: autoconf BuildRequires: automake BuildRequires: clang BuildRequires: make Requires: %{libobjfw_pkgname}%{_isa} = %{version}-%{release} Requires: %{libobjfw_pkgname}-devel = %{version}-%{release} Requires: %{libobjfwrt_pkgname}%{_isa} = %{version}-%{release} Requires: %{libobjfwrt_pkgname}-devel = %{version}-%{release} Requires: ofarc%{_isa} = %{version}-%{release} Requires: ofdns%{_isa} = %{version}-%{release} Requires: ofhash%{_isa} = %{version}-%{release} Requires: ofhttp%{_isa} = %{version}-%{release} %description ObjFW is a portable, lightweight framework for the Objective-C language. It enables you to write an application in Objective-C that will run on any platform supported by ObjFW without having to worry about differences between operating systems or various frameworks you would otherwise need if you want to be portable. It supports all modern Objective-C features when using Clang, but is also compatible with GCC ≥ 4.6 to allow maximum portability. ObjFW also comes with its own lightweight and extremely fast Objective-C runtime, which in real world use cases was found to be significantly faster than both GNU's and Apple's runtime. %package -n %{libobjfw_pkgname} Summary: ObjFW library Requires: %{libobjfwrt_pkgname}%{_isa} = %{version}-%{release} %description -n %{libobjfw_pkgname} The %{libobjfw_pkgname} package contains the library needed by programs using ObjFW. %package -n %{libobjfw_pkgname}-devel Summary: Header files and tools for %{libobjfw_pkgname} Requires: %{libobjfw_pkgname}%{_isa} = %{version}-%{release} Requires: %{libobjfwrt_pkgname}-devel = %{version}-%{release} %description -n %{libobjfw_pkgname}-devel The %{libobjfw_pkgname}-devel package contains the header files and tools to develop programs using ObjFW. %package -n %{libobjfwrt_pkgname} Summary: ObjFW Objective-C runtime library %description -n %{libobjfwrt_pkgname} The %{libobjfwrt_pkgname} package contains ObjFW's Objective-C runtime library. %package -n %{libobjfwrt_pkgname}-devel Summary: Header files for %{libobjfwrt_pkgname} Requires: %{libobjfwrt_pkgname}%{_isa} = %{version}-%{release} %description -n %{libobjfwrt_pkgname}-devel The %{libobjfwrt_pkgname}-devel package contains header files for ObjFW's Objective-C runtime library. %package -n ofarc Summary: Utility for handling ZIP, Tar and LHA archives Requires: %{libobjfw_pkgname}%{_isa} = %{version}-%{release} Requires: %{libobjfwrt_pkgname}%{_isa} = %{version}-%{release} %description -n ofarc ofarc is a multi-format archive utility that allows creating, listing, extracting and modifying ZIP, Tar and LHA archives using ObjFW's classes for various archive types. %package -n ofdns Summary: Utility for performing DNS requests on the command line Requires: %{libobjfw_pkgname}%{_isa} = %{version}-%{release} Requires: %{libobjfwrt_pkgname}%{_isa} = %{version}-%{release} %description -n ofdns ofdns is an utility for performing DNS requests on the command line using ObjFW's DNS resolver. %package -n ofhash Summary: Utility to hash files with various cryptographic hash functions Requires: %{libobjfw_pkgname}%{_isa} = %{version}-%{release} Requires: %{libobjfwrt_pkgname}%{_isa} = %{version}-%{release} %description -n ofhash ofhash is an utility to hash files with various cryptographic hash functions (even using different algorithms at once) using ObjFW's classes for various cryptographic hashes. %package -n ofhttp Summary: Command line downloader for HTTP(S) Requires: %{libobjfw_pkgname}%{_isa} = %{version}-%{release} Requires: %{libobjfwrt_pkgname}%{_isa} = %{version}-%{release} %description -n ofhttp ofhttp is a command line downloader for HTTP and HTTPS (via ObjOpenSSL) using ObjFW's OFHTTPClient class. It supports all features one would expect from a modern command line downloader such as resuming of downloads, using a SOCKS5 proxy, a modern terminal-based UI, etc. %prep %autosetup ./autogen.sh %build %configure --disable-rpath %make_build %install %make_install %check make -C tests run %if 0%{?suse_version} %post -n %{libobjfw_pkgname} -p /sbin/ldconfig %postun -n %{libobjfw_pkgname} -p /sbin/ldconfig %post -n %{libobjfwrt_pkgname} -p /sbin/ldconfig %postun -n %{libobjfwrt_pkgname} -p /sbin/ldconfig %endif %files %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n %{libobjfw_pkgname} %{_libdir}/libobjfw.so.%{libobjfw_major} %{_libdir}/libobjfw.so.%{libobjfw_major}.%{libobjfw_minor}.0 %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n %{libobjfw_pkgname}-devel %{_libdir}/libobjfw.so %{_includedir}/ObjFW/OFASPrintF.h %{_includedir}/ObjFW/OFAcceptFailedException.h %{_includedir}/ObjFW/OFAllocFailedException.h %{_includedir}/ObjFW/OFAlreadyConnectedException.h %{_includedir}/ObjFW/OFApplication.h %{_includedir}/ObjFW/OFArray.h %{_includedir}/ObjFW/OFAtomic.h %{_includedir}/ObjFW/OFBase64.h %{_includedir}/ObjFW/OFBindFailedException.h %{_includedir}/ObjFW/OFBlock.h %{_includedir}/ObjFW/OFCRC16.h %{_includedir}/ObjFW/OFCRC32.h %{_includedir}/ObjFW/OFChangeCurrentDirectoryPathFailedException.h %{_includedir}/ObjFW/OFCharacterSet.h %{_includedir}/ObjFW/OFChecksumMismatchException.h %{_includedir}/ObjFW/OFCollection.h %{_includedir}/ObjFW/OFColor.h %{_includedir}/ObjFW/OFCondition.h %{_includedir}/ObjFW/OFConditionBroadcastFailedException.h %{_includedir}/ObjFW/OFConditionSignalFailedException.h %{_includedir}/ObjFW/OFConditionStillWaitingException.h %{_includedir}/ObjFW/OFConditionWaitFailedException.h %{_includedir}/ObjFW/OFConnectionFailedException.h %{_includedir}/ObjFW/OFConstantString.h %{_includedir}/ObjFW/OFCopyItemFailedException.h %{_includedir}/ObjFW/OFCountedSet.h %{_includedir}/ObjFW/OFCreateDirectoryFailedException.h %{_includedir}/ObjFW/OFCreateSymbolicLinkFailedException.h %{_includedir}/ObjFW/OFCryptographicHash.h %{_includedir}/ObjFW/OFDNSQuery.h %{_includedir}/ObjFW/OFDNSQueryFailedException.h %{_includedir}/ObjFW/OFDNSResolver.h %{_includedir}/ObjFW/OFDNSResourceRecord.h %{_includedir}/ObjFW/OFDNSResponse.h %{_includedir}/ObjFW/OFData+CryptographicHashing.h %{_includedir}/ObjFW/OFData+MessagePackParsing.h %{_includedir}/ObjFW/OFData.h %{_includedir}/ObjFW/OFDatagramSocket.h %{_includedir}/ObjFW/OFDate.h %{_includedir}/ObjFW/OFDictionary.h %{_includedir}/ObjFW/OFEnumerationMutationException.h %{_includedir}/ObjFW/OFEnumerator.h %{_includedir}/ObjFW/OFException.h %{_includedir}/ObjFW/OFFile.h %{_includedir}/ObjFW/OFFileManager.h %{_includedir}/ObjFW/OFGZIPStream.h %{_includedir}/ObjFW/OFGetCurrentDirectoryPathFailedException.h %{_includedir}/ObjFW/OFGetOptionFailedException.h %{_includedir}/ObjFW/OFHMAC.h %{_includedir}/ObjFW/OFHTTPClient.h %{_includedir}/ObjFW/OFHTTPCookie.h %{_includedir}/ObjFW/OFHTTPCookieManager.h %{_includedir}/ObjFW/OFHTTPRequest.h %{_includedir}/ObjFW/OFHTTPRequestFailedException.h %{_includedir}/ObjFW/OFHTTPResponse.h %{_includedir}/ObjFW/OFHTTPServer.h %{_includedir}/ObjFW/OFHashAlreadyCalculatedException.h %{_includedir}/ObjFW/OFHuffmanTree.h %{_includedir}/ObjFW/OFINICategory.h %{_includedir}/ObjFW/OFINIFile.h %{_includedir}/ObjFW/OFIPXSocket.h %{_includedir}/ObjFW/OFInflate64Stream.h %{_includedir}/ObjFW/OFInflateStream.h %{_includedir}/ObjFW/OFInitializationFailedException.h %{_includedir}/ObjFW/OFInvalidArgumentException.h %{_includedir}/ObjFW/OFInvalidEncodingException.h %{_includedir}/ObjFW/OFInvalidFormatException.h %{_includedir}/ObjFW/OFInvalidJSONException.h %{_includedir}/ObjFW/OFInvalidServerReplyException.h %{_includedir}/ObjFW/OFInvocation.h %{_includedir}/ObjFW/OFJSONRepresentation.h %{_includedir}/ObjFW/OFKernelEventObserver.h %{_includedir}/ObjFW/OFKeyValueCoding.h %{_includedir}/ObjFW/OFLHAArchive.h %{_includedir}/ObjFW/OFLHAArchiveEntry.h %{_includedir}/ObjFW/OFLinkFailedException.h %{_includedir}/ObjFW/OFList.h %{_includedir}/ObjFW/OFListenFailedException.h %{_includedir}/ObjFW/OFLoadPluginFailedException.h %{_includedir}/ObjFW/OFLocale.h %{_includedir}/ObjFW/OFLockFailedException.h %{_includedir}/ObjFW/OFLocking.h %{_includedir}/ObjFW/OFMD5Hash.h %{_includedir}/ObjFW/OFMalformedXMLException.h %{_includedir}/ObjFW/OFMapTable.h %{_includedir}/ObjFW/OFMemoryNotPartOfObjectException.h %{_includedir}/ObjFW/OFMessagePackExtension.h %{_includedir}/ObjFW/OFMessagePackRepresentation.h %{_includedir}/ObjFW/OFMethodSignature.h %{_includedir}/ObjFW/OFMoveItemFailedException.h %{_includedir}/ObjFW/OFMutableArray.h %{_includedir}/ObjFW/OFMutableData.h %{_includedir}/ObjFW/OFMutableDictionary.h %{_includedir}/ObjFW/OFMutableLHAArchiveEntry.h %{_includedir}/ObjFW/OFMutablePair.h %{_includedir}/ObjFW/OFMutableSet.h %{_includedir}/ObjFW/OFMutableString.h %{_includedir}/ObjFW/OFMutableTarArchiveEntry.h %{_includedir}/ObjFW/OFMutableTriple.h %{_includedir}/ObjFW/OFMutableURL.h %{_includedir}/ObjFW/OFMutableZIPArchiveEntry.h %{_includedir}/ObjFW/OFMutex.h %{_includedir}/ObjFW/OFNotImplementedException.h %{_includedir}/ObjFW/OFNotOpenException.h %{_includedir}/ObjFW/OFNull.h %{_includedir}/ObjFW/OFNumber.h %{_includedir}/ObjFW/OFObject+KeyValueCoding.h %{_includedir}/ObjFW/OFObject+Serialization.h %{_includedir}/ObjFW/OFObject.h %{_includedir}/ObjFW/OFObserveFailedException.h %{_includedir}/ObjFW/OFOnce.h %{_includedir}/ObjFW/OFOpenItemFailedException.h %{_includedir}/ObjFW/OFOptionsParser.h %{_includedir}/ObjFW/OFOutOfMemoryException.h %{_includedir}/ObjFW/OFOutOfRangeException.h %{_includedir}/ObjFW/OFPBKDF2.h %{_includedir}/ObjFW/OFPair.h %{_includedir}/ObjFW/OFPlainCondition.h %{_includedir}/ObjFW/OFPlainMutex.h %{_includedir}/ObjFW/OFPlainThread.h %{_includedir}/ObjFW/OFPlugin.h %{_includedir}/ObjFW/OFRIPEMD160Hash.h %{_includedir}/ObjFW/OFReadFailedException.h %{_includedir}/ObjFW/OFReadOrWriteFailedException.h %{_includedir}/ObjFW/OFRecursiveMutex.h %{_includedir}/ObjFW/OFRemoveItemFailedException.h %{_includedir}/ObjFW/OFResolveHostFailedException.h %{_includedir}/ObjFW/OFRetrieveItemAttributesFailedException.h %{_includedir}/ObjFW/OFRunLoop.h %{_includedir}/ObjFW/OFSHA1Hash.h %{_includedir}/ObjFW/OFSHA224Hash.h %{_includedir}/ObjFW/OFSHA224Or256Hash.h %{_includedir}/ObjFW/OFSHA256Hash.h %{_includedir}/ObjFW/OFSHA384Hash.h %{_includedir}/ObjFW/OFSHA384Or512Hash.h %{_includedir}/ObjFW/OFSHA512Hash.h %{_includedir}/ObjFW/OFSPXSocket.h %{_includedir}/ObjFW/OFSPXStreamSocket.h %{_includedir}/ObjFW/OFScrypt.h %{_includedir}/ObjFW/OFSecureData.h %{_includedir}/ObjFW/OFSeekFailedException.h %{_includedir}/ObjFW/OFSeekableStream.h %{_includedir}/ObjFW/OFSequencedPacketSocket.h %{_includedir}/ObjFW/OFSerialization.h %{_includedir}/ObjFW/OFSet.h %{_includedir}/ObjFW/OFSetItemAttributesFailedException.h %{_includedir}/ObjFW/OFSetOptionFailedException.h %{_includedir}/ObjFW/OFSettings.h %{_includedir}/ObjFW/OFSocket.h %{_includedir}/ObjFW/OFSortedList.h %{_includedir}/ObjFW/OFStdIOStream.h %{_includedir}/ObjFW/OFStillLockedException.h %{_includedir}/ObjFW/OFStrPTime.h %{_includedir}/ObjFW/OFStream.h %{_includedir}/ObjFW/OFStreamSocket.h %{_includedir}/ObjFW/OFString+CryptographicHashing.h %{_includedir}/ObjFW/OFString+JSONParsing.h %{_includedir}/ObjFW/OFString+PathAdditions.h %{_includedir}/ObjFW/OFString+PropertyListParsing.h %{_includedir}/ObjFW/OFString+Serialization.h %{_includedir}/ObjFW/OFString+URLEncoding.h %{_includedir}/ObjFW/OFString+XMLEscaping.h %{_includedir}/ObjFW/OFString+XMLUnescaping.h %{_includedir}/ObjFW/OFString.h %{_includedir}/ObjFW/OFSystemInfo.h %{_includedir}/ObjFW/OFTCPSocket.h %{_includedir}/ObjFW/OFTLSKey.h %{_includedir}/ObjFW/OFTLSStream.h %{_includedir}/ObjFW/OFTarArchive.h %{_includedir}/ObjFW/OFTarArchiveEntry.h %{_includedir}/ObjFW/OFThread.h %{_includedir}/ObjFW/OFThreadJoinFailedException.h %{_includedir}/ObjFW/OFThreadPool.h %{_includedir}/ObjFW/OFThreadStartFailedException.h %{_includedir}/ObjFW/OFThreadStillRunningException.h %{_includedir}/ObjFW/OFTimer.h %{_includedir}/ObjFW/OFTriple.h %{_includedir}/ObjFW/OFTruncatedDataException.h %{_includedir}/ObjFW/OFUDPSocket.h %{_includedir}/ObjFW/OFURL.h %{_includedir}/ObjFW/OFURLHandler.h %{_includedir}/ObjFW/OFUnboundNamespaceException.h %{_includedir}/ObjFW/OFUnboundPrefixException.h %{_includedir}/ObjFW/OFUndefinedKeyException.h %{_includedir}/ObjFW/OFUnknownXMLEntityException.h %{_includedir}/ObjFW/OFUnlockFailedException.h %{_includedir}/ObjFW/OFUnsupportedProtocolException.h %{_includedir}/ObjFW/OFUnsupportedVersionException.h %{_includedir}/ObjFW/OFValue.h %{_includedir}/ObjFW/OFWriteFailedException.h %{_includedir}/ObjFW/OFXMLAttribute.h %{_includedir}/ObjFW/OFXMLCDATA.h %{_includedir}/ObjFW/OFXMLCharacters.h %{_includedir}/ObjFW/OFXMLComment.h %{_includedir}/ObjFW/OFXMLElement+Serialization.h %{_includedir}/ObjFW/OFXMLElement.h %{_includedir}/ObjFW/OFXMLElementBuilder.h %{_includedir}/ObjFW/OFXMLNode.h %{_includedir}/ObjFW/OFXMLParser.h %{_includedir}/ObjFW/OFXMLProcessingInstruction.h %{_includedir}/ObjFW/OFZIPArchive.h %{_includedir}/ObjFW/OFZIPArchiveEntry.h %{_includedir}/ObjFW/ObjFW.h %{_includedir}/ObjFW/macros.h %{_includedir}/ObjFW/objfw-defs.h %{_includedir}/ObjFW/platform.h %{_includedir}/ObjFW/platform/GCC4.7/OFAtomic.h %{_includedir}/ObjFW/platform/GCC4/OFAtomic.h %{_includedir}/ObjFW/platform/PowerPC/OFAtomic.h %{_includedir}/ObjFW/platform/macOS/OFAtomic.h %{_includedir}/ObjFW/platform/x86/OFAtomic.h %{_bindir}/objfw-compile %{_bindir}/objfw-config %{_bindir}/objfw-new %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n %{libobjfwrt_pkgname} %{_libdir}/libobjfwrt.so.%{libobjfwrt_major} %{_libdir}/libobjfwrt.so.%{libobjfwrt_major}.%{libobjfwrt_minor}.0 %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n %{libobjfwrt_pkgname}-devel %{_libdir}/libobjfwrt.so %{_includedir}/ObjFWRT/ObjFWRT.h %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n ofarc %{_bindir}/ofarc %{_datadir}/ofarc/lang/de.json %{_datadir}/ofarc/lang/languages.json %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n ofdns %{_bindir}/ofdns %{_datadir}/ofdns/lang/de.json %{_datadir}/ofdns/lang/languages.json %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n ofhash %{_bindir}/ofhash %{_datadir}/ofhash/lang/de.json %{_datadir}/ofhash/lang/languages.json %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2 %files -n ofhttp %{_bindir}/ofhttp %{_datadir}/ofhttp/lang/de.json %{_datadir}/ofhttp/lang/languages.json %license LICENSE.QPL %license LICENSE.GPLv3 %license LICENSE.GPLv2