diff --git a/Greenshot/Help/HelpFileLoader.cs b/Greenshot/Help/HelpFileLoader.cs index 93759a850..c3acda86d 100644 --- a/Greenshot/Help/HelpFileLoader.cs +++ b/Greenshot/Help/HelpFileLoader.cs @@ -83,10 +83,15 @@ namespace Greenshot.Help private static HttpStatusCode? GetHttpStatus(string url) { try { HttpWebRequest req = NetworkHelper.CreateWebRequest(url); - HttpWebResponse res = (HttpWebResponse)req.GetResponse(); - return res.StatusCode; - } catch(WebException e) { - if(e.Response != null) return ((HttpWebResponse)e.Response).StatusCode; + using (HttpWebResponse res = (HttpWebResponse)req.GetResponse()) + { + return res.StatusCode; + } + } catch (WebException e) { + if (e.Response != null) + { + return ((HttpWebResponse)e.Response).StatusCode; + } return null; } } diff --git a/GreenshotPlugin/Core/NetworkHelper.cs b/GreenshotPlugin/Core/NetworkHelper.cs index 0acf63bf3..429265834 100644 --- a/GreenshotPlugin/Core/NetworkHelper.cs +++ b/GreenshotPlugin/Core/NetworkHelper.cs @@ -77,12 +77,18 @@ namespace GreenshotPlugin.Core { Uri url = new Uri(baseUri, new Uri("favicon.ico")); try { HttpWebRequest request = CreateWebRequest(url); - HttpWebResponse response = (HttpWebResponse)request.GetResponse(); - if (request.HaveResponse) { - using (Stream responseStream = response.GetResponseStream()) { - if (responseStream != null) { - using (Image image = Image.FromStream(responseStream)) { - return (image.Height > 16 && image.Width > 16) ? new Bitmap(image, 16, 16) : new Bitmap(image); + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + { + if (request.HaveResponse) + { + using (Stream responseStream = response.GetResponseStream()) + { + if (responseStream != null) + { + using (Image image = Image.FromStream(responseStream)) + { + return (image.Height > 16 && image.Width > 16) ? new Bitmap(image, 16, 16) : new Bitmap(image); + } } } } @@ -424,6 +430,32 @@ namespace GreenshotPlugin.Core { return GetResponseAsString(webRequest, false); } + /// + /// Read the response as string + /// + /// + /// string or null + private static string GetResponseAsString(HttpWebResponse response) + { + string responseData = null; + if (response == null) + { + return null; + } + using (response) + { + Stream responseStream = response.GetResponseStream(); + if (responseStream != null) + { + using (StreamReader reader = new StreamReader(responseStream, true)) + { + responseData = reader.ReadToEnd(); + } + } + } + return responseData; + } + /// /// /// @@ -431,40 +463,43 @@ namespace GreenshotPlugin.Core { /// public static string GetResponseAsString(HttpWebRequest webRequest, bool alsoReturnContentOnError) { string responseData = null; - try { - HttpWebResponse response = (HttpWebResponse) webRequest.GetResponse(); + HttpWebResponse response = null; + bool isHttpError = false; + try { + response = (HttpWebResponse)webRequest.GetResponse(); LOG.InfoFormat("Response status: {0}", response.StatusCode); - bool isHttpError = (int) response.StatusCode >= 300; - DebugHeaders(response); - Stream responseStream = response.GetResponseStream(); - if (responseStream != null) { - using (StreamReader reader = new StreamReader(responseStream, true)) { - responseData = reader.ReadToEnd(); - } - if (isHttpError) { - LOG.ErrorFormat("HTTP error {0} with content: {1}", response.StatusCode, responseData); - } + isHttpError = (int)response.StatusCode >= 300; + if (isHttpError) + { + LOG.ErrorFormat("HTTP error {0} with content: {1}", response.StatusCode, responseData); } - } catch (WebException e) { - HttpWebResponse response = (HttpWebResponse) e.Response; + DebugHeaders(response); + responseData = GetResponseAsString(response); + } catch (WebException e) { + response = (HttpWebResponse) e.Response; if (response != null) { LOG.ErrorFormat("HTTP error {0}", response.StatusCode); - using (Stream responseStream = response.GetResponseStream()) { - if (responseStream != null) { - using (StreamReader streamReader = new StreamReader(responseStream, true)) { - string errorContent = streamReader.ReadToEnd(); - if (alsoReturnContentOnError) { - return errorContent; - } - LOG.ErrorFormat("Content: {0}", errorContent); - } - } + string errorContent = GetResponseAsString(response); + if (alsoReturnContentOnError) + { + return errorContent; } + LOG.ErrorFormat("Content: {0}", errorContent); } LOG.Error("WebException: ", e); throw; } - + finally + { + if (response != null) + { + if (isHttpError) + { + LOG.ErrorFormat("HTTP error {0} with content: {1}", response.StatusCode, responseData); + } + response.Close(); + } + } return responseData; } @@ -477,9 +512,11 @@ namespace GreenshotPlugin.Core { try { HttpWebRequest webRequest = CreateWebRequest(uri); webRequest.Method = HTTPMethod.HEAD.ToString(); - HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); - LOG.DebugFormat("RSS feed was updated at {0}", webResponse.LastModified); - return webResponse.LastModified; + using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) + { + LOG.DebugFormat("RSS feed was updated at {0}", webResponse.LastModified); + return webResponse.LastModified; + } } catch (Exception wE) { LOG.WarnFormat("Problem requesting HTTP - HEAD on uri {0}", uri); LOG.Warn(wE.Message);