Revision
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

Diff

Modified: branches/gsoc08-framework/MacPorts_Framework_Release/MPHelperCommon.h (39689 => 39690)


--- 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 (39689 => 39690)


--- 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 (39689 => 39690)


--- 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 (39689 => 39690)


--- 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 (39689 => 39690)


--- 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 (39689 => 39690)


--- 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>"; };