From 85b65d7112f647f6ef4484ef02e8a864689eaa72 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 21 Oct 2014 15:54:19 -0400 Subject: [PATCH] Display a failure dialog when we fail to launch an app --- Limelight/Network/PairManager.m | 16 +++++++++++----- Limelight/Stream/StreamManager.m | 17 ++++++++++++++--- .../ViewControllers/StreamFrameViewController.m | 8 +++++++- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Limelight/Network/PairManager.m b/Limelight/Network/PairManager.m index 9c77f68..a13835a 100644 --- a/Limelight/Network/PairManager.m +++ b/Limelight/Network/PairManager.m @@ -43,7 +43,9 @@ [_callback showPIN:PIN]; NSData* pairResp = [_httpManager executeRequestSynchronously:[_httpManager newPairRequest:salt]]; - if ([[HttpManager getStringFromXML:pairResp tag:@"paired"] intValue] != 1) { + NSString* pairedString; + pairedString = [HttpManager getStringFromXML:pairResp tag:@"paired"]; + if (pairedString == NULL || ![pairedString isEqualToString:@"1"]) { [_httpManager executeRequestSynchronously:[_httpManager newUnpairRequest]]; //TODO: better message [_callback pairFailed:@"pairResp failed"]; @@ -59,7 +61,8 @@ NSData* encryptedChallenge = [cryptoMan aesEncrypt:randomChallenge withKey:aesKey]; NSData* challengeResp = [_httpManager executeRequestSynchronously:[_httpManager newChallengeRequest:encryptedChallenge]]; - if ([[HttpManager getStringFromXML:challengeResp tag:@"paired"] intValue] != 1) { + pairedString = [HttpManager getStringFromXML:challengeResp tag:@"paired"]; + if (pairedString == NULL || ![pairedString isEqualToString:@"1"]) { [_httpManager executeRequestSynchronously:[_httpManager newUnpairRequest]]; //TODO: better message [_callback pairFailed:@"challengeResp failed"]; @@ -77,7 +80,8 @@ NSData* challengeRespEncrypted = [cryptoMan aesEncrypt:challengeRespHash withKey:aesKey]; NSData* secretResp = [_httpManager executeRequestSynchronously:[_httpManager newChallengeRespRequest:challengeRespEncrypted]]; - if ([[HttpManager getStringFromXML:secretResp tag:@"paired"] intValue] != 1) { + pairedString = [HttpManager getStringFromXML:secretResp tag:@"paired"]; + if (pairedString == NULL || ![pairedString isEqualToString:@"1"]) { [_httpManager executeRequestSynchronously:[_httpManager newUnpairRequest]]; //TODO: better message [_callback pairFailed:@"secretResp failed"]; @@ -105,7 +109,8 @@ NSData* clientPairingSecret = [self concatData:clientSecret with:[cryptoMan signData:clientSecret withKey:[CryptoManager readKeyFromFile]]]; NSData* clientSecretResp = [_httpManager executeRequestSynchronously:[_httpManager newClientSecretRespRequest:[Utils bytesToHex:clientPairingSecret]]]; - if (![[HttpManager getStringFromXML:clientSecretResp tag:@"paired"] isEqual:@"1"]) { + pairedString = [HttpManager getStringFromXML:clientSecretResp tag:@"paired"]; + if (pairedString == NULL || ![pairedString isEqualToString:@"1"]) { [_httpManager executeRequestSynchronously:[_httpManager newUnpairRequest]]; //TODO: better message [_callback pairFailed:@"clientSecretResp failed"]; @@ -113,7 +118,8 @@ } NSData* clientPairChallenge = [_httpManager executeRequestSynchronously:[_httpManager newPairChallenge]]; - if (![[HttpManager getStringFromXML:clientPairChallenge tag:@"paired"] isEqual:@"1"]) { + pairedString = [HttpManager getStringFromXML:clientPairChallenge tag:@"paired"]; + if (pairedString == NULL || ![pairedString isEqualToString:@"1"]) { [_httpManager executeRequestSynchronously:[_httpManager newUnpairRequest]]; //TODO: better message [_callback pairFailed:@"clientPairChallenge failed"]; diff --git a/Limelight/Stream/StreamManager.m b/Limelight/Stream/StreamManager.m index d8135df..d13deec 100644 --- a/Limelight/Stream/StreamManager.m +++ b/Limelight/Stream/StreamManager.m @@ -41,12 +41,23 @@ cert:cert]; NSData* serverInfoResp = [hMan executeRequestSynchronously:[hMan newServerInfoRequest]]; - if (![[HttpManager getStringFromXML:serverInfoResp tag:@"currentgame"] isEqualToString:@"0"]) { + NSString* currentGame = [HttpManager getStringFromXML:serverInfoResp tag:@"currentgame"]; + if (currentGame == NULL) { + [_callbacks launchFailed]; + return; + } + else if ([currentGame isEqualToString:@"0"]) { // App already running, resume it - [self resumeApp:hMan]; + if (![self resumeApp:hMan]) { + [_callbacks launchFailed]; + return; + } } else { // Start app - [self launchApp:hMan]; + if (![self launchApp:hMan]) { + [_callbacks launchFailed]; + return; + } } VideoDecoderRenderer* renderer = [[VideoDecoderRenderer alloc]initWithView:_renderView]; diff --git a/Limelight/ViewControllers/StreamFrameViewController.m b/Limelight/ViewControllers/StreamFrameViewController.m index 18758c2..fc6e0cb 100644 --- a/Limelight/ViewControllers/StreamFrameViewController.m +++ b/Limelight/ViewControllers/StreamFrameViewController.m @@ -81,7 +81,13 @@ } - (void) launchFailed { - + UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Connection Failed" + message:@"Failed to start app" + preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDestructive handler:^(UIAlertAction* action){ + [self performSegueWithIdentifier:@"returnToMainFrame" sender:self]; + }]]; + [self presentViewController:alert animated:YES completion:nil]; } - (void) displayMessage:(char*)message {