mirror of
https://github.com/deneraraujo/OpenVPNAdapter.git
synced 2026-02-11 00:00:08 +08:00
Compare commits
159 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4db4b0b16 | ||
|
|
7f8dc34742 | ||
|
|
fe65f6e8dc | ||
|
|
01e05a6b0b | ||
|
|
c017621fe5 | ||
|
|
faa20d9006 | ||
|
|
9b48f3b650 | ||
|
|
a633990923 | ||
|
|
266fab991e | ||
|
|
fa98daeac9 | ||
|
|
580c8f3684 | ||
|
|
50a9e535d3 | ||
|
|
865f56794f | ||
|
|
efc584cc41 | ||
|
|
c50ec0a6af | ||
|
|
9dd3ca3bf5 | ||
|
|
d9346d7622 | ||
|
|
1843ebfb1d | ||
|
|
de616fc406 | ||
|
|
37296b6b98 | ||
|
|
779353fc97 | ||
|
|
062a7a1f9b | ||
|
|
c04cfe5d00 | ||
|
|
7b1f143822 | ||
|
|
a559b32781 | ||
|
|
029ba813cd | ||
|
|
464f948769 | ||
|
|
f81b84d64d | ||
|
|
ec718ccc57 | ||
|
|
a3f8df48a8 | ||
|
|
efaebb7ff1 | ||
|
|
cb924a0445 | ||
|
|
c6cd9c68d9 | ||
|
|
17e7a8d60f | ||
|
|
71de4fe664 | ||
|
|
d671af614b | ||
|
|
78b203ec87 | ||
|
|
ec1477b8a3 | ||
|
|
f95da0256a | ||
|
|
dd0e2f809d | ||
|
|
cd40d43983 | ||
|
|
7c656884a2 | ||
|
|
ccc3492009 | ||
|
|
5fe66b144a | ||
|
|
f2d598f646 | ||
|
|
54458439c3 | ||
|
|
de7d4418f1 | ||
|
|
5b4e7eeb17 | ||
|
|
e6c8bd457a | ||
|
|
75cca77033 | ||
|
|
d683b45480 | ||
|
|
fb3604c237 | ||
|
|
5a5b603c47 | ||
|
|
0a535eca5a | ||
|
|
a2ea36a673 | ||
|
|
95c413b5e8 | ||
|
|
c6214f0974 | ||
|
|
d916ec4b96 | ||
|
|
8fa49f5e57 | ||
|
|
27c6233e3f | ||
|
|
7f32ff342d | ||
|
|
b357c50067 | ||
|
|
d16a8ddade | ||
|
|
6de79ecaf8 | ||
|
|
2ec2827e5e | ||
|
|
fcb699d7c3 | ||
|
|
8941e49792 | ||
|
|
4a9ebe3e25 | ||
|
|
bdf829e80a | ||
|
|
0326b93bea | ||
|
|
abe0870828 | ||
|
|
baba768941 | ||
|
|
dcbc7b034b | ||
|
|
af6e1e48b2 | ||
|
|
5deb73311f | ||
|
|
1efcef1637 | ||
|
|
47725b0c34 | ||
|
|
b3196ad6aa | ||
|
|
e6d64ab981 | ||
|
|
eef09bdb28 | ||
|
|
f077c32fa6 | ||
|
|
947ac7a34b | ||
|
|
46543218e6 | ||
|
|
14fed5527d | ||
|
|
16069c0127 | ||
|
|
8a4755d51f | ||
|
|
afdb988ae9 | ||
|
|
f2ef611283 | ||
|
|
7294157182 | ||
|
|
d75dc24a8c | ||
|
|
63f8838172 | ||
|
|
e793320734 | ||
|
|
aff379ba21 | ||
|
|
02d1895396 | ||
|
|
05217a5d55 | ||
|
|
3372aca957 | ||
|
|
618b086aa6 | ||
|
|
b4b0ef1aca | ||
|
|
0d2c4e99b5 | ||
|
|
45213a2d8e | ||
|
|
fb9560b7a0 | ||
|
|
51b3e19450 | ||
|
|
cc2663779f | ||
|
|
5129f6ecb2 | ||
|
|
4d794cc279 | ||
|
|
adcb23702e | ||
|
|
6b782a9309 | ||
|
|
1e77a600a4 | ||
|
|
e66d4b04a2 | ||
|
|
02b1077795 | ||
|
|
82d2694a57 | ||
|
|
43e011aa12 | ||
|
|
8a79798c2c | ||
|
|
ea77618c28 | ||
|
|
dd08e51a19 | ||
|
|
e3266c3792 | ||
|
|
23fcbf55a9 | ||
|
|
d7ca445f35 | ||
|
|
7d53a7f396 | ||
|
|
990326e52f | ||
|
|
2bd0879a3b | ||
|
|
9dd887db5c | ||
|
|
86cc97e55f | ||
|
|
32f1555929 | ||
|
|
133b3756e6 | ||
|
|
c0cd028912 | ||
|
|
175080ea69 | ||
|
|
1dd2f46452 | ||
|
|
1a3a83f332 | ||
|
|
c274ea6ecc | ||
|
|
9b6210faab | ||
|
|
1639547f74 | ||
|
|
4c1704d1a2 | ||
|
|
d387eb4f5f | ||
|
|
f4f98ddf88 | ||
|
|
b04a285210 | ||
|
|
2d1fdfb019 | ||
|
|
ad77627ca9 | ||
|
|
d8a55bc358 | ||
|
|
76e5488aa1 | ||
|
|
c3ed67b67d | ||
|
|
f9d506ffca | ||
|
|
ef93e5adc9 | ||
|
|
3db23628cb | ||
|
|
7331ae5fad | ||
|
|
aa396dad2d | ||
|
|
29bd59f78f | ||
|
|
f44694ce5f | ||
|
|
238abab032 | ||
|
|
688ce11081 | ||
|
|
3980fb9be5 | ||
|
|
8e87aecebf | ||
|
|
828011bbd3 | ||
|
|
a6e3758c68 | ||
|
|
fb23b2a92e | ||
|
|
7faa96b809 | ||
|
|
8d167952b1 | ||
|
|
d1f794ae57 | ||
|
|
96cf2d1804 |
35
.gitignore
vendored
35
.gitignore
vendored
@@ -48,3 +48,38 @@ playground.xcworkspace
|
|||||||
# Carthage/Checkouts
|
# Carthage/Checkouts
|
||||||
|
|
||||||
Carthage/Build
|
Carthage/Build
|
||||||
|
|
||||||
|
# Swift PM
|
||||||
|
|
||||||
|
.build/
|
||||||
|
.swiftpm
|
||||||
|
|
||||||
|
## macOS generated
|
||||||
|
|
||||||
|
# General
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Icon must end with two \r
|
||||||
|
Icon
|
||||||
|
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear in the root of a volume
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.fseventsd
|
||||||
|
.Spotlight-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.Trashes
|
||||||
|
.VolumeIcon.icns
|
||||||
|
.com.apple.timemachine.donotpresent
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
||||||
|
|||||||
15
CHANGELOG.md
Normal file
15
CHANGELOG.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 0.7.0
|
||||||
|
- **Added**: An option to evaluate configuration without creating an instance of `OpenVPNAdapter`.
|
||||||
|
- **Updated**: Class `OpenVPNProperties` renamed to `OpenVPNConfigurationEvaluation`.
|
||||||
|
- **Updated**: openvpn3 library to 3.5.6 version, mbedTLS library to 2.7.13 version;
|
||||||
|
|
||||||
|
## 0.6.0
|
||||||
|
- **Updated**: Slightly changed API of the framework.
|
||||||
|
- **Fixed**: Reading packets issue affecting on connection when network interface is changed.
|
||||||
|
|
||||||
|
## 0.5.0
|
||||||
|
- **Added**: Swift Package Manager support;
|
||||||
|
- **Updated**: openvpn3 library to 3.5.4 version;
|
||||||
|
- **Fixed**: Network issue when adapter used in macOS projects.
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#include "Framework.xcconfig"
|
|
||||||
|
|
||||||
ONLY_ACTIVE_ARCH = YES
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = -Onone
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) DEBUG
|
|
||||||
BITCODE_GENERATION_MODE = marker
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
PRODUCT_NAME = OpenVPNAdapter
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = me.ss-abramchuk.openvpn-adapter
|
|
||||||
INFOPLIST_FILE = Configuration/Info-Framework.plist
|
|
||||||
MODULEMAP_FILE = Configuration/OpenVPNAdapter.modulemap
|
|
||||||
DYLIB_CURRENT_VERSION = $(CURRENT_PROJECT_VERSION)
|
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES
|
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = gnu++14
|
|
||||||
CLANG_CXX_LIBRARY = libc++
|
|
||||||
VENDORS_DIR = $(PROJECT_DIR)/Sources/OpenVPNAdapter/Libraries/Vendors
|
|
||||||
HEADER_SEARCH_PATHS = "$(VENDORS_DIR)/asio/asio/include" "$(VENDORS_DIR)/lz4/include" "$(VENDORS_DIR)/mbedtls/include" "$(VENDORS_DIR)/openvpn"
|
|
||||||
LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*] = "$(VENDORS_DIR)/lz4/lib/ios" "$(VENDORS_DIR)/mbedtls/lib/ios"
|
|
||||||
LIBRARY_SEARCH_PATHS[sdk=iphoneos*] = "$(VENDORS_DIR)/lz4/lib/ios" "$(VENDORS_DIR)/mbedtls/lib/ios"
|
|
||||||
LIBRARY_SEARCH_PATHS[sdk=macosx*] = "$(VENDORS_DIR)/lz4/lib/macos" "$(VENDORS_DIR)/mbedtls/lib/macos"
|
|
||||||
OTHER_LDFLAGS = -lmbedtls -lmbedx509 -lmbedcrypto -llz4
|
|
||||||
OTHER_CPLUSPLUSFLAGS = $(OTHER_CFLAGS) -DUSE_ASIO -DUSE_ASIO_THREADLOCAL -DASIO_STANDALONE -DASIO_NO_DEPRECATED -DASIO_HAS_STD_STRING_VIEW -DHAVE_LZ4 -DUSE_MBEDTLS -DOPENVPN_FORCE_TUN_NULL -DUSE_TUN_BUILDER
|
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = NO
|
|
||||||
1
Configuration/LZ4.xcconfig
Normal file
1
Configuration/LZ4.xcconfig
Normal file
@@ -0,0 +1 @@
|
|||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) XXH_NAMESPACE=LZ4_
|
||||||
3
Configuration/OpenVPNAdapter.xcconfig
Normal file
3
Configuration/OpenVPNAdapter.xcconfig
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
MODULEMAP_FILE = Sources/OpenVPNAdapter/module.modulemap
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) USE_ASIO
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = NO
|
||||||
2
Configuration/OpenVPNClient.xcconfig
Normal file
2
Configuration/OpenVPNClient.xcconfig
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) USE_ASIO USE_ASIO_THREADLOCAL ASIO_STANDALONE ASIO_NO_DEPRECATED ASIO_HAS_STD_STRING_VIEW USE_MBEDTLS HAVE_LZ4 OPENVPN_FORCE_TUN_NULL USE_TUN_BUILDER
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = NO
|
||||||
@@ -1,24 +1,31 @@
|
|||||||
SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx
|
SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx
|
||||||
TARGETED_DEVICE_FAMILY = 1,2
|
TARGETED_DEVICE_FAMILY = 1,2
|
||||||
|
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/Sources/OpenVPNAdapter/include $(SRCROOT)/Sources/OpenVPNClient/include $(SRCROOT)/Sources/LZ4/include $(SRCROOT)/Sources/mbedTLS/include $(SRCROOT)/Sources/ASIO/asio/include $(SRCROOT)/Sources/OpenVPN3
|
||||||
|
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = gnu++14
|
||||||
|
CLANG_CXX_LIBRARY = libc++
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// iOS-specific settings
|
// iOS-specific settings
|
||||||
//
|
//
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0
|
IPHONEOS_DEPLOYMENT_TARGET = 9.0
|
||||||
|
|
||||||
|
SDKROOT[arch=arm64] = iphoneos
|
||||||
|
SDKROOT[arch=armv7] = iphoneos
|
||||||
|
SDKROOT[arch=armv7s] = iphoneos
|
||||||
|
|
||||||
VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s
|
VALID_ARCHS[sdk=iphoneos*] = arm64 armv7 armv7s
|
||||||
VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64
|
VALID_ARCHS[sdk=iphonesimulator*] = i386 x86_64
|
||||||
|
|
||||||
LD_RUNPATH_SEARCH_PATHS[sdk=iphoneos*] = @executable_path/Frameworks @loader_path/Frameworks
|
|
||||||
LD_RUNPATH_SEARCH_PATHS[sdk=iphonesimulator*] = @executable_path/Frameworks @loader_path/Frameworks
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// macOS-specific settings
|
// macOS-specific settings
|
||||||
//
|
//
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.11
|
MACOSX_DEPLOYMENT_TARGET = 10.11
|
||||||
|
|
||||||
VALID_ARCHS[sdk=macosx*] = i386 x86_64
|
SDKROOT[arch=i386] = macosx
|
||||||
|
SDKROOT[arch=x86_64] = macosx
|
||||||
|
|
||||||
LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = @executable_path/../Frameworks @loader_path/../Frameworks
|
VALID_ARCHS[sdk=macosx*] = i386 x86_64
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
#include "Framework.xcconfig"
|
|
||||||
|
|
||||||
ONLY_ACTIVE_ARCH = NO
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = -Owholemodule
|
|
||||||
BITCODE_GENERATION_MODE = bitcode
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
PRODUCT_NAME = OpenVPNAdapterTests
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = me.ss-abramchuk.openvpn-adapter.tests
|
|
||||||
INFOPLIST_FILE = Configuration/Info-Tests.plist
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = -Onone
|
|
||||||
ONLY_ACTIVE_ARCH = YES
|
|
||||||
1
Configuration/mbedTLS.xcconfig
Normal file
1
Configuration/mbedTLS.xcconfig
Normal file
@@ -0,0 +1 @@
|
|||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) MBEDTLS_MD4_C MBEDTLS_RELAXED_X509_DATE _FILE_OFFSET_BITS=64
|
||||||
@@ -3,7 +3,7 @@ Pod::Spec.new do |s|
|
|||||||
# ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
# ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
||||||
|
|
||||||
s.name = "OpenVPNAdapter"
|
s.name = "OpenVPNAdapter"
|
||||||
s.version = "0.3.0"
|
s.version = "0.7.0"
|
||||||
s.summary = "Objective-C wrapper for OpenVPN library. Compatible with iOS and macOS."
|
s.summary = "Objective-C wrapper for OpenVPN library. Compatible with iOS and macOS."
|
||||||
s.description = <<-DESC
|
s.description = <<-DESC
|
||||||
OpenVPNAdapter is an Objective-C framework that allows to easily configure and establish VPN connection using OpenVPN protocol.
|
OpenVPNAdapter is an Objective-C framework that allows to easily configure and establish VPN connection using OpenVPN protocol.
|
||||||
@@ -35,116 +35,70 @@ Pod::Spec.new do |s|
|
|||||||
s.source = { :git => "https://github.com/ss-abramchuk/OpenVPNAdapter.git", :tag => "#{s.version}" }
|
s.source = { :git => "https://github.com/ss-abramchuk/OpenVPNAdapter.git", :tag => "#{s.version}" }
|
||||||
|
|
||||||
|
|
||||||
# ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
|
||||||
|
|
||||||
framework_path = "Sources/OpenVPNAdapter"
|
|
||||||
vendors_path = "#{framework_path}/Libraries/Vendors"
|
|
||||||
|
|
||||||
s.source_files = "#{framework_path}/*.{h,m,mm}"
|
|
||||||
|
|
||||||
s.public_header_files = "#{framework_path}/*.h"
|
|
||||||
s.private_header_files = [
|
|
||||||
"#{framework_path}/*+Internal.h",
|
|
||||||
"#{framework_path}/OpenVPNReachabilityTracker.h",
|
|
||||||
"#{framework_path}/OpenVPNClient.h",
|
|
||||||
"#{framework_path}/OpenVPNNetworkSettingsBuilder.h",
|
|
||||||
"#{framework_path}/OpenVPNPacket.h",
|
|
||||||
"#{framework_path}/OpenVPNPacketFlowBridge.h",
|
|
||||||
"#{framework_path}/NSError+OpenVPNError.h",
|
|
||||||
"#{framework_path}/NSArray+OpenVPNAdditions.h"
|
|
||||||
]
|
|
||||||
|
|
||||||
s.module_map = "Configuration/OpenVPNAdapter.modulemap"
|
|
||||||
|
|
||||||
|
|
||||||
# ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
# ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
||||||
|
|
||||||
s.ios.frameworks = "Foundation", "NetworkExtension", "SystemConfiguration", "UIKit"
|
s.ios.frameworks = "Foundation", "NetworkExtension", "SystemConfiguration", "UIKit"
|
||||||
s.osx.frameworks = "Foundation", "NetworkExtension", "SystemConfiguration"
|
s.osx.frameworks = "Foundation", "NetworkExtension", "SystemConfiguration"
|
||||||
|
|
||||||
s.libraries = "lz4", "mbedcrypto", "mbedtls", "mbedx509"
|
|
||||||
|
|
||||||
|
|
||||||
# ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
# ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
||||||
|
|
||||||
s.requires_arc = true
|
s.requires_arc = true
|
||||||
s.prefix_header_file = false
|
s.prefix_header_file = false
|
||||||
|
|
||||||
|
adapter_path = "Sources/OpenVPNAdapter"
|
||||||
|
asio_path = "Sources/ASIO"
|
||||||
|
lz4_path = "Sources/LZ4"
|
||||||
|
mbedtls_path = "Sources/mbedTLS"
|
||||||
|
openvpn_path = "Sources/OpenVPN3"
|
||||||
|
client_path = "Sources/OpenVPNClient"
|
||||||
|
|
||||||
s.xcconfig = {
|
s.xcconfig = {
|
||||||
"APPLICATION_EXTENSION_API_ONLY" => "YES",
|
"APPLICATION_EXTENSION_API_ONLY" => "YES",
|
||||||
"CLANG_CXX_LANGUAGE_STANDARD" => "gnu++14",
|
"CLANG_CXX_LANGUAGE_STANDARD" => "gnu++14",
|
||||||
"CLANG_CXX_LIBRARY" => "libc++",
|
"CLANG_CXX_LIBRARY" => "libc++",
|
||||||
"GCC_WARN_64_TO_32_BIT_CONVERSION" => "NO",
|
"GCC_WARN_64_TO_32_BIT_CONVERSION" => "NO",
|
||||||
"CLANG_WARN_DOCUMENTATION_COMMENTS" => "NO"
|
"CLANG_WARN_DOCUMENTATION_COMMENTS" => "NO",
|
||||||
|
"HEADER_SEARCH_PATHS" => "\"${PODS_TARGET_SRCROOT}/#{asio_path}/asio/include/**\" \"${PODS_TARGET_SRCROOT}/#{mbedtls_path}/include/**\" \"${PODS_TARGET_SRCROOT}/#{openvpn_path}/**\""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# ――― Subspecs ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
# ――― Subspecs ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
|
||||||
|
|
||||||
s.subspec "lz4" do |lz4|
|
s.subspec "OpenVPNAdapter" do |adapter|
|
||||||
lz4_path = "#{vendors_path}/lz4"
|
adapter.source_files = "#{adapter_path}/library/*.{h,m,mm}", "#{adapter_path}/include/*.h"
|
||||||
|
adapter.public_header_files = "#{adapter_path}/include/*.h"
|
||||||
|
|
||||||
lz4.preserve_paths = "#{lz4_path}/include/*.h"
|
adapter.compiler_flags = "-DUSE_ASIO"
|
||||||
|
|
||||||
lz4.ios.vendored_libraries = [
|
|
||||||
"#{lz4_path}/lib/ios/liblz4.a"
|
|
||||||
]
|
|
||||||
|
|
||||||
lz4.osx.vendored_libraries = [
|
|
||||||
"#{lz4_path}/lib/macos/liblz4.a"
|
|
||||||
]
|
|
||||||
|
|
||||||
lz4.xcconfig = {
|
|
||||||
"HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{lz4_path}/include/**"
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
s.subspec "mbedtls" do |mbedtls|
|
s.subspec "ASIO" do |asio|
|
||||||
mbedtls_path = "#{vendors_path}/mbedtls"
|
|
||||||
|
|
||||||
mbedtls.preserve_paths = "#{mbedtls_path}/include/**/*.h"
|
|
||||||
|
|
||||||
mbedtls.ios.vendored_libraries = [
|
|
||||||
"#{mbedtls_path}/lib/ios/libmbedcrypto.a",
|
|
||||||
"#{mbedtls_path}/lib/ios/libmbedtls.a",
|
|
||||||
"#{mbedtls_path}/lib/ios/libmbedx509.a"
|
|
||||||
]
|
|
||||||
|
|
||||||
mbedtls.osx.vendored_libraries = [
|
|
||||||
"#{mbedtls_path}/lib/macos/libmbedcrypto.a",
|
|
||||||
"#{mbedtls_path}/lib/macos/libmbedtls.a",
|
|
||||||
"#{mbedtls_path}/lib/macos/libmbedx509.a"
|
|
||||||
]
|
|
||||||
|
|
||||||
mbedtls.xcconfig = {
|
|
||||||
"HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{mbedtls_path}/include/**"
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
s.subspec "asio" do |asio|
|
|
||||||
asio_path = "#{vendors_path}/asio"
|
|
||||||
|
|
||||||
asio.preserve_paths = "#{asio_path}/asio/include/**/*.{hpp,ipp}"
|
asio.preserve_paths = "#{asio_path}/asio/include/**/*.{hpp,ipp}"
|
||||||
|
|
||||||
asio.xcconfig = {
|
|
||||||
"HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{asio_path}/asio/include/**"
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
s.subspec "openvpn" do |openvpn|
|
s.subspec "LZ4" do |lz4|
|
||||||
openvpn_path = "#{vendors_path}/openvpn"
|
lz4.source_files = "#{lz4_path}/lib/*.{h,c}",
|
||||||
|
lz4.private_header_files = "#{lz4_path}/lib/*.{h,c}"
|
||||||
|
|
||||||
openvpn.source_files = "#{openvpn_path}/client/*.{hpp,cpp}"
|
lz4.compiler_flags = "-DXXH_NAMESPACE=LZ4_"
|
||||||
openvpn.private_header_files = "#{openvpn_path}/client/*.hpp"
|
end
|
||||||
|
|
||||||
openvpn.preserve_paths = "#{openvpn_path}/openvpn/**/*.hpp"
|
s.subspec "mbedTLS" do |mbedtls|
|
||||||
|
mbedtls.source_files = "#{mbedtls_path}/library/*.{c}"
|
||||||
|
mbedtls.preserve_paths = "#{mbedtls_path}/include/**/*.{h}"
|
||||||
|
|
||||||
openvpn.compiler_flags = "-x objective-c++"
|
mbedtls.compiler_flags = "-DMBEDTLS_MD4_C", "-DMBEDTLS_RELAXED_X509_DATE", "-D_FILE_OFFSET_BITS=64"
|
||||||
|
end
|
||||||
|
|
||||||
openvpn.xcconfig = {
|
s.subspec "OpenVPN3" do |openvpn|
|
||||||
"HEADER_SEARCH_PATHS" => "${PODS_TARGET_SRCROOT}/#{openvpn_path}/**",
|
openvpn.preserve_paths = "#{openvpn_path}/openvpn/**/*.hpp", "#{openvpn_path}/client/*.{hpp,cpp}"
|
||||||
"OTHER_CPLUSPLUSFLAGS" => "$(OTHER_CFLAGS) -DUSE_ASIO -DUSE_ASIO_THREADLOCAL -DASIO_STANDALONE -DASIO_NO_DEPRECATED -DASIO_HAS_STD_STRING_VIEW -DHAVE_LZ4 -DUSE_MBEDTLS -DOPENVPN_FORCE_TUN_NULL -DUSE_TUN_BUILDER"
|
end
|
||||||
}
|
|
||||||
|
s.subspec "OpenVPNClient" do |client|
|
||||||
|
client.source_files = "#{client_path}/library/*.{mm}", "#{client_path}/include/*.{hpp}"
|
||||||
|
client.private_header_files = "#{client_path}/include/*.{hpp}"
|
||||||
|
|
||||||
|
client.compiler_flags = "-x objective-c++", "-DUSE_ASIO", "-DUSE_ASIO_THREADLOCAL", "-DASIO_STANDALONE", "-DASIO_NO_DEPRECATED", "-DASIO_HAS_STD_STRING_VIEW", "-DHAVE_LZ4", "-DUSE_MBEDTLS", "-DOPENVPN_FORCE_TUN_NULL", "-DUSE_TUN_BUILDER"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,7 +15,9 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>0.3.0</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
26
OpenVPNAdapter.xcodeproj/OpenVPNAdapter_Info.plist
Normal file
26
OpenVPNAdapter.xcodeproj/OpenVPNAdapter_Info.plist
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>$(MARKETING_VERSION)</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string></string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
26
OpenVPNAdapter.xcodeproj/OpenVPNClient_Info.plist
Normal file
26
OpenVPNAdapter.xcodeproj/OpenVPNClient_Info.plist
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>$(MARKETING_VERSION)</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string></string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
26
OpenVPNAdapter.xcodeproj/mbedTLS_Info.plist
Normal file
26
OpenVPNAdapter.xcodeproj/mbedTLS_Info.plist
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>$(MARKETING_VERSION)</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string></string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,6 @@
|
|||||||
<Workspace
|
<Workspace
|
||||||
version = "1.0">
|
version = "1.0">
|
||||||
<FileRef
|
<FileRef
|
||||||
location = "self:/Users/ss.abramchuk/Sources.localized/open-source.localized/openvpn-adapter/OpenVPNAdapter.xcodeproj">
|
location = "self:">
|
||||||
</FileRef>
|
</FileRef>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict/>
|
<dict>
|
||||||
|
<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
|
||||||
|
<false/>
|
||||||
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<Scheme
|
|
||||||
LastUpgradeVersion = "1020"
|
|
||||||
version = "1.3">
|
|
||||||
<BuildAction
|
|
||||||
parallelizeBuildables = "YES"
|
|
||||||
buildImplicitDependencies = "YES">
|
|
||||||
<BuildActionEntries>
|
|
||||||
<BuildActionEntry
|
|
||||||
buildForTesting = "YES"
|
|
||||||
buildForRunning = "YES"
|
|
||||||
buildForProfiling = "YES"
|
|
||||||
buildForArchiving = "YES"
|
|
||||||
buildForAnalyzing = "YES">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D"
|
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
|
||||||
BlueprintName = "OpenVPNAdapter macOS"
|
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</BuildActionEntry>
|
|
||||||
</BuildActionEntries>
|
|
||||||
</BuildAction>
|
|
||||||
<TestAction
|
|
||||||
buildConfiguration = "Debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
codeCoverageEnabled = "YES"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "NO">
|
|
||||||
<Testables>
|
|
||||||
<TestableReference
|
|
||||||
skipped = "NO">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "C9D2ABF21EA212A3007EDF9D"
|
|
||||||
BuildableName = "OpenVPNAdapterTests.xctest"
|
|
||||||
BlueprintName = "OpenVPNAdapter macOS Tests"
|
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</TestableReference>
|
|
||||||
</Testables>
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D"
|
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
|
||||||
BlueprintName = "OpenVPNAdapter macOS"
|
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
|
||||||
<LaunchAction
|
|
||||||
buildConfiguration = "Debug"
|
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
|
||||||
launchStyle = "0"
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
ignoresPersistentStateOnLaunch = "NO"
|
|
||||||
debugDocumentVersioning = "YES"
|
|
||||||
debugServiceExtension = "internal"
|
|
||||||
allowLocationSimulation = "YES">
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D"
|
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
|
||||||
BlueprintName = "OpenVPNAdapter macOS"
|
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
|
||||||
<ProfileAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
|
||||||
savedToolIdentifier = ""
|
|
||||||
useCustomWorkingDirectory = "NO"
|
|
||||||
debugDocumentVersioning = "YES">
|
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "C9D2ABD81EA20F99007EDF9D"
|
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
|
||||||
BlueprintName = "OpenVPNAdapter macOS"
|
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
</ProfileAction>
|
|
||||||
<AnalyzeAction
|
|
||||||
buildConfiguration = "Debug">
|
|
||||||
</AnalyzeAction>
|
|
||||||
<ArchiveAction
|
|
||||||
buildConfiguration = "Release"
|
|
||||||
revealArchiveInOrganizer = "YES">
|
|
||||||
</ArchiveAction>
|
|
||||||
</Scheme>
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1020"
|
LastUpgradeVersion = "9999"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
@@ -14,9 +14,51 @@
|
|||||||
buildForAnalyzing = "YES">
|
buildForAnalyzing = "YES">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "C9BB475B1E71663A00F3F98C"
|
BlueprintIdentifier = "OpenVPNAdapter::mbedTLS"
|
||||||
|
BuildableName = "mbedTLS.framework"
|
||||||
|
BlueprintName = "mbedTLS"
|
||||||
|
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "OpenVPNAdapter::LZ4"
|
||||||
|
BuildableName = "LZ4.framework"
|
||||||
|
BlueprintName = "LZ4"
|
||||||
|
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "OpenVPNAdapter::OpenVPNClient"
|
||||||
|
BuildableName = "OpenVPNClient.framework"
|
||||||
|
BlueprintName = "OpenVPNClient"
|
||||||
|
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "OpenVPNAdapter::OpenVPNAdapter"
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
BuildableName = "OpenVPNAdapter.framework"
|
||||||
BlueprintName = "OpenVPNAdapter iOS"
|
BlueprintName = "OpenVPNAdapter"
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildActionEntry>
|
</BuildActionEntry>
|
||||||
@@ -26,31 +68,24 @@
|
|||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
codeCoverageEnabled = "YES"
|
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "C9BB478D1E71821A00F3F98C"
|
BlueprintIdentifier = "C97E5FCC24123F2E005C2EBC"
|
||||||
BuildableName = "OpenVPNAdapterTests.xctest"
|
BuildableName = "OpenVPNAdapterTests.xctest"
|
||||||
BlueprintName = "OpenVPNAdapter iOS Tests"
|
BlueprintName = "OpenVPNAdapterTests"
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
|
<SkippedTests>
|
||||||
|
<Test
|
||||||
|
Identifier = "OpenVPNReachabilityTests">
|
||||||
|
</Test>
|
||||||
|
</SkippedTests>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "C9BB475B1E71663A00F3F98C"
|
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
|
||||||
BlueprintName = "OpenVPNAdapter iOS"
|
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
@@ -62,17 +97,6 @@
|
|||||||
debugDocumentVersioning = "YES"
|
debugDocumentVersioning = "YES"
|
||||||
debugServiceExtension = "internal"
|
debugServiceExtension = "internal"
|
||||||
allowLocationSimulation = "YES">
|
allowLocationSimulation = "YES">
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "C9BB475B1E71663A00F3F98C"
|
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
|
||||||
BlueprintName = "OpenVPNAdapter iOS"
|
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<AdditionalOptions>
|
|
||||||
</AdditionalOptions>
|
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
@@ -83,9 +107,9 @@
|
|||||||
<MacroExpansion>
|
<MacroExpansion>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "C9BB475B1E71663A00F3F98C"
|
BlueprintIdentifier = "OpenVPNAdapter::OpenVPNClient"
|
||||||
BuildableName = "OpenVPNAdapter.framework"
|
BuildableName = "OpenVPNClient.framework"
|
||||||
BlueprintName = "OpenVPNAdapter iOS"
|
BlueprintName = "OpenVPNClient"
|
||||||
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
ReferencedContainer = "container:OpenVPNAdapter.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</MacroExpansion>
|
</MacroExpansion>
|
||||||
67
Package.swift
Normal file
67
Package.swift
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
// swift-tools-version:5.1
|
||||||
|
|
||||||
|
import PackageDescription
|
||||||
|
|
||||||
|
let package = Package(
|
||||||
|
name: "OpenVPNAdapter",
|
||||||
|
platforms: [
|
||||||
|
.iOS("9.0"),
|
||||||
|
.macOS("10.11"),
|
||||||
|
],
|
||||||
|
products: [
|
||||||
|
.library(name: "OpenVPNAdapter", type: .static, targets: ["OpenVPNAdapter"]),
|
||||||
|
],
|
||||||
|
targets: [
|
||||||
|
.target(
|
||||||
|
name: "OpenVPNAdapter",
|
||||||
|
dependencies: [
|
||||||
|
.target(name: "mbedTLS"),
|
||||||
|
.target(name: "OpenVPNClient")
|
||||||
|
],
|
||||||
|
sources: ["library"],
|
||||||
|
cxxSettings: [
|
||||||
|
.headerSearchPath("../ASIO/asio/include"),
|
||||||
|
.headerSearchPath("../OpenVPN3"),
|
||||||
|
.define("USE_ASIO")
|
||||||
|
]
|
||||||
|
),
|
||||||
|
.target(
|
||||||
|
name: "LZ4",
|
||||||
|
sources: ["lib"],
|
||||||
|
cSettings: [
|
||||||
|
.define("XXH_NAMESPACE", to: "LZ4_")
|
||||||
|
]
|
||||||
|
),
|
||||||
|
.target(
|
||||||
|
name: "mbedTLS",
|
||||||
|
sources: ["library"],
|
||||||
|
cSettings: [
|
||||||
|
.define("MBEDTLS_MD4_C"),
|
||||||
|
.define("MBEDTLS_RELAXED_X509_DATE"),
|
||||||
|
.define("_FILE_OFFSET_BITS", to: "64"),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
.target(
|
||||||
|
name: "OpenVPNClient",
|
||||||
|
dependencies: [
|
||||||
|
.target(name: "LZ4"),
|
||||||
|
.target(name: "mbedTLS")
|
||||||
|
],
|
||||||
|
sources: ["library"],
|
||||||
|
cxxSettings: [
|
||||||
|
.headerSearchPath("../ASIO/asio/include"),
|
||||||
|
.headerSearchPath("../OpenVPN3"),
|
||||||
|
.define("USE_ASIO"),
|
||||||
|
.define("USE_ASIO_THREADLOCAL"),
|
||||||
|
.define("ASIO_STANDALONE"),
|
||||||
|
.define("ASIO_NO_DEPRECATED"),
|
||||||
|
.define("ASIO_HAS_STD_STRING_VIEW"),
|
||||||
|
.define("USE_MBEDTLS"),
|
||||||
|
.define("HAVE_LZ4"),
|
||||||
|
.define("OPENVPN_FORCE_TUN_NULL"),
|
||||||
|
.define("USE_TUN_BUILDER")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
],
|
||||||
|
cxxLanguageStandard: .gnucxx14
|
||||||
|
)
|
||||||
42
README.md
42
README.md
@@ -3,8 +3,10 @@
|
|||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|

|
||||||
|

|
||||||

|

|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
@@ -16,7 +18,7 @@ The framework is designed to use in conjunction with [`NetworkExtension`](https:
|
|||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
- iOS 9.0+ or macOS 10.11+
|
- iOS 9.0+ or macOS 10.11+
|
||||||
- Xcode 9.0+
|
- Xcode 11.0+
|
||||||
|
|
||||||
### Carthage
|
### Carthage
|
||||||
To install OpenVPNAdapter with Carthage, add the following line to your `Cartfile`.
|
To install OpenVPNAdapter with Carthage, add the following line to your `Cartfile`.
|
||||||
@@ -33,12 +35,15 @@ To install OpenVPNAdapter with Cocoapods, add the following lines to your `Podfi
|
|||||||
```ruby
|
```ruby
|
||||||
target 'Your Target Name' do
|
target 'Your Target Name' do
|
||||||
use_frameworks!
|
use_frameworks!
|
||||||
pod 'OpenVPNAdapter', :git => 'https://github.com/ss-abramchuk/OpenVPNAdapter.git', :tag => '0.3.0'
|
pod 'OpenVPNAdapter', :git => 'https://github.com/ss-abramchuk/OpenVPNAdapter.git', :tag => '0.7.0'
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
And run `$ pod install`.
|
And run `$ pod install`.
|
||||||
|
|
||||||
|
### Swift Package Manager
|
||||||
|
Add `OpenVPNAdapter` package to your project using File > Swift Packages > Add Package Dependency menu. Xcode 11 will automatically retrieve all necessary dependencies. In addition to that you need to add `SystemConfiguration` framework to the Frameworks and Libraries. If you work on iOS project add `UIKit` as well.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
At first, you need to add a Packet Tunnel Provider extension to the project and configure provision profiles for both the container app and the extension. There are official documentation and many tutorials describing how to do it so we won't dwell on this in detail.
|
At first, you need to add a Packet Tunnel Provider extension to the project and configure provision profiles for both the container app and the extension. There are official documentation and many tutorials describing how to do it so we won't dwell on this in detail.
|
||||||
|
|
||||||
@@ -136,6 +141,11 @@ Packet Tunnel Provider extension uses [`NEPacketTunnelProvider`](https://develop
|
|||||||
import NetworkExtension
|
import NetworkExtension
|
||||||
import OpenVPNAdapter
|
import OpenVPNAdapter
|
||||||
|
|
||||||
|
// Extend NEPacketTunnelFlow to adopt OpenVPNAdapterPacketFlow protocol so that
|
||||||
|
// `self.packetFlow` could be sent to `completionHandler` callback of OpenVPNAdapterDelegate
|
||||||
|
// method openVPNAdapter(openVPNAdapter:configureTunnelWithNetworkSettings:completionHandler).
|
||||||
|
extension NEPacketTunnelFlow: OpenVPNAdapterPacketFlow {}
|
||||||
|
|
||||||
class PacketTunnelProvider: NEPacketTunnelProvider {
|
class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
|
|
||||||
lazy var vpnAdapter: OpenVPNAdapter = {
|
lazy var vpnAdapter: OpenVPNAdapter = {
|
||||||
@@ -177,17 +187,20 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
// Additional parameters as key:value pairs may be provided here
|
// Additional parameters as key:value pairs may be provided here
|
||||||
]
|
]
|
||||||
|
|
||||||
|
// Uncomment this line if you want to keep TUN interface active during pauses or reconnections
|
||||||
|
// configuration.tunPersist = true
|
||||||
|
|
||||||
// Apply OpenVPN configuration
|
// Apply OpenVPN configuration
|
||||||
let properties: OpenVPNProperties
|
let evaluation: OpenVPNConfigurationEvaluation
|
||||||
do {
|
do {
|
||||||
properties = try vpnAdapter.apply(configuration: configuration)
|
evaluation = try vpnAdapter.apply(configuration: configuration)
|
||||||
} catch {
|
} catch {
|
||||||
completionHandler(error)
|
completionHandler(error)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Provide credentials if needed
|
// Provide credentials if needed
|
||||||
if !properties.autologin {
|
if !evaluation.autologin {
|
||||||
// If your VPN configuration requires user credentials you can provide them by
|
// If your VPN configuration requires user credentials you can provide them by
|
||||||
// `protocolConfiguration.username` and `protocolConfiguration.passwordReference`
|
// `protocolConfiguration.username` and `protocolConfiguration.passwordReference`
|
||||||
// properties. It is recommended to use persistent keychain reference to a keychain
|
// properties. It is recommended to use persistent keychain reference to a keychain
|
||||||
@@ -218,13 +231,13 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
// WiFi the adapter still uses cellular data. Changing reachability forces
|
// WiFi the adapter still uses cellular data. Changing reachability forces
|
||||||
// reconnection so the adapter will use actual connection.
|
// reconnection so the adapter will use actual connection.
|
||||||
vpnReachability.startTracking { [weak self] status in
|
vpnReachability.startTracking { [weak self] status in
|
||||||
guard status != .notReachable else { return }
|
guard status == .reachableViaWiFi else { return }
|
||||||
self?.vpnAdapter.reconnect(interval: 5)
|
self?.vpnAdapter.reconnect(interval: 5)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establish connection and wait for .connected event
|
// Establish connection and wait for .connected event
|
||||||
startHandler = completionHandler
|
startHandler = completionHandler
|
||||||
vpnAdapter.connect()
|
vpnAdapter.connect(using: packetFlow)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {
|
||||||
@@ -247,15 +260,13 @@ extension PacketTunnelProvider: OpenVPNAdapterDelegate {
|
|||||||
// `OpenVPNAdapterPacketFlow` method signatures are similar to `NEPacketTunnelFlow` so
|
// `OpenVPNAdapterPacketFlow` method signatures are similar to `NEPacketTunnelFlow` so
|
||||||
// you can just extend that class to adopt `OpenVPNAdapterPacketFlow` protocol and
|
// you can just extend that class to adopt `OpenVPNAdapterPacketFlow` protocol and
|
||||||
// send `self.packetFlow` to `completionHandler` callback.
|
// send `self.packetFlow` to `completionHandler` callback.
|
||||||
func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, configureTunnelWithNetworkSettings networkSettings: NEPacketTunnelNetworkSettings?, completionHandler: @escaping (OpenVPNAdapterPacketFlow?) -> Void) {
|
func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, configureTunnelWithNetworkSettings networkSettings: NEPacketTunnelNetworkSettings?, completionHandler: @escaping (Error?) -> Void) {
|
||||||
// In order to direct all DNS queries first to the VPN DNS servers before the primary DNS servers
|
// In order to direct all DNS queries first to the VPN DNS servers before the primary DNS servers
|
||||||
// send empty string to NEDNSSettings.matchDomains
|
// send empty string to NEDNSSettings.matchDomains
|
||||||
networkSettings?.dnsSettings?.matchDomains = [""]
|
networkSettings?.dnsSettings?.matchDomains = [""]
|
||||||
|
|
||||||
// Specify the network settings for the current tunneling session.
|
// Set the network settings for the current tunneling session.
|
||||||
setTunnelNetworkSettings(settings) { (error) in
|
setTunnelNetworkSettings(networkSettings, completionHandler: completionHandler)
|
||||||
completionHandler(error == nil ? self.packetFlow : nil)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process events returned by the OpenVPN library
|
// Process events returned by the OpenVPN library
|
||||||
@@ -314,11 +325,6 @@ extension PacketTunnelProvider: OpenVPNAdapterDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extend NEPacketTunnelFlow to adopt OpenVPNAdapterPacketFlow protocol so that
|
|
||||||
// `self.packetFlow` could be sent to `completionHandler` callback of OpenVPNAdapterDelegate
|
|
||||||
// method openVPNAdapter(openVPNAdapter:configureTunnelWithNetworkSettings:completionHandler).
|
|
||||||
extension NEPacketTunnelFlow: OpenVPNAdapterPacketFlow {}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|||||||
19
Scripts/apply_patches.sh
Executable file
19
Scripts/apply_patches.sh
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
. functions.sh
|
||||||
|
|
||||||
|
ASIO_SRC_DIR="../Sources/ASIO"
|
||||||
|
ASIO_PATCH_DIR="../Sources/OpenVPN3/deps/asio/patches"
|
||||||
|
|
||||||
|
MBEDTLS_SRC_DIR="../Sources/mbedTLS"
|
||||||
|
MBEDTLS_PATCH_DIR="../Sources/OpenVPN3/deps/mbedtls/patches"
|
||||||
|
|
||||||
|
if [ "$1" = "--reverse" ]; then
|
||||||
|
reverse_patches ${ASIO_SRC_DIR} ${ASIO_PATCH_DIR}
|
||||||
|
reverse_patches ${MBEDTLS_SRC_DIR} ${MBEDTLS_PATCH_DIR}
|
||||||
|
else
|
||||||
|
apply_patches ${ASIO_SRC_DIR} ${ASIO_PATCH_DIR}
|
||||||
|
apply_patches ${MBEDTLS_SRC_DIR} ${MBEDTLS_PATCH_DIR}
|
||||||
|
fi
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
# Your OpenVPN username
|
|
||||||
if ENV["OPENVPN_USERNAME"].nil?
|
|
||||||
ENV["OPENVPN_USERNAME"] = "Username"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Your OpenVPN password
|
|
||||||
if ENV["OPENVPN_PASSWORD"].nil?
|
|
||||||
ENV["OPENVPN_PASSWORD"] = "Password"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Your OpenVPN configuration
|
|
||||||
if ENV["OPENVPN_CONFIGURATION"].nil?
|
|
||||||
ENV["OPENVPN_CONFIGURATION"] = <<~END
|
|
||||||
client
|
|
||||||
dev tun
|
|
||||||
proto udp
|
|
||||||
|
|
||||||
remote X.X.X.X 1194
|
|
||||||
|
|
||||||
remote-random
|
|
||||||
resolv-retry infinite
|
|
||||||
nobind
|
|
||||||
cipher AES-256-CBC
|
|
||||||
auth SHA512
|
|
||||||
comp-lzo no
|
|
||||||
verb 3
|
|
||||||
|
|
||||||
tun-mtu 1500
|
|
||||||
tun-mtu-extra 32
|
|
||||||
mssfix 1450
|
|
||||||
persist-key
|
|
||||||
persist-tun
|
|
||||||
|
|
||||||
reneg-sec 0
|
|
||||||
|
|
||||||
remote-cert-tls server
|
|
||||||
auth-user-pass
|
|
||||||
pull
|
|
||||||
fast-io
|
|
||||||
|
|
||||||
<ca>
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
...
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
</ca>
|
|
||||||
|
|
||||||
key-direction 1
|
|
||||||
|
|
||||||
<tls-auth>
|
|
||||||
# 2048 bit OpenVPN static key
|
|
||||||
-----BEGIN OpenVPN Static key V1-----
|
|
||||||
...
|
|
||||||
-----END OpenVPN Static key V1-----
|
|
||||||
</tls-auth>
|
|
||||||
END
|
|
||||||
end
|
|
||||||
|
|
||||||
if ENV["OPENVPN_REMOTE_HOST"].nil?
|
|
||||||
ENV["OPENVPN_REMOTE_HOST"] = "Remote Host Address"
|
|
||||||
end
|
|
||||||
|
|
||||||
if ENV["OPENVPN_REMOTE_PORT"].nil?
|
|
||||||
ENV["OPENVPN_REMOTE_PORT"] = "Remote Host Port"
|
|
||||||
end
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
environment_file = File.join(ENV["SRCROOT"], "Scripts", "environment.rb")
|
|
||||||
if File.exist?(environment_file)
|
|
||||||
require "#{environment_file}"
|
|
||||||
end
|
|
||||||
|
|
||||||
require "erb"
|
|
||||||
|
|
||||||
if ENV["OPENVPN_USERNAME"].nil? || ENV["OPENVPN_PASSWORD"].nil? || ENV["OPENVPN_CONFIGURATION"].nil?
|
|
||||||
puts "warning: VPN profile data is missing, you need to fill VPNProfile.swift manually."
|
|
||||||
exit(true)
|
|
||||||
end
|
|
||||||
|
|
||||||
template_file = File.join(ENV["SRCROOT"], "Scripts", "vpn_profile_template.erb")
|
|
||||||
unless File.exist?(template_file)
|
|
||||||
puts "error: Template file does not exist."
|
|
||||||
exit(false)
|
|
||||||
end
|
|
||||||
|
|
||||||
output_file = File.join(ENV["SRCROOT"], "Tests", "VPNProfile.swift")
|
|
||||||
unless File.exist?(output_file)
|
|
||||||
puts "error: Output file does not exist."
|
|
||||||
exit(false)
|
|
||||||
end
|
|
||||||
|
|
||||||
OPENVPN_USERNAME = ENV["OPENVPN_USERNAME"]
|
|
||||||
OPENVPN_PASSWORD = ENV["OPENVPN_PASSWORD"]
|
|
||||||
OPENVPN_CONFIGURATION = ENV["OPENVPN_CONFIGURATION"]
|
|
||||||
OPENVPN_REMOTE_HOST = ENV["OPENVPN_REMOTE_HOST"]
|
|
||||||
OPENVPN_REMOTE_PORT = ENV["OPENVPN_REMOTE_PORT"]
|
|
||||||
|
|
||||||
template_content = File.read(template_file)
|
|
||||||
erb_template = ERB.new(template_content, nil, ">")
|
|
||||||
|
|
||||||
result = erb_template.result
|
|
||||||
File.write(output_file, result)
|
|
||||||
37
Scripts/functions.sh
Normal file
37
Scripts/functions.sh
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
function apply_patches()
|
||||||
|
{
|
||||||
|
DEP_SRC_DIR=$1
|
||||||
|
DEP_PATCH_DIR=$2
|
||||||
|
|
||||||
|
CURRENT_DIR=$(pwd)
|
||||||
|
|
||||||
|
pushd ${CURRENT_DIR}
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
|
||||||
|
for file in ${CURRENT_DIR}/${DEP_PATCH_DIR}/*.patch; do
|
||||||
|
echo Applying patch: $file
|
||||||
|
git apply --directory ${CURRENT_DIR}/${DEP_SRC_DIR} --unsafe-path $file
|
||||||
|
done
|
||||||
|
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
function reverse_patches()
|
||||||
|
{
|
||||||
|
DEP_SRC_DIR=$1
|
||||||
|
DEP_PATCH_DIR=$2
|
||||||
|
|
||||||
|
CURRENT_DIR=$(pwd)
|
||||||
|
|
||||||
|
pushd ${CURRENT_DIR}
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
|
||||||
|
for file in ${CURRENT_DIR}/${DEP_PATCH_DIR}/*.patch; do
|
||||||
|
echo Reverse patch: $file
|
||||||
|
git apply --reverse --directory ${CURRENT_DIR}/${DEP_SRC_DIR} --unsafe-path $file
|
||||||
|
done
|
||||||
|
|
||||||
|
popd
|
||||||
|
}
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
//
|
|
||||||
// VPNProfile.swift
|
|
||||||
// OpenVPNAdapter
|
|
||||||
//
|
|
||||||
// Created by Sergey Abramchuk on 27/09/2018.
|
|
||||||
//
|
|
||||||
// Do not commit changes of this file to the repo!
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
|
|
||||||
struct VPNProfile {
|
|
||||||
|
|
||||||
static let username: String = "<%= OPENVPN_USERNAME %>"
|
|
||||||
static let password: String = "<%= OPENVPN_PASSWORD %>"
|
|
||||||
|
|
||||||
static let configuration: String = """
|
|
||||||
<% OPENVPN_CONFIGURATION.each_line do |line| %>
|
|
||||||
<%= line %>
|
|
||||||
<% end %>
|
|
||||||
"""
|
|
||||||
|
|
||||||
static let remoteHost: String = "<%= OPENVPN_REMOTE_HOST %>"
|
|
||||||
static let remotePort: Int = <%= OPENVPN_REMOTE_PORT %>
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
asio version 1.13.0
|
asio version 1.14.0
|
||||||
Released Tuesday, 12 March 2019.
|
Released Sunday, 14 April 2019.
|
||||||
|
|
||||||
See doc/index.html for API documentation and a tutorial.
|
See doc/index.html for API documentation and a tutorial.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
AC_INIT(asio, [1.13.0])
|
AC_INIT(asio, [1.14.0])
|
||||||
AC_CONFIG_SRCDIR(include/asio.hpp)
|
AC_CONFIG_SRCDIR(include/asio.hpp)
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
AM_INIT_AUTOMAKE([tar-ustar])
|
AM_INIT_AUTOMAKE([tar-ustar])
|
||||||
@@ -950,6 +950,8 @@ public:
|
|||||||
{
|
{
|
||||||
const protocol_type protocol = peer_endpoint.protocol();
|
const protocol_type protocol = peer_endpoint.protocol();
|
||||||
impl_.get_service().open(impl_.get_implementation(), protocol, open_ec);
|
impl_.get_service().open(impl_.get_implementation(), protocol, open_ec);
|
||||||
|
if (!open_ec)
|
||||||
|
async_connect_post_open(protocol, open_ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return async_initiate<ConnectHandler, void (asio::error_code)>(
|
return async_initiate<ConnectHandler, void (asio::error_code)>(
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user