From b25dec12d15ee011590dead64b230d60dfbe4310 Mon Sep 17 00:00:00 2001 From: meeh <meeh@mail.i2p> Date: Thu, 11 Oct 2018 16:58:20 +0000 Subject: [PATCH] OSX Launcher: some changes to the Swift<->Objective-C bridge --- .../I2PLauncher/I2PLauncher-Bridging-Header.h | 3 +- launchers/macosx/SBridge.h | 4 ++- launchers/macosx/SBridge.mm | 29 ++++++++++++++++--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/launchers/macosx/I2PLauncher/I2PLauncher-Bridging-Header.h b/launchers/macosx/I2PLauncher/I2PLauncher-Bridging-Header.h index 1ece6baa92..7afdb2490c 100644 --- a/launchers/macosx/I2PLauncher/I2PLauncher-Bridging-Header.h +++ b/launchers/macosx/I2PLauncher/I2PLauncher-Bridging-Header.h @@ -5,5 +5,4 @@ #import "AppleStuffExceptionHandler.h" #import "AppDelegate.h" #import "RouterTask.h" -#import "Sparkle/SUUpdater.h" - +#import "logger_c.h" diff --git a/launchers/macosx/SBridge.h b/launchers/macosx/SBridge.h index bb0ccde4a8..a45ae3772a 100644 --- a/launchers/macosx/SBridge.h +++ b/launchers/macosx/SBridge.h @@ -55,10 +55,12 @@ inline std::string buildClassPathForObjC(std::string basePath) #endif + @interface SBridge : NSObject @property (nonatomic, assign) I2PRouterTask* currentRouterInstance; - (NSString*) buildClassPath:(NSString*)i2pPath; -- (void) startupI2PRouter:(NSString*)i2pRootPath javaBinPath:(NSString*)javaBinPath; +- (void) startupI2PRouter:(NSString*)i2pRootPath; - (void) openUrl:(NSString*)url; ++ (void) logProxy:(int)level formattedMsg:(NSString*)formattedMsg; + (instancetype)sharedInstance; // this makes it a singleton @end diff --git a/launchers/macosx/SBridge.mm b/launchers/macosx/SBridge.mm index 7fc137e791..fe8b85b2d3 100644 --- a/launchers/macosx/SBridge.mm +++ b/launchers/macosx/SBridge.mm @@ -31,10 +31,20 @@ std::future<int> startupRouter(NSString* javaBin, NSArray<NSString*>* arguments, NSString* i2pBaseDir, RouterProcessStatus* routerStatus) { @try { + + /** + * + * The following code will do a test, where it lists all known processes in the OS (visibility depending on user rights) + * and scan for any command/arguments matching the substring "i2p.jar" - and in which case it won't start I2P itself. + * + **/ IIProcessInfo* processInfoObj = [[IIProcessInfo alloc] init]; [processInfoObj obtainFreshProcessList]; auto anyRouterLookingProcs = [processInfoObj findProcessWithStringInNameOrArguments:@"i2p.jar"]; if (anyRouterLookingProcs) { + /** + * The router was found running + */ auto errMessage = @"Seems i2p is already running - I've detected another process with i2p.jar in it's arguments."; MLog(4, @"%@", errMessage); sendUserNotification(APP_IDSTR, errMessage); @@ -43,6 +53,9 @@ std::future<int> startupRouter(NSString* javaBin, NSArray<NSString*>* arguments, return -1; }); } else { + /** + * No router was detected running + **/ RTaskOptions* options = [RTaskOptions alloc]; options.binPath = javaBin; options.arguments = arguments; @@ -120,9 +133,13 @@ std::future<int> startupRouter(NSString* javaBin, NSArray<NSString*>* arguments, return [[NSString alloc] initWithUTF8String:classpath]; } ++ (void) logProxy:(int)level formattedMsg:(NSString*)formattedMsg +{ + MLog(level, formattedMsg); +} -- (void)startupI2PRouter:(NSString*)i2pRootPath javaBinPath:(NSString*)javaBinPath +- (void)startupI2PRouter:(NSString*)i2pRootPath { std::string basePath([i2pRootPath UTF8String]); @@ -134,6 +151,10 @@ std::future<int> startupRouter(NSString* javaBin, NSArray<NSString*>* arguments, try { std::vector<NSString*> argList = { + @"-v", + @"1.7+", + @"--exec", + @"java", @"-Xmx512M", @"-Xms128m", @"-Djava.awt.headless=true", @@ -157,15 +178,15 @@ std::future<int> startupRouter(NSString* javaBin, NSArray<NSString*>* arguments, argList.push_back([NSString stringWithUTF8String:cpString.c_str()]); argList.push_back([NSString stringWithUTF8String:classPathStr.c_str()]); argList.push_back(@"net.i2p.router.Router"); - auto javaBin = std::string([javaBinPath UTF8String]); + auto javaBin = std::string("/usr/libexec/java_home"); sendUserNotification(APP_IDSTR, @"I2P Router is starting up!"); - auto nsJavaBin = javaBinPath; + auto nsJavaBin = [NSString stringWithUTF8String:javaBin.c_str()]; auto nsBasePath = i2pRootPath; NSArray* arrArguments = [NSArray arrayWithObjects:&argList[0] count:argList.size()]; - MLog(0, @"Trying to run command: %@", javaBinPath); + MLog(0, @"Trying to run command: %@", nsJavaBin); MLog(0, @"With I2P Base dir: %@", i2pRootPath); MLog(0, @"And Arguments: %@", arrArguments); startupRouter(nsJavaBin, arrArguments, nsBasePath, routerStatus); -- GitLab