X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/d11efc8d287ca1643e9ac6a7b561cad7cd659bda..a1367a46347952261b0e04a09dc061695a6511d0:/NetworkController.m diff --git a/NetworkController.m b/NetworkController.m index fb3976c..1e7a230 100755 --- a/NetworkController.m +++ b/NetworkController.m @@ -13,9 +13,10 @@ #import "NetworkController.h" #import "MainController.h" +#import "NetworkObject.h" +#import "PreferencesController.h" #import #import -#import static NetworkController *sharedController; @@ -40,7 +41,6 @@ static NetworkController *sharedController; { [self disconnect]; if (serverOn) { - [serverConnection invalidate]; [serverConnection release]; } [serverPass release]; @@ -76,10 +76,10 @@ static NetworkController *sharedController; serverPort = [[NSSocketPort alloc] initWithTCPPort:SERVER_PORT]; serverConnection = [[NSConnection alloc] initWithReceivePort:serverPort sendPort:serverPort]; - [serverConnection setRootObject:[[MainController sharedController] currentRemote]]; + [serverConnection setRootObject:[[NetworkObject alloc] init]]; [serverConnection registerName:@"ITMTPlayerHost"]; - [serverConnection setDelegate:self]; NS_HANDLER + [[serverConnection rootObject] release]; [serverConnection release]; [serverPort release]; ITDebugLog(@"Error starting server!"); @@ -106,19 +106,19 @@ static NetworkController *sharedController; //Turn off [service stop]; [serverConnection registerName:nil]; - [serverPort invalidate]; - [serverConnection invalidate]; + [[serverConnection rootObject] release]; [serverConnection release]; ITDebugLog(@"Stopped server."); serverOn = NO; } } -- (BOOL)connectToHost:(NSString *)host +- (int)connectToHost:(NSString *)host { NSData *fullPass = [[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]; unsigned char buffer; ITDebugLog(@"Connecting to host: %@", host); + [remoteHost release]; remoteHost = [host copy]; if (fullPass) { [fullPass getBytes:&buffer range:NSMakeRange(6, 4)]; @@ -131,7 +131,6 @@ static NetworkController *sharedController; clientPort = [[NSSocketPort alloc] initRemoteWithTCPPort:SERVER_PORT host:host]; clientConnection = [[NSConnection connectionWithReceivePort:nil sendPort:clientPort] retain]; - [clientConnection setDelegate:self]; [clientConnection setReplyTimeout:5]; clientProxy = [[clientConnection rootProxy] retain]; NS_HANDLER @@ -140,10 +139,41 @@ static NetworkController *sharedController; ITDebugLog(@"Connection to host failed: %@", host); return NO; NS_ENDHANDLER + + if (!clientProxy) { + ITDebugLog(@"Null proxy! Couldn't connect!"); + [self disconnect]; + return NO; + } + + if ([clientProxy requiresPassword]) { + ITDebugLog(@"Server requires password."); + //Check to see if a password is set in defaults + if ([[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"] == nil) { + ITDebugLog(@"Asking for password."); + if (![[PreferencesController sharedPrefs] showPasswordPanel]) { + ITDebugLog(@"Giving up connection attempt."); + [self disconnect]; + return -1; + } + } + + //Send the password + ITDebugLog(@"Sending password."); + while (![clientProxy sendPassword:[[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]]) { + ITDebugLog(@"Invalid password!"); + if (![[PreferencesController sharedPrefs] showInvalidPasswordPanel]) { + ITDebugLog(@"Giving up connection attempt."); + [self disconnect]; + return -1; + } + } + } + ITDebugLog(@"Connected to host: %@", host); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(disconnect) name:NSConnectionDidDieNotification object:clientConnection]; connectedToServer = YES; - return YES; + return 1; } - (BOOL)disconnect @@ -154,7 +184,6 @@ static NetworkController *sharedController; remoteHost = nil; [[NSNotificationCenter defaultCenter] removeObserver:self]; [clientProxy release]; - [clientConnection invalidate]; [clientConnection release]; return YES; } @@ -165,7 +194,7 @@ static NetworkController *sharedController; unsigned char buffer; NSConnection *testConnection; NSSocketPort *testPort; - NSDistantObject *tempProxy; + NetworkObject *tempProxy; ITDebugLog(@"Checking for shared remote at %@.", host); if (fullPass) { [fullPass getBytes:&buffer range:NSMakeRange(6, 4)]; @@ -177,20 +206,24 @@ static NetworkController *sharedController; NS_DURING testPort = [[NSSocketPort alloc] initRemoteWithTCPPort:SERVER_PORT - host:host]; + host:host]; testConnection = [[NSConnection connectionWithReceivePort:nil sendPort:testPort] retain]; [testConnection setReplyTimeout:2]; - tempProxy = [testConnection rootProxy]; - [testConnection setDelegate:self]; - [tempProxy sharedRemoteName]; + tempProxy = (NetworkObject *)[testConnection rootProxy]; + [tempProxy serverName]; NS_HANDLER ITDebugLog(@"Connection to host failed: %@", host); - [testConnection invalidate]; [testConnection release]; [testPort release]; return NO; NS_ENDHANDLER - [testConnection invalidate]; + + if (!clientProxy) { + ITDebugLog(@"Null proxy! Couldn't connect!"); + [testConnection release]; + [testPort release]; + return NO; + } [testConnection release]; [testPort release]; return YES; @@ -216,9 +249,9 @@ static NetworkController *sharedController; return remoteHost; } -- (ITMTRemote *)sharedRemote +- (NetworkObject *)networkObject { - return (ITMTRemote *)clientProxy; + return clientProxy; } - (NSArray *)remoteServices @@ -226,21 +259,6 @@ static NetworkController *sharedController; return remoteServices; } -/*- (BOOL)authenticateComponents:(NSArray*)components withData:(NSData *)authenticationData -{ - return YES; - if (![[NSUserDefaults standardUserDefaults] boolForKey:@"enableSharingPassword"] || [authenticationData isEqualToData:serverPass]) { - return YES; - } else { - return NO; - } -} - -- (NSData *)authenticationDataForComponents:(NSArray *)components -{ - return clientPass; -}*/ - - (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing { ITDebugLog(@"Found service named %@.", [aNetService name]);