#import "NetworkController.h"
#import "MainController.h"
#import "NetworkObject.h"
+#import "PreferencesController.h"
#import <ITFoundation/ITDebug.h>
#import <ITFoundation/ITFoundation.h>
{
if (!serverOn && status) {
NSString *name = [[NSUserDefaults standardUserDefaults] stringForKey:@"sharedPlayerName"];
+ NSPort *serverPort;
unsigned char buffer;
NSData *fullPass;
//Turn on
NS_DURING
- serverPort = [[NSSocketPort alloc] initWithTCPPort:SERVER_PORT];
+ serverPort = [[[NSSocketPort alloc] initWithTCPPort:SERVER_PORT] autorelease];
serverConnection = [[NSConnection alloc] initWithReceivePort:serverPort
sendPort:serverPort];
- [serverConnection setRootObject:[[NetworkObject alloc] init]];
+ clientProxy = [[NetworkObject alloc] init];
+ [serverConnection setRootObject:[clientProxy autorelease]];
[serverConnection registerName:@"ITMTPlayerHost"];
NS_HANDLER
[[serverConnection rootObject] release];
+ [serverConnection setRootObject:nil];
[serverConnection release];
[serverPort release];
ITDebugLog(@"Error starting server!");
+ return;
NS_ENDHANDLER
ITDebugLog(@"Started server.");
if (!name) {
}
[service publish];
serverOn = YES;
+ ITDebugLog(@"Server service published.");
} else if (serverOn && !status && [serverConnection isValid]) {
//Turn off
[service stop];
[serverConnection registerName:nil];
- [[serverConnection rootObject] release];
[serverConnection release];
+ [clientProxy release];
ITDebugLog(@"Stopped server.");
serverOn = NO;
}
}
-- (BOOL)connectToHost:(NSString *)host
+- (int)connectToHost:(NSString *)host
{
NSData *fullPass = [[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"];
unsigned char buffer;
clientConnection = [[NSConnection connectionWithReceivePort:nil sendPort:clientPort] retain];
[clientConnection setReplyTimeout:5];
clientProxy = [[clientConnection rootProxy] retain];
+ connectedToServer = YES;
NS_HANDLER
[clientConnection release];
[clientPort release];
ITDebugLog(@"Connection to host failed: %@", host);
- return NO;
+ return 0;
NS_ENDHANDLER
if (!clientProxy) {
}
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.");
- if (![clientProxy sendPassword:[[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]]) {
+ while (![clientProxy sendPassword:[[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]]) {
ITDebugLog(@"Invalid password!");
- [self disconnect];
- if ( NSRunCriticalAlertPanel(@"Invalid Password", @"The MenuTunes server you attempted to connect to rejected your password. Would you like to try to reconnect?.", @"Yes", @"No", nil) == NSOKButton ) {
- return [self connectToHost:host];
- } else {
- return NO;
+ 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
- (void)netServiceDidResolveAddress:(NSNetService *)sender
{
ITDebugLog(@"Resolved service named %@.", [sender name]);
- NSLog(@"Resolved service named %@.", [sender name]);
[[NSNotificationCenter defaultCenter] postNotificationName:@"ITMTFoundNetService" object:nil];
[sender stop];
}