Revision: 39690 http://trac.macosforge.org/projects/macports/changeset/39690 Author: armahg@macports.org Date: 2008-08-30 19:16:26 -0700 (Sat, 30 Aug 2008) Log Message: ----------- Added code to create BSD socket file for IPC on the fly. This means the socket file changes for every call to MPHelperTool. Modified Paths: -------------- branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperCommon.h branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperTool.m branches/gsoc08-framework/MacPorts_Framework_Release/MPInterpreter.m branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.h branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.m branches/gsoc08-framework/MacPorts_Framework_Release/MacPorts.Framework.xcodeproj/project.pbxproj Modified: branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperCommon.h =================================================================== --- branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperCommon.h 2008-08-30 21:52:05 UTC (rev 39689) +++ branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperCommon.h 2008-08-31 02:16:26 UTC (rev 39690) @@ -43,11 +43,14 @@ //File Descriptor for server file #define kServerFileDescriptor "ServerFileDescriptor" //CFNumber + //File path for IPC socket + #define kServerFileSocketPath "ServerFileSocketPath" //CFString + //response keys #define kTclStringEvaluationResult "TclStringEvaluationResult" //CFString Modified: branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperTool.m =================================================================== --- branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperTool.m 2008-08-30 21:52:05 UTC (rev 39689) +++ branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperTool.m 2008-08-31 02:16:26 UTC (rev 39690) @@ -60,6 +60,7 @@ //fromt he request dictionary int notificationsFileDescriptor; BOOL hasSetFileDescriptor = NO; +NSString * ipcFilePath; #pragma mark - #pragma mark ASL Logging @@ -894,7 +895,15 @@ //asl may be null //aslMsg may be null + //Get the ipc file path + ipcFilePath = (NSString *) (CFStringRef)CFDictionaryGetValue(request, CFSTR(kServerFileSocketPath)); + if (ipcFilePath == nil) { + retval = coreFoundationUnknownErr; + } + else + CFDictionaryAddValue(response, CFSTR("SocketServerFilePath"), (CFStringRef)ipcFilePath); + //Get the string that was passed in the request dictionary NSString * tclCmd = (NSString *) (CFStringRef)CFDictionaryGetValue(request, CFSTR(kTclStringToBeEvaluated)); if (tclCmd == nil) { Modified: branches/gsoc08-framework/MacPorts_Framework_Release/MPInterpreter.m =================================================================== --- branches/gsoc08-framework/MacPorts_Framework_Release/MPInterpreter.m 2008-08-30 21:52:05 UTC (rev 39689) +++ branches/gsoc08-framework/MacPorts_Framework_Release/MPInterpreter.m 2008-08-31 02:16:26 UTC (rev 39690) @@ -36,6 +36,7 @@ #import "MPInterpreter.h" #include "BetterAuthorizationSampleLib.h" #include "MPHelperCommon.h" +#include "MPHelperNotificationsProtocol.h" static AuthorizationRef internalMacPortsAuthRef; @@ -381,28 +382,8 @@ if ( *mportError != nil) { *mportError = nil; - - //We need to use the notificationsObject to set up IPC with the helper tool - //I hope BAS's main method is blocking ... it should be since we obtain - //a return value - MPNotifications * notificationObject = [MPNotifications sharedListener]; - //if ([notificationObject respondsToSelector:@selector(prepareIPCServerThread)]) { - NSLog(@"PREPARING SERVER THREAD"); - [notificationObject prepareIPCServerThread]; - //} - - //if ([notificationObject respondsToSelector:@selector(startServerThread)]) { - NSThread * cThread = [NSThread currentThread]; - NSLog(@"STARTING SERVER THREAD with previous thread %@", [cThread threadDictionary]); - [NSThread detachNewThreadSelector:@selector(startIPCServerThread) - toTarget:notificationObject - withObject:nil]; - //[notificationObject startIPCServerThread]; - - //} secondResult = [self evaluateStringWithMPHelperTool:statement error:mportError]; - return secondResult; } @@ -422,17 +403,47 @@ response = NULL; + //Creating file path for IPC with helper tool + NSString * ipcFilePath = [NSString stringWithFormat:@"%@_%@", @kServerSocketPath, [NSDate date]]; + NSString * ipcFilePathCopy = [NSString stringWithString:ipcFilePath]; + + + //We need to use the notificationsObject to set up IPC with the helper tool + //I hope BAS's main method is blocking ... it should be since we obtain + //a return value + MPNotifications * notificationObject = [MPNotifications sharedListener]; + //if ([notificationObject respondsToSelector:@selector(prepareIPCServerThread)]) { + NSLog(@"PREPARING SERVER THREAD"); + [notificationObject prepareIPCServerThread]; + //} + + //if ([notificationObject respondsToSelector:@selector(startServerThread)]) { + NSThread * cThread = [NSThread currentThread]; + NSLog(@"STARTING SERVER THREAD with previous thread %@", [cThread threadDictionary]); + [NSThread detachNewThreadSelector:@selector(startIPCServerThread:) + toTarget:notificationObject + withObject:ipcFilePathCopy]; + //[notificationObject startIPCServerThread]; + //} + + + + + //Retrieving the path for interpInit.tcl for our helper tool NSString * interpInitPath = [[NSBundle bundleForClass:[MPInterpreter class]] pathForResource:@"interpInit" ofType:@"tcl"]; + + request = [NSDictionary dictionaryWithObjectsAndKeys: @kMPHelperEvaluateTclCommand, @kBASCommandKey, statement, @kTclStringToBeEvaluated, tclInterpreterPkgPath, @kTclInterpreterInitPath , - interpInitPath, @kInterpInitFilePath, nil]; + interpInitPath, @kInterpInitFilePath, + ipcFilePath, @kServerFileSocketPath , nil]; assert(request != NULL); @@ -546,7 +557,7 @@ } } - //NSLog(@"AFTER Tool Execution request is %@ , response is %@ \n\n", request, response); + NSLog(@"AFTER Tool Execution request is %@ , response is %@ \n\n", request, response); return result; } Modified: branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.h =================================================================== --- branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.h 2008-08-30 21:52:05 UTC (rev 39689) +++ branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.h 2008-08-31 02:16:26 UTC (rev 39690) @@ -14,7 +14,7 @@ @interface MPNotifications (IPCAdditions) -(BOOL) terminateBackgroundThread; -(void) setTerminateBackgroundThread:(BOOL)newStatus; --(void) startIPCServerThread; +-(void) startIPCServerThread:(NSString *) socketFilePath; -(void) prepareIPCServerThread; -(void) stopIPCServerThread; Modified: branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.m =================================================================== --- branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.m 2008-08-30 21:52:05 UTC (rev 39689) +++ branches/gsoc08-framework/MacPorts_Framework_Release/MPNotifications+IPCAdditions.m 2008-08-31 02:16:26 UTC (rev 39690) @@ -1344,7 +1344,7 @@ terminateBackgroundThread = newStatus; } --(void) startIPCServerThread { +-(void) startIPCServerThread:(NSString *)socketFilePath { NSAutoreleasePool * sPool = [[NSAutoreleasePool alloc] init]; NSLog(@"INSIDE SERVER THREAD"); Modified: branches/gsoc08-framework/MacPorts_Framework_Release/MacPorts.Framework.xcodeproj/project.pbxproj =================================================================== --- branches/gsoc08-framework/MacPorts_Framework_Release/MacPorts.Framework.xcodeproj/project.pbxproj 2008-08-30 21:52:05 UTC (rev 39689) +++ branches/gsoc08-framework/MacPorts_Framework_Release/MacPorts.Framework.xcodeproj/project.pbxproj 2008-08-31 02:16:26 UTC (rev 39690) @@ -107,7 +107,7 @@ isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8DC2EF4F0486A6940098B216 /* MacPorts */; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; remoteInfo = MacPorts; }; /* End PBXContainerItemProxy section */ @@ -169,7 +169,7 @@ 6ED12A540E3E55DF0026773D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; }; 6ED12AA60E3E7E900026773D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 6ED1AC740E4BA162000353B6 /* HelperToolServerFile.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HelperToolServerFile.txt; sourceTree = "<group>"; }; - 6EE6DD9E0E626D2800FB2115 /* MPHelperToolIPCTester */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; name = MPHelperToolIPCTester; path = build/Debug/MPHelperToolIPCTester; sourceTree = "<group>"; }; + 6EE6DD9E0E626D2800FB2115 /* MPHelperToolIPCTester */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = MPHelperToolIPCTester; sourceTree = BUILT_PRODUCTS_DIR; }; 6EE6DDAA0E626DC900FB2115 /* MPHelperToolIPCTester.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHelperToolIPCTester.m; sourceTree = "<group>"; }; 6EE6DDCC0E6276AA00FB2115 /* MPNotifications+IPCAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MPNotifications+IPCAdditions.h"; sourceTree = "<group>"; }; 6EE6DDCD0E6276AA00FB2115 /* MPNotifications+IPCAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPNotifications+IPCAdditions.m"; sourceTree = "<group>"; };