diff --git a/CHANGELOG.md b/CHANGELOG.md index f2e3e35935808bce1511ef1ba48fb0d4b743cc45..6afc27ab495b0f1997abd91d66219672a1a521e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # IPtProxy Changelog +## 1.8.1 +- Added `Obfs4proxyLogFile` which returns the static log file name of Obfs4proxy. + +## 1.8.0 +- Updated Obfs4proxy to latest version 0.0.14. +- Updated Snowflake to latest version 2.3.1. +- Added support for macOS 11. +- Fixed warning in Xcode 14. + ## 1.7.1 - Fixed Snowflake Proxy support. diff --git a/IPtProxy-sources.jar b/IPtProxy-sources.jar index 7b86497135e18d4b69280959ba858a5f4d6c6b19..4965f85137a12f5db578e346fdd0e6a49a78c8bb 100644 Binary files a/IPtProxy-sources.jar and b/IPtProxy-sources.jar differ diff --git a/IPtProxy.aar b/IPtProxy.aar index 0b1a777b1ed672e0ffd6a6a400ed7dc00f101e01..499e140280cbee4fd54c151beefacb6f9688a678 100644 Binary files a/IPtProxy.aar and b/IPtProxy.aar differ diff --git a/IPtProxy.go/IPtProxy.go b/IPtProxy.go/IPtProxy.go index c2b9b2f5b1a5511ebf5a5f80fa839b40fb0c41c5..9fea4f39684cab80ab59fc3e0ee644be96e03fc5 100644 --- a/IPtProxy.go/IPtProxy.go +++ b/IPtProxy.go/IPtProxy.go @@ -9,10 +9,11 @@ import ( "log" "net" "os" + "path/filepath" "runtime" + "runtime/debug" "strconv" "time" - "runtime/debug" ) var meekPort = 47000 @@ -89,37 +90,46 @@ func init() { StateLocation = os.Getenv("TMPDIR") } - StateLocation += "/pt_state" + StateLocation = filepath.Join(StateLocation, "pt_state") } // Obfs4ProxyVersion - The version of Obfs4Proxy bundled with IPtProxy. // //goland:noinspection GoUnusedExportedFunction func Obfs4ProxyVersion() string { - return obfs4proxy.Obfs4proxyVersion + return obfs4proxy.Obfs4proxyVersion } -// SnowflakeVersion - The version of Snowflake bundled with IPtProxy. +// SnowflakeVersion - The version of Snowflake bundled with IPtProxy. // //goland:noinspection GoUnusedExportedFunction func SnowflakeVersion() string { - bi, ok := debug.ReadBuildInfo() - if !ok { - log.Printf("Failed to read build info") - return "" - } - - for _, dep := range bi.Deps { - if dep.Path == "git.torproject.org/pluggable-transports/snowflake.git/v2" { - if dep.Version[0:1] == "v" { - return dep.Version[1:len(dep.Version)] - } else { - return dep.Version - } - } - } - - return "" + bi, ok := debug.ReadBuildInfo() + if !ok { + log.Printf("Failed to read build info") + return "" + } + + for _, dep := range bi.Deps { + if dep.Path == "git.torproject.org/pluggable-transports/snowflake.git/v2" { + if dep.Version[0:1] == "v" { + return dep.Version[1:len(dep.Version)] + } else { + return dep.Version + } + } + } + + return "" +} + +// Obfs4proxyLogFile - The log file name used by Obfs4proxy. +// +// The Obfs4proxy log file can be found at `filepath.Join(StateLocation, Obfs4proxyLogFile())`. +// +//goland:noinspection GoUnusedExportedFunction +func Obfs4proxyLogFile() string { + return obfs4proxy.Obfs4proxyLogFile } // StartObfs4Proxy - Start the Obfs4Proxy. @@ -136,6 +146,7 @@ func SnowflakeVersion() string { // @param proxy HTTP, SOCKS4 or SOCKS5 proxy to be used behind Obfs4proxy. E.g. "socks5://127.0.0.1:12345" // // @return Port number where Obfs4Proxy will listen on for Obfs4(!), if no error happens during start up. +// // If you need the other ports, check MeekPort, Obfs2Port, Obfs3Port and ScramblesuitPort properties! // //goland:noinspection GoUnusedExportedFunction @@ -217,7 +228,8 @@ func StopObfs4Proxy() { // @param front Front domain. // // @param ampCache OPTIONAL. URL of AMP cache to use as a proxy for signaling. -// Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. +// +// Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. // // @param logFile Name of log file. OPTIONAL. Defaults to no log. // @@ -289,8 +301,9 @@ type SnowflakeClientConnected interface { // @param unsafeLogging Prevent logs from being scrubbed. // // @param clientConnected A delegate which is called when a client successfully connected. -// Will be called on its own thread! You will need to switch to your own UI thread, -// if you want to do UI stuff!! OPTIONAL +// +// Will be called on its own thread! You will need to switch to your own UI thread, +// if you want to do UI stuff!! OPTIONAL // //goland:noinspection GoUnusedExportedFunction func StartSnowflakeProxy(capacity int, broker, relay, stun, natProbe, logFile string, keepLocalAddresses, unsafeLogging bool, clientConnected SnowflakeClientConnected) { @@ -302,16 +315,16 @@ func StartSnowflakeProxy(capacity int, broker, relay, stun, natProbe, logFile st capacity = 0 } - snowflakeProxy = &sfp.SnowflakeProxy { - Capacity: uint(capacity), - STUNURL: stun, - BrokerURL: broker, - KeepLocalAddresses: keepLocalAddresses, - RelayURL: relay, - NATProbeURL: natProbe, - ProxyType: "iptproxy", + snowflakeProxy = &sfp.SnowflakeProxy{ + Capacity: uint(capacity), + STUNURL: stun, + BrokerURL: broker, + KeepLocalAddresses: keepLocalAddresses, + RelayURL: relay, + NATProbeURL: natProbe, + ProxyType: "iptproxy", RelayDomainNamePattern: "snowflake.torproject.net$", - AllowNonTLSRelay: false, + AllowNonTLSRelay: false, ClientConnectedCallback: func() { if clientConnected != nil { clientConnected.Connected() @@ -326,7 +339,7 @@ func StartSnowflakeProxy(capacity int, broker, relay, stun, natProbe, logFile st log.SetFlags(log.LstdFlags | log.LUTC) if logFile != "" { - f, err := os.OpenFile(logFile, os.O_CREATE | os.O_WRONLY | os.O_APPEND, 0600) + f, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) if err != nil { log.Fatal(err) } @@ -352,6 +365,7 @@ func StartSnowflakeProxy(capacity int, broker, relay, stun, natProbe, logFile st func IsSnowflakeProxyRunning() bool { return snowflakeProxy != nil } + // StopSnowflakeProxy - Stop the Snowflake proxy. // //goland:noinspection GoUnusedExportedFunction @@ -364,7 +378,7 @@ func StopSnowflakeProxy() { snowflakeProxy.Stop() }(snowflakeProxy) - snowflakeProxy = nil + snowflakeProxy = nil } // IsPortAvailable - Checks to see if a given port is not in use. @@ -373,7 +387,7 @@ func StopSnowflakeProxy() { func IsPortAvailable(port int) bool { address := net.JoinHostPort("127.0.0.1", strconv.Itoa(port)) - conn, err := net.DialTimeout("tcp", address, 500 * time.Millisecond) + conn, err := net.DialTimeout("tcp", address, 500*time.Millisecond) if err != nil { return true diff --git a/IPtProxy.podspec b/IPtProxy.podspec index 2a0af9dca9abbd86f70bb163dda0260eeee1872a..fca84d2bfd71aa4a3df7c5c05d647deb5d6bc39a 100644 --- a/IPtProxy.podspec +++ b/IPtProxy.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'IPtProxy' - s.version = '1.7.1' + s.version = '1.8.1' s.summary = 'Obfs4proxy and Snowflake Pluggable Transports for iOS and macOS' s.description = <<-DESC @@ -37,8 +37,8 @@ Pod::Spec.new do |s| | Transport | Version | |------------|--------:| - | Obfs4proxy | 0.0.13 | - | Snowflake | 2.3.0 | + | Obfs4proxy | 0.0.14 | + | Snowflake | 2.3.1 | DESC @@ -49,7 +49,7 @@ Pod::Spec.new do |s| s.social_media_url = 'https://twitter.com/tladesignz' s.ios.deployment_target = '11.0' - s.osx.deployment_target = '12' + s.osx.deployment_target = '11' s.preserve_paths = 'build.sh', '*.patch', 'IPtProxy.go/*' @@ -62,6 +62,7 @@ Pod::Spec.new do |s| :name => 'Go build of IPtProxy.xcframework', :execution_position => :before_compile, :script => 'sh "$PODS_TARGET_SRCROOT/build.sh"', + :output_files => ['$(DERIVED_FILE_DIR)/IPtProxy.xcframework'], } # This will only work, if `prepare_command` was successful, or if you diff --git a/IPtProxy.xcframework/Info.plist b/IPtProxy.xcframework/Info.plist index ba015a463cc599e571604feb65d01905df4d8219..12a4244c73b1e7f905caca0b6eeac40ed4ca104c 100644 --- a/IPtProxy.xcframework/Info.plist +++ b/IPtProxy.xcframework/Info.plist @@ -19,30 +19,30 @@ </dict> <dict> <key>LibraryIdentifier</key> - <string>ios-arm64_x86_64-simulator</string> + <string>ios-arm64</string> <key>LibraryPath</key> <string>IPtProxy.framework</string> <key>SupportedArchitectures</key> <array> <string>arm64</string> - <string>x86_64</string> </array> <key>SupportedPlatform</key> <string>ios</string> - <key>SupportedPlatformVariant</key> - <string>simulator</string> </dict> <dict> <key>LibraryIdentifier</key> - <string>ios-arm64</string> + <string>ios-arm64_x86_64-simulator</string> <key>LibraryPath</key> <string>IPtProxy.framework</string> <key>SupportedArchitectures</key> <array> <string>arm64</string> + <string>x86_64</string> </array> <key>SupportedPlatform</key> <string>ios</string> + <key>SupportedPlatformVariant</key> + <string>simulator</string> </dict> </array> <key>CFBundlePackageType</key> diff --git a/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h b/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h index 09324fabf4e99595e8897ffff628e5618629eaa7..6868b197003cdba2bf15825a849ea03264ad62de 100644 --- a/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h +++ b/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h @@ -71,6 +71,13 @@ FOUNDATION_EXPORT long IPtProxyObfs4Port(void); */ FOUNDATION_EXPORT NSString* _Nonnull IPtProxyObfs4ProxyVersion(void); +/** + * Obfs4proxyLogFile - The log file name used by Obfs4proxy. + +The Obfs4proxy log file can be found at `filepath.Join(StateLocation, Obfs4proxyLogFile())`. + */ +FOUNDATION_EXPORT NSString* _Nonnull IPtProxyObfs4proxyLogFile(void); + /** * ScramblesuitPort - Port where Obfs4proxy will provide its Scramblesuit service. Only use this property after calling StartObfs4Proxy! It might have changed after that! @@ -84,7 +91,7 @@ Only use this property after calling StartSnowflake! It might have changed after FOUNDATION_EXPORT long IPtProxySnowflakePort(void); /** - * SnowflakeVersion - The version of Snowflake bundled with IPtProxy. + * SnowflakeVersion - The version of Snowflake bundled with IPtProxy. */ FOUNDATION_EXPORT NSString* _Nonnull IPtProxySnowflakeVersion(void); @@ -103,6 +110,7 @@ Only use the port properties after calling this, they might have been changed! @param proxy HTTP, SOCKS4 or SOCKS5 proxy to be used behind Obfs4proxy. E.g. "socks5://127.0.0.1:12345" @return Port number where Obfs4Proxy will listen on for Obfs4(!), if no error happens during start up. + If you need the other ports, check MeekPort, Obfs2Port, Obfs3Port and ScramblesuitPort properties! */ FOUNDATION_EXPORT long IPtProxyStartObfs4Proxy(NSString* _Nullable logLevel, BOOL enableLogging, BOOL unsafeLogging, NSString* _Nullable proxy); @@ -117,7 +125,8 @@ FOUNDATION_EXPORT long IPtProxyStartObfs4Proxy(NSString* _Nullable logLevel, BOO @param front Front domain. @param ampCache OPTIONAL. URL of AMP cache to use as a proxy for signaling. - Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. + + Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. @param logFile Name of log file. OPTIONAL. Defaults to no log. @@ -153,8 +162,9 @@ FOUNDATION_EXPORT long IPtProxyStartSnowflake(NSString* _Nullable ice, NSString* @param unsafeLogging Prevent logs from being scrubbed. @param clientConnected A delegate which is called when a client successfully connected. - Will be called on its own thread! You will need to switch to your own UI thread, - if you want to do UI stuff!! OPTIONAL + + Will be called on its own thread! You will need to switch to your own UI thread, + if you want to do UI stuff!! OPTIONAL */ FOUNDATION_EXPORT void IPtProxyStartSnowflakeProxy(long capacity, NSString* _Nullable broker, NSString* _Nullable relay, NSString* _Nullable stun, NSString* _Nullable natProbe, NSString* _Nullable logFile, BOOL keepLocalAddresses, BOOL unsafeLogging, id<IPtProxySnowflakeClientConnected> _Nullable clientConnected); diff --git a/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/IPtProxy b/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/IPtProxy index b3bbffe0aca39dc79c395501aa6d99b07daf7764..ab6d1f3c4bd58c97be09d5c1da3be007ed41a008 100644 Binary files a/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/IPtProxy and b/IPtProxy.xcframework/ios-arm64/IPtProxy.framework/Versions/A/IPtProxy differ diff --git a/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h b/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h index 09324fabf4e99595e8897ffff628e5618629eaa7..6868b197003cdba2bf15825a849ea03264ad62de 100644 --- a/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h +++ b/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h @@ -71,6 +71,13 @@ FOUNDATION_EXPORT long IPtProxyObfs4Port(void); */ FOUNDATION_EXPORT NSString* _Nonnull IPtProxyObfs4ProxyVersion(void); +/** + * Obfs4proxyLogFile - The log file name used by Obfs4proxy. + +The Obfs4proxy log file can be found at `filepath.Join(StateLocation, Obfs4proxyLogFile())`. + */ +FOUNDATION_EXPORT NSString* _Nonnull IPtProxyObfs4proxyLogFile(void); + /** * ScramblesuitPort - Port where Obfs4proxy will provide its Scramblesuit service. Only use this property after calling StartObfs4Proxy! It might have changed after that! @@ -84,7 +91,7 @@ Only use this property after calling StartSnowflake! It might have changed after FOUNDATION_EXPORT long IPtProxySnowflakePort(void); /** - * SnowflakeVersion - The version of Snowflake bundled with IPtProxy. + * SnowflakeVersion - The version of Snowflake bundled with IPtProxy. */ FOUNDATION_EXPORT NSString* _Nonnull IPtProxySnowflakeVersion(void); @@ -103,6 +110,7 @@ Only use the port properties after calling this, they might have been changed! @param proxy HTTP, SOCKS4 or SOCKS5 proxy to be used behind Obfs4proxy. E.g. "socks5://127.0.0.1:12345" @return Port number where Obfs4Proxy will listen on for Obfs4(!), if no error happens during start up. + If you need the other ports, check MeekPort, Obfs2Port, Obfs3Port and ScramblesuitPort properties! */ FOUNDATION_EXPORT long IPtProxyStartObfs4Proxy(NSString* _Nullable logLevel, BOOL enableLogging, BOOL unsafeLogging, NSString* _Nullable proxy); @@ -117,7 +125,8 @@ FOUNDATION_EXPORT long IPtProxyStartObfs4Proxy(NSString* _Nullable logLevel, BOO @param front Front domain. @param ampCache OPTIONAL. URL of AMP cache to use as a proxy for signaling. - Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. + + Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. @param logFile Name of log file. OPTIONAL. Defaults to no log. @@ -153,8 +162,9 @@ FOUNDATION_EXPORT long IPtProxyStartSnowflake(NSString* _Nullable ice, NSString* @param unsafeLogging Prevent logs from being scrubbed. @param clientConnected A delegate which is called when a client successfully connected. - Will be called on its own thread! You will need to switch to your own UI thread, - if you want to do UI stuff!! OPTIONAL + + Will be called on its own thread! You will need to switch to your own UI thread, + if you want to do UI stuff!! OPTIONAL */ FOUNDATION_EXPORT void IPtProxyStartSnowflakeProxy(long capacity, NSString* _Nullable broker, NSString* _Nullable relay, NSString* _Nullable stun, NSString* _Nullable natProbe, NSString* _Nullable logFile, BOOL keepLocalAddresses, BOOL unsafeLogging, id<IPtProxySnowflakeClientConnected> _Nullable clientConnected); diff --git a/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/IPtProxy b/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/IPtProxy index 5a625f67d1514273850a5201a3ce62453bf66ee7..d375bfaa43f28be1273e217f7582ac1e6b69002a 100644 Binary files a/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/IPtProxy and b/IPtProxy.xcframework/ios-arm64_x86_64-simulator/IPtProxy.framework/Versions/A/IPtProxy differ diff --git a/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h b/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h index 09324fabf4e99595e8897ffff628e5618629eaa7..6868b197003cdba2bf15825a849ea03264ad62de 100644 --- a/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h +++ b/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/Headers/IPtProxy.objc.h @@ -71,6 +71,13 @@ FOUNDATION_EXPORT long IPtProxyObfs4Port(void); */ FOUNDATION_EXPORT NSString* _Nonnull IPtProxyObfs4ProxyVersion(void); +/** + * Obfs4proxyLogFile - The log file name used by Obfs4proxy. + +The Obfs4proxy log file can be found at `filepath.Join(StateLocation, Obfs4proxyLogFile())`. + */ +FOUNDATION_EXPORT NSString* _Nonnull IPtProxyObfs4proxyLogFile(void); + /** * ScramblesuitPort - Port where Obfs4proxy will provide its Scramblesuit service. Only use this property after calling StartObfs4Proxy! It might have changed after that! @@ -84,7 +91,7 @@ Only use this property after calling StartSnowflake! It might have changed after FOUNDATION_EXPORT long IPtProxySnowflakePort(void); /** - * SnowflakeVersion - The version of Snowflake bundled with IPtProxy. + * SnowflakeVersion - The version of Snowflake bundled with IPtProxy. */ FOUNDATION_EXPORT NSString* _Nonnull IPtProxySnowflakeVersion(void); @@ -103,6 +110,7 @@ Only use the port properties after calling this, they might have been changed! @param proxy HTTP, SOCKS4 or SOCKS5 proxy to be used behind Obfs4proxy. E.g. "socks5://127.0.0.1:12345" @return Port number where Obfs4Proxy will listen on for Obfs4(!), if no error happens during start up. + If you need the other ports, check MeekPort, Obfs2Port, Obfs3Port and ScramblesuitPort properties! */ FOUNDATION_EXPORT long IPtProxyStartObfs4Proxy(NSString* _Nullable logLevel, BOOL enableLogging, BOOL unsafeLogging, NSString* _Nullable proxy); @@ -117,7 +125,8 @@ FOUNDATION_EXPORT long IPtProxyStartObfs4Proxy(NSString* _Nullable logLevel, BOO @param front Front domain. @param ampCache OPTIONAL. URL of AMP cache to use as a proxy for signaling. - Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. + + Only needed when you want to do the rendezvous over AMP instead of a domain fronted server. @param logFile Name of log file. OPTIONAL. Defaults to no log. @@ -153,8 +162,9 @@ FOUNDATION_EXPORT long IPtProxyStartSnowflake(NSString* _Nullable ice, NSString* @param unsafeLogging Prevent logs from being scrubbed. @param clientConnected A delegate which is called when a client successfully connected. - Will be called on its own thread! You will need to switch to your own UI thread, - if you want to do UI stuff!! OPTIONAL + + Will be called on its own thread! You will need to switch to your own UI thread, + if you want to do UI stuff!! OPTIONAL */ FOUNDATION_EXPORT void IPtProxyStartSnowflakeProxy(long capacity, NSString* _Nullable broker, NSString* _Nullable relay, NSString* _Nullable stun, NSString* _Nullable natProbe, NSString* _Nullable logFile, BOOL keepLocalAddresses, BOOL unsafeLogging, id<IPtProxySnowflakeClientConnected> _Nullable clientConnected); diff --git a/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/IPtProxy b/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/IPtProxy index 900e6ae88238501126c60d1339d1dd206a40a747..f03392e83307dfd92c7228ce57d2739d1c4d2132 100644 Binary files a/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/IPtProxy and b/IPtProxy.xcframework/macos-arm64_x86_64/IPtProxy.framework/Versions/A/IPtProxy differ diff --git a/README.md b/README.md index dfa06b8cffe800cc266a9b8825d8f7530eadd9e4..1e67c2e557169c43930970cae348a04795b25a03 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ Obfs4proxy and Snowflake Pluggable Transports for iOS, MacOS and Android | Transport | Version | |------------|--------:| -| Obfs4proxy | 0.0.13 | -| Snowflake | 2.3.0 | +| Obfs4proxy | 0.0.14 | +| Snowflake | 2.3.1 | Both Obfs4proxy and Snowflake Pluggable Transports are written in Go, which is a little annoying to use on iOS and Android. @@ -44,11 +44,23 @@ IPtProxy is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your `Podfile`: ```ruby -pod 'IPtProxy', '~> 1.7' +pod 'IPtProxy', '~> 1.8' ``` ### Getting Started +Before using IPtProxy it is recommended to specify a place on disk for the transports +to store their state information and log files. + +By default, a temporary directory is created, but often times, that is not sufficient. + +```swift +let ptDir = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.app")? + .appendingPathComponent("pt_state") + +IPtProxy.setStateLocation(ptDir?.path) +``` + There's a companion library [IPtProxyUI](https://github.com/tladesignz/IPtProxyUI) which explains the use of IPtProxy and provides all the necessary UI and additional information to use this library completely in a Tor context. @@ -62,7 +74,7 @@ IPtProxy is available through [JitPack](https://jitpack.io). To install it, simply add the following line to your `build.gradle` file: ```groovy -implementation 'com.github.tladesignz:IPtProxy:1.7.1' +implementation 'com.github.tladesignz:IPtProxy:1.8.0' ``` And this to your root `build.gradle` at the end of repositories: diff --git a/build.sh b/build.sh index e35e70552ca97b04adc2bd5d2be42efa69fca0b6..f020c4de52b4b4f0b89100e988338879c279487c 100755 --- a/build.sh +++ b/build.sh @@ -34,11 +34,11 @@ else # No .git directory - That's a normal install. git clone https://gitlab.com/yawning/obfs4.git cd obfs4 || exit 1 - git checkout --force --quiet 77af0cba + git checkout --force --quiet 336a71d6 cd .. git clone https://git.torproject.org/pluggable-transports/snowflake.git cd snowflake || exit 1 - git checkout --force --quiet c983c13a + git checkout --force --quiet 36f03dfd cd .. fi @@ -54,6 +54,6 @@ cd IPtProxy.go || exit 1 gomobile init -gomobile bind -target=$TARGET -o ../$OUTPUT -iosversion 11.0 -androidapi 19 -v +MACOSX_DEPLOYMENT_TARGET=11.0 gomobile bind -target=$TARGET -o ../$OUTPUT -iosversion 11.0 -androidapi 19 -v printf '\n\n--- Done.\n\n' diff --git a/jitpack.yml b/jitpack.yml index 85b437188b835da3a8250e2fcaef03aef0ab5aac..884a19830b90b4cd71a313fa2498532043dd4229 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,3 +1,3 @@ install: - FILE="-Dfile=IPtProxy.aar" - - mvn install:install-file $FILE -DgroupId=com.github.tladesignz -DartifactId=IPtProxy -Dversion=1.7.1 -Dpackaging=aar -DgeneratePom=true -Dsources=IPtProxy-sources.jar + - mvn install:install-file $FILE -DgroupId=com.github.tladesignz -DartifactId=IPtProxy -Dversion=1.8.1 -Dpackaging=aar -DgeneratePom=true -Dsources=IPtProxy-sources.jar diff --git a/obfs4 b/obfs4 index 77af0cba934d73c4baeb709560bcfc9a9fbc661c..336a71d6e4cfd2d33e9c57797828007ad74975e9 160000 --- a/obfs4 +++ b/obfs4 @@ -1 +1 @@ -Subproject commit 77af0cba934d73c4baeb709560bcfc9a9fbc661c +Subproject commit 336a71d6e4cfd2d33e9c57797828007ad74975e9 diff --git a/obfs4.patch b/obfs4.patch index 1776f08c010dd12f68a8970344123160c88d28db..09ad0a43869db5120b468b989ac0b23547843c1b 100644 --- a/obfs4.patch +++ b/obfs4.patch @@ -1,5 +1,5 @@ diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go -index d92f5f5..d849b80 100644 +index f295926..df9627e 100644 --- a/obfs4proxy/obfs4proxy.go +++ b/obfs4proxy/obfs4proxy.go @@ -27,10 +27,9 @@ @@ -22,15 +22,14 @@ index d92f5f5..d849b80 100644 "sync" "syscall" -@@ -51,6 +51,7 @@ import ( - - const ( - obfs4proxyVersion = "0.0.13" -+ Obfs4proxyVersion = obfs4proxyVersion +@@ -53,12 +53,14 @@ const ( + obfs4proxyVersion = "0.0.14" obfs4proxyLogFile = "obfs4proxy.log" socksAddr = "127.0.0.1:0" ++ Obfs4proxyVersion = obfs4proxyVersion ++ Obfs4proxyLogFile = obfs4proxyLogFile ) -@@ -58,7 +59,7 @@ const ( + var stateDir string var termMon *termMonitor @@ -39,7 +38,7 @@ index d92f5f5..d849b80 100644 ptClientInfo, err := pt.ClientSetup(transports.Transports()) if err != nil { golog.Fatal(err) -@@ -85,7 +86,20 @@ func clientSetup() (launched bool, listeners []net.Listener) { +@@ -85,7 +87,20 @@ func clientSetup() (launched bool, listeners []net.Listener) { continue } @@ -61,7 +60,7 @@ index d92f5f5..d849b80 100644 if err != nil { _ = pt.CmethodError(name, err.Error()) continue -@@ -304,22 +318,16 @@ func getVersion() string { +@@ -304,22 +319,16 @@ func getVersion() string { return fmt.Sprintf("obfs4proxy-%s", obfs4proxyVersion) } @@ -90,7 +89,7 @@ index d92f5f5..d849b80 100644 if err := log.SetLogLevel(*logLevelStr); err != nil { golog.Fatalf("[ERROR]: %s - failed to set log level: %s", execName, err) } -@@ -338,8 +346,7 @@ func main() { +@@ -338,8 +347,7 @@ func main() { golog.Fatalf("[ERROR]: %s - failed to initialize logging", execName) } if err = transports.Init(); err != nil { @@ -100,7 +99,7 @@ index d92f5f5..d849b80 100644 } log.Noticef("%s - launched", getVersion()) -@@ -347,7 +354,7 @@ func main() { +@@ -347,7 +355,7 @@ func main() { // Do the managed pluggable transport protocol configuration. if isClient { log.Infof("%s - initializing client transport listeners", execName) @@ -109,7 +108,7 @@ index d92f5f5..d849b80 100644 } else { log.Infof("%s - initializing server transport listeners", execName) launched, ptListeners = serverSetup() -@@ -379,3 +386,11 @@ func main() { +@@ -379,3 +387,11 @@ func main() { } termMon.wait(true) } diff --git a/pom.xml b/pom.xml index 1184fa066de6daa5dccd6a49082d055ad7fd664c..c43448aef83ae58f7d9635d9d58dad89c19bbe29 100644 --- a/pom.xml +++ b/pom.xml @@ -5,5 +5,5 @@ <modelVersion>4.0.0</modelVersion> <groupId>com.github.tladesignz</groupId> <artifactId>IPtProxy</artifactId> - <version>1.7.1</version> + <version>1.8.1</version> </project> diff --git a/snowflake b/snowflake index c983c13a84554d0ba1ffcdd054491090c0eafc54..36f03dfd4483922b3e7400dedc71df9cf2f30b6b 160000 --- a/snowflake +++ b/snowflake @@ -1 +1 @@ -Subproject commit c983c13a84554d0ba1ffcdd054491090c0eafc54 +Subproject commit 36f03dfd4483922b3e7400dedc71df9cf2f30b6b