diff --git a/launchers/macosx/I2PLauncher/I2PLauncher-Bridging-Header.h b/launchers/macosx/I2PLauncher/I2PLauncher-Bridging-Header.h index 1ece6baa92f0246f25bc0d67d28b13c25d3d193f..7afdb2490c54ce22d9fdd9c828ca15adb4b219c9 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 bb0ccde4a8be80f833a841bfa561fcbb825be12e..a45ae3772a61f277c82400c3e2e4c74f92d5d4f5 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 7fc137e7918fd1a4d07e4fff9748ef5e93386cfe..fe8b85b2d3f33d9980ecab416a287fcb22d31b57 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);