X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/89e6aacd25d9f355b9dac9c22973e6a5161b3f88..d11efc8d287ca1643e9ac6a7b561cad7cd659bda:/NetworkController.m diff --git a/NetworkController.m b/NetworkController.m index 3ac6250..fb3976c 100755 --- a/NetworkController.m +++ b/NetworkController.m @@ -13,8 +13,6 @@ #import "NetworkController.h" #import "MainController.h" -#import "netinet/in.h" -#import "arpa/inet.h" #import #import #import @@ -45,6 +43,8 @@ static NetworkController *sharedController; [serverConnection invalidate]; [serverConnection release]; } + [serverPass release]; + [clientPass release]; [clientProxy release]; [remoteServices release]; [browser release]; @@ -69,6 +69,8 @@ static NetworkController *sharedController; { if (!serverOn && status) { NSString *name = [[NSUserDefaults standardUserDefaults] stringForKey:@"sharedPlayerName"]; + unsigned char buffer; + NSData *fullPass; //Turn on NS_DURING serverPort = [[NSSocketPort alloc] initWithTCPPort:SERVER_PORT]; @@ -78,6 +80,8 @@ static NetworkController *sharedController; [serverConnection registerName:@"ITMTPlayerHost"]; [serverConnection setDelegate:self]; NS_HANDLER + [serverConnection release]; + [serverPort release]; ITDebugLog(@"Error starting server!"); NS_ENDHANDLER ITDebugLog(@"Started server."); @@ -88,6 +92,14 @@ static NetworkController *sharedController; type:@"_mttp._tcp." name:name port:SERVER_PORT]; + fullPass = [[NSUserDefaults standardUserDefaults] dataForKey:@"sharedPlayerPassword"]; + if (fullPass) { + [fullPass getBytes:&buffer range:NSMakeRange(6, 4)]; + [serverPass release]; + serverPass = [[NSData alloc] initWithBytes:&buffer length:strlen(&buffer)]; + } else { + serverPass = nil; + } [service publish]; serverOn = YES; } else if (serverOn && !status && [serverConnection isValid]) { @@ -104,17 +116,30 @@ static NetworkController *sharedController; - (BOOL)connectToHost:(NSString *)host { + NSData *fullPass = [[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]; + unsigned char buffer; ITDebugLog(@"Connecting to host: %@", host); + remoteHost = [host copy]; + if (fullPass) { + [fullPass getBytes:&buffer range:NSMakeRange(6, 4)]; + [clientPass release]; + clientPass = [[NSData alloc] initWithBytes:&buffer length:strlen(&buffer)]; + } else { + clientPass = nil; + } NS_DURING 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 + [clientConnection release]; + [clientPort release]; ITDebugLog(@"Connection to host failed: %@", host); return NO; NS_ENDHANDLER - [clientConnection setReplyTimeout:5]; ITDebugLog(@"Connected to host: %@", host); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(disconnect) name:NSConnectionDidDieNotification object:clientConnection]; connectedToServer = YES; @@ -125,6 +150,8 @@ static NetworkController *sharedController; { ITDebugLog(@"Disconnecting from host."); connectedToServer = NO; + [remoteHost release]; + remoteHost = nil; [[NSNotificationCenter defaultCenter] removeObserver:self]; [clientProxy release]; [clientConnection invalidate]; @@ -132,6 +159,43 @@ static NetworkController *sharedController; return YES; } +- (BOOL)checkForServerAtHost:(NSString *)host +{ + NSData *fullPass = [[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]; + unsigned char buffer; + NSConnection *testConnection; + NSSocketPort *testPort; + NSDistantObject *tempProxy; + ITDebugLog(@"Checking for shared remote at %@.", host); + if (fullPass) { + [fullPass getBytes:&buffer range:NSMakeRange(6, 4)]; + [clientPass release]; + clientPass = [[NSData alloc] initWithBytes:&buffer length:strlen(&buffer)]; + } else { + clientPass = nil; + } + + NS_DURING + testPort = [[NSSocketPort alloc] initRemoteWithTCPPort:SERVER_PORT + host:host]; + testConnection = [[NSConnection connectionWithReceivePort:nil sendPort:testPort] retain]; + [testConnection setReplyTimeout:2]; + tempProxy = [testConnection rootProxy]; + [testConnection setDelegate:self]; + [tempProxy sharedRemoteName]; + NS_HANDLER + ITDebugLog(@"Connection to host failed: %@", host); + [testConnection invalidate]; + [testConnection release]; + [testPort release]; + return NO; + NS_ENDHANDLER + [testConnection invalidate]; + [testConnection release]; + [testPort release]; + return YES; +} + - (BOOL)isServerOn { return serverOn; @@ -147,6 +211,11 @@ static NetworkController *sharedController; return connectedToServer; } +- (NSString *)remoteHost +{ + return remoteHost; +} + - (ITMTRemote *)sharedRemote { return (ITMTRemote *)clientProxy; @@ -157,11 +226,36 @@ 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]); + [remoteServices addObject:aNetService]; [aNetService setDelegate:self]; [aNetService resolve]; - ITDebugLog(@"Found service named %@.", [aNetService name]); + if (!moreComing) { + [[NSNotificationCenter defaultCenter] postNotificationName:@"ITMTFoundNetService" object:nil]; + } +} + +- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveService:(NSNetService*)aNetService moreComing:(BOOL)moreComing +{ + ITDebugLog(@"Removed service named %@.", [aNetService name]); + [remoteServices removeObject:aNetService]; if (!moreComing) { [[NSNotificationCenter defaultCenter] postNotificationName:@"ITMTFoundNetService" object:nil]; } @@ -169,12 +263,10 @@ static NetworkController *sharedController; - (void)netServiceDidResolveAddress:(NSNetService *)sender { - [remoteServices addObject:[NSDictionary dictionaryWithObjectsAndKeys:[sender name], @"name", - [NSString stringWithCString:inet_ntoa((*(struct sockaddr_in*)[[[sender addresses] objectAtIndex:0] bytes]).sin_addr)], @"ip", - nil, nil]]; ITDebugLog(@"Resolved service named %@.", [sender name]); - NSLog(@"found!"); + NSLog(@"Resolved service named %@.", [sender name]); [[NSNotificationCenter defaultCenter] postNotificationName:@"ITMTFoundNetService" object:nil]; + [sender stop]; } - (void)netServiceWillResolve:(NSNetService *)sender