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.xcframework/Info.plist b/IPtProxy.xcframework/Info.plist index 48ebd664470add9644e1cc4eb44221dc23a80802..12a4244c73b1e7f905caca0b6eeac40ed4ca104c 100644 --- a/IPtProxy.xcframework/Info.plist +++ b/IPtProxy.xcframework/Info.plist @@ -6,7 +6,7 @@ <array> <dict> <key>LibraryIdentifier</key> - <string>ios-arm64_x86_64-simulator</string> + <string>macos-arm64_x86_64</string> <key>LibraryPath</key> <string>IPtProxy.framework</string> <key>SupportedArchitectures</key> @@ -15,9 +15,7 @@ <string>x86_64</string> </array> <key>SupportedPlatform</key> - <string>ios</string> - <key>SupportedPlatformVariant</key> - <string>simulator</string> + <string>macos</string> </dict> <dict> <key>LibraryIdentifier</key> @@ -33,7 +31,7 @@ </dict> <dict> <key>LibraryIdentifier</key> - <string>macos-arm64_x86_64</string> + <string>ios-arm64_x86_64-simulator</string> <key>LibraryPath</key> <string>IPtProxy.framework</string> <key>SupportedArchitectures</key> @@ -42,7 +40,9 @@ <string>x86_64</string> </array> <key>SupportedPlatform</key> - <string>macos</string> + <string>ios</string> + <key>SupportedPlatformVariant</key> + <string>simulator</string> </dict> </array> <key>CFBundlePackageType</key> diff --git a/obfs4.patch b/obfs4.patch index f10da5755ca57739cc7b686076bca1435183b48e..09ad0a43869db5120b468b989ac0b23547843c1b 100644 --- a/obfs4.patch +++ b/obfs4.patch @@ -1,5 +1,5 @@ diff --git a/obfs4proxy/obfs4proxy.go b/obfs4proxy/obfs4proxy.go -index f295926..5a2ce99 100644 +index f295926..df9627e 100644 --- a/obfs4proxy/obfs4proxy.go +++ b/obfs4proxy/obfs4proxy.go @@ -27,10 +27,9 @@ @@ -22,15 +22,14 @@ index f295926..5a2ce99 100644 "sync" "syscall" -@@ -51,6 +51,7 @@ import ( - - const ( +@@ -53,12 +53,14 @@ const ( obfs4proxyVersion = "0.0.14" -+ Obfs4proxyVersion = obfs4proxyVersion 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 f295926..5a2ce99 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 f295926..5a2ce99 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 f295926..5a2ce99 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 f295926..5a2ce99 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 f295926..5a2ce99 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) }