diff --git a/NzbDrone.Core.Test/XbmcProviderTest.cs b/NzbDrone.Core.Test/XbmcProviderTest.cs index 579a24b66..5b92c7247 100644 --- a/NzbDrone.Core.Test/XbmcProviderTest.cs +++ b/NzbDrone.Core.Test/XbmcProviderTest.cs @@ -22,7 +22,7 @@ namespace NzbDrone.Core.Test public class XbmcProviderTest : TestBase { [Test] - public void JsonEror_true() + public void JsonError_true() { //Setup var mocker = new AutoMoqer(); @@ -36,7 +36,21 @@ namespace NzbDrone.Core.Test } [Test] - public void JsonEror_false() + public void JsonError_true_empty_response() + { + //Setup + var mocker = new AutoMoqer(); + var response = String.Empty; + + //Act + var result = mocker.Resolve().CheckForJsonError(response); + + //Assert + Assert.AreEqual(true, result); + } + + [Test] + public void JsonError_false() { //Setup var mocker = new AutoMoqer(); diff --git a/NzbDrone.Core/Providers/Core/HttpProvider.cs b/NzbDrone.Core/Providers/Core/HttpProvider.cs index 2789077f7..d9ae3d5f5 100644 --- a/NzbDrone.Core/Providers/Core/HttpProvider.cs +++ b/NzbDrone.Core/Providers/Core/HttpProvider.cs @@ -74,24 +74,31 @@ namespace NzbDrone.Core.Providers.Core byte[] byteArray = Encoding.ASCII.GetBytes(command); - var request = WebRequest.Create(address); + var request = (HttpWebRequest)WebRequest.Create(address); request.Method = "POST"; request.Credentials = new NetworkCredential(username, password); - request.ContentLength = byteArray.Length; - request.ContentType = "application/x-www-form-urlencoded"; - var dataStream = request.GetRequestStream(); - dataStream.Write(byteArray, 0, byteArray.Length); - dataStream.Close(); + request.ContentType = "application/json"; + request.Timeout = 2000; + request.KeepAlive = false; - var response = request.GetResponse(); - dataStream = response.GetResponseStream(); - var reader = new StreamReader(dataStream); - // Read the content. - string responseFromServer = reader.ReadToEnd(); + //Used to hold the JSON response + string responseFromServer; - reader.Close(); - dataStream.Close(); - response.Close(); + using (var requestStream = request.GetRequestStream()) + { + requestStream.Write(byteArray, 0, byteArray.Length); + + using (var response = request.GetResponse()) + { + using (var responseStream = response.GetResponseStream()) + { + using (var reader = new StreamReader(responseStream)) + { + responseFromServer = reader.ReadToEnd(); + } + } + } + } return responseFromServer.Replace(" ", " "); } diff --git a/NzbDrone.Core/Providers/XbmcProvider.cs b/NzbDrone.Core/Providers/XbmcProvider.cs index 6f05b1b27..cc1b1a444 100644 --- a/NzbDrone.Core/Providers/XbmcProvider.cs +++ b/NzbDrone.Core/Providers/XbmcProvider.cs @@ -300,6 +300,12 @@ namespace NzbDrone.Core.Providers return true; } + if (String.IsNullOrWhiteSpace(response)) + { + Logger.Debug("Invalid response from XBMC, the response is not valid JSON"); + return true; + } + return false; }