From 5fafea6631ec1da18803c6a599d9bc912cc15053 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 27 Feb 2014 22:52:43 +0000 Subject: [PATCH] refactor: More consistently use using construct within WebUtil to match other existing code there. --- OpenSim/Framework/WebUtil.cs | 479 +++++++++++++++++------------------ 1 file changed, 236 insertions(+), 243 deletions(-) diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs index 07c9e3f0b1..6b393455a3 100644 --- a/OpenSim/Framework/WebUtil.cs +++ b/OpenSim/Framework/WebUtil.cs @@ -794,172 +794,166 @@ namespace OpenSim.Framework if (maxConnections > 0 && ht.ServicePoint.ConnectionLimit < maxConnections) ht.ServicePoint.ConnectionLimit = maxConnections; - WebResponse response = null; TResponse deserial = default(TResponse); XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); request.Method = verb; + MemoryStream buffer = null; - if (verb == "POST") + try { - request.ContentType = "text/xml"; - - buffer = new MemoryStream(); - - XmlWriterSettings settings = new XmlWriterSettings(); - settings.Encoding = Encoding.UTF8; - - using (XmlWriter writer = XmlWriter.Create(buffer, settings)) + if (verb == "POST") { - XmlSerializer serializer = new XmlSerializer(type); - serializer.Serialize(writer, obj); - writer.Flush(); - } + request.ContentType = "text/xml"; - int length = (int)buffer.Length; - request.ContentLength = length; + buffer = new MemoryStream(); - if (WebUtil.DebugLevel >= 5) - WebUtil.LogOutgoingDetail(buffer); + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Encoding = Encoding.UTF8; - request.BeginGetRequestStream(delegate(IAsyncResult res) - { - Stream requestStream = request.EndGetRequestStream(res); - - requestStream.Write(buffer.ToArray(), 0, length); - requestStream.Close(); - - // capture how much time was spent writing - tickdata = Util.EnvironmentTickCountSubtract(tickstart); - - request.BeginGetResponse(delegate(IAsyncResult ar) + using (XmlWriter writer = XmlWriter.Create(buffer, settings)) { - response = request.EndGetResponse(ar); - Stream respStream = null; - try - { - respStream = response.GetResponseStream(); - deserial = (TResponse)deserializer.Deserialize( - respStream); - } - catch (System.InvalidOperationException) - { - } - finally - { - // Let's not close this - //buffer.Close(); - respStream.Close(); - response.Close(); - } - - action(deserial); - - }, null); - }, null); - } - else - { - request.BeginGetResponse(delegate(IAsyncResult res2) - { - try - { - // If the server returns a 404, this appears to trigger a System.Net.WebException even though that isn't - // documented in MSDN - response = request.EndGetResponse(res2); - - Stream respStream = null; - try - { - respStream = response.GetResponseStream(); - deserial = (TResponse)deserializer.Deserialize(respStream); - } - catch (System.InvalidOperationException) - { - } - finally - { - respStream.Close(); - response.Close(); - } + XmlSerializer serializer = new XmlSerializer(type); + serializer.Serialize(writer, obj); + writer.Flush(); } - catch (WebException e) + + int length = (int)buffer.Length; + request.ContentLength = length; + + if (WebUtil.DebugLevel >= 5) + WebUtil.LogOutgoingDetail(buffer); + + request.BeginGetRequestStream(delegate(IAsyncResult res) { - if (e.Status == WebExceptionStatus.ProtocolError) + using (Stream requestStream = request.EndGetRequestStream(res)) + requestStream.Write(buffer.ToArray(), 0, length); + + // capture how much time was spent writing + tickdata = Util.EnvironmentTickCountSubtract(tickstart); + + request.BeginGetResponse(delegate(IAsyncResult ar) { - if (e.Response is HttpWebResponse) + using (WebResponse response = request.EndGetResponse(ar)) { - using (HttpWebResponse httpResponse = (HttpWebResponse)e.Response) - { - if (httpResponse.StatusCode != HttpStatusCode.NotFound) - { - // We don't appear to be handling any other status codes, so log these feailures to that - // people don't spend unnecessary hours hunting phantom bugs. - m_log.DebugFormat( - "[ASYNC REQUEST]: Request {0} {1} failed with unexpected status code {2}", - verb, requestUrl, httpResponse.StatusCode); - } + try + { + using (Stream respStream = response.GetResponseStream()) + deserial = (TResponse)deserializer.Deserialize(respStream); + } + catch (System.InvalidOperationException) + { + } + } + + action(deserial); + + }, null); + }, null); + } + else + { + request.BeginGetResponse(delegate(IAsyncResult res2) + { + try + { + // If the server returns a 404, this appears to trigger a System.Net.WebException even though that isn't + // documented in MSDN + using (WebResponse response = request.EndGetResponse(res2)) + { + try + { + using (Stream respStream = response.GetResponseStream()) + deserial = (TResponse)deserializer.Deserialize(respStream); + } + catch (System.InvalidOperationException) + { } } } - else + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) + { + if (e.Response is HttpWebResponse) + { + using (HttpWebResponse httpResponse = (HttpWebResponse)e.Response) + { + if (httpResponse.StatusCode != HttpStatusCode.NotFound) + { + // We don't appear to be handling any other status codes, so log these feailures to that + // people don't spend unnecessary hours hunting phantom bugs. + m_log.DebugFormat( + "[ASYNC REQUEST]: Request {0} {1} failed with unexpected status code {2}", + verb, requestUrl, httpResponse.StatusCode); + } + } + } + } + else + { + m_log.ErrorFormat( + "[ASYNC REQUEST]: Request {0} {1} failed with status {2} and message {3}", + verb, requestUrl, e.Status, e.Message); + } + } + catch (Exception e) { m_log.ErrorFormat( - "[ASYNC REQUEST]: Request {0} {1} failed with status {2} and message {3}", - verb, requestUrl, e.Status, e.Message); + "[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}", + verb, requestUrl, e.Message, e.StackTrace); } - } - catch (Exception e) - { - m_log.ErrorFormat( - "[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}", - verb, requestUrl, e.Message, e.StackTrace); - } - - // m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); + + // m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); - try - { - action(deserial); - } - catch (Exception e) - { - m_log.ErrorFormat( - "[ASYNC REQUEST]: Request {0} {1} callback failed with exception {2}{3}", - verb, requestUrl, e.Message, e.StackTrace); - } - - }, null); - } - - int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); - if (tickdiff > WebUtil.LongCallTime) - { - string originalRequest = null; - - if (buffer != null) - { - originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); - - if (originalRequest.Length > WebUtil.MaxRequestDiagLength) - originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); + try + { + action(deserial); + } + catch (Exception e) + { + m_log.ErrorFormat( + "[ASYNC REQUEST]: Request {0} {1} callback failed with exception {2}{3}", + verb, requestUrl, e.Message, e.StackTrace); + } + + }, null); } - m_log.InfoFormat( - "[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", - reqnum, - verb, - requestUrl, - tickdiff, - tickdata, - originalRequest); + int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); + if (tickdiff > WebUtil.LongCallTime) + { + string originalRequest = null; + + if (buffer != null) + { + originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); + + if (originalRequest.Length > WebUtil.MaxRequestDiagLength) + originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); + } + + m_log.InfoFormat( + "[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", + reqnum, + verb, + requestUrl, + tickdiff, + tickdata, + originalRequest); + } + else if (WebUtil.DebugLevel >= 4) + { + m_log.DebugFormat( + "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", + reqnum, tickdiff, tickdata); + } } - else if (WebUtil.DebugLevel >= 4) - { - m_log.DebugFormat( - "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", - reqnum, tickdiff, tickdata); + finally + { + if (buffer != null) + buffer.Dispose(); } } } @@ -1056,11 +1050,6 @@ namespace OpenSim.Framework "[FORMS]: Exception occured on receiving {0} {1}: {2}{3}", verb, requestUrl, e.Message, e.StackTrace); } - finally - { - if (respStream != null) - respStream.Close(); - } } } } @@ -1145,128 +1134,132 @@ namespace OpenSim.Framework request.Method = verb; MemoryStream buffer = null; - if ((verb == "POST") || (verb == "PUT")) + try { - request.ContentType = "text/xml"; - - buffer = new MemoryStream(); - - XmlWriterSettings settings = new XmlWriterSettings(); - settings.Encoding = Encoding.UTF8; - - using (XmlWriter writer = XmlWriter.Create(buffer, settings)) + if ((verb == "POST") || (verb == "PUT")) { - XmlSerializer serializer = new XmlSerializer(type); - serializer.Serialize(writer, obj); - writer.Flush(); + request.ContentType = "text/xml"; + + buffer = new MemoryStream(); + + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Encoding = Encoding.UTF8; + + using (XmlWriter writer = XmlWriter.Create(buffer, settings)) + { + XmlSerializer serializer = new XmlSerializer(type); + serializer.Serialize(writer, obj); + writer.Flush(); + } + + int length = (int)buffer.Length; + request.ContentLength = length; + + if (WebUtil.DebugLevel >= 5) + WebUtil.LogOutgoingDetail(buffer); + + try + { + using (Stream requestStream = request.GetRequestStream()) + requestStream.Write(buffer.ToArray(), 0, length); + } + catch (Exception e) + { + m_log.DebugFormat( + "[SynchronousRestObjectRequester]: Exception in making request {0} {1}: {2}{3}", + verb, requestUrl, e.Message, e.StackTrace); + + return deserial; + } + finally + { + // capture how much time was spent writing + tickdata = Util.EnvironmentTickCountSubtract(tickstart); + } } - int length = (int)buffer.Length; - request.ContentLength = length; - - if (WebUtil.DebugLevel >= 5) - WebUtil.LogOutgoingDetail(buffer); - - Stream requestStream = null; try { - requestStream = request.GetRequestStream(); - requestStream.Write(buffer.ToArray(), 0, length); + using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) + { + if (resp.ContentLength != 0) + { + using (Stream respStream = resp.GetResponseStream()) + { + XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); + deserial = (TResponse)deserializer.Deserialize(respStream); + } + } + else + { + m_log.DebugFormat( + "[SynchronousRestObjectRequester]: Oops! no content found in response stream from {0} {1}", + verb, requestUrl); + } + } + } + catch (WebException e) + { + using (HttpWebResponse hwr = (HttpWebResponse)e.Response) + { + if (hwr != null && hwr.StatusCode == HttpStatusCode.NotFound) + return deserial; + else + m_log.ErrorFormat( + "[SynchronousRestObjectRequester]: WebException for {0} {1} {2}: {3} {4}", + verb, requestUrl, typeof(TResponse).ToString(), e.Message, e.StackTrace); + } + } + catch (System.InvalidOperationException) + { + // This is what happens when there is invalid XML + m_log.DebugFormat( + "[SynchronousRestObjectRequester]: Invalid XML from {0} {1} {2}", + verb, requestUrl, typeof(TResponse).ToString()); } catch (Exception e) { m_log.DebugFormat( - "[SynchronousRestObjectRequester]: Exception in making request {0} {1}: {2}{3}", + "[SynchronousRestObjectRequester]: Exception on response from {0} {1}: {2}{3}", verb, requestUrl, e.Message, e.StackTrace); - - return deserial; } - finally - { - if (requestStream != null) - requestStream.Dispose(); - // capture how much time was spent writing - tickdata = Util.EnvironmentTickCountSubtract(tickstart); - } - } - - try - { - using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) + int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); + if (tickdiff > WebUtil.LongCallTime) { - if (resp.ContentLength != 0) + string originalRequest = null; + + if (buffer != null) { - using (Stream respStream = resp.GetResponseStream()) - { - XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); - deserial = (TResponse)deserializer.Deserialize(respStream); - } - } - else - { - m_log.DebugFormat( - "[SynchronousRestObjectRequester]: Oops! no content found in response stream from {0} {1}", - verb, requestUrl); + originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); + + if (originalRequest.Length > WebUtil.MaxRequestDiagLength) + originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); } + + m_log.InfoFormat( + "[SynchronousRestObjectRequester]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", + reqnum, + verb, + requestUrl, + tickdiff, + tickdata, + originalRequest); } - } - catch (WebException e) - { - using (HttpWebResponse hwr = (HttpWebResponse)e.Response) + else if (WebUtil.DebugLevel >= 4) { - if (hwr != null && hwr.StatusCode == HttpStatusCode.NotFound) - return deserial; - else - m_log.ErrorFormat( - "[SynchronousRestObjectRequester]: WebException for {0} {1} {2}: {3} {4}", - verb, requestUrl, typeof(TResponse).ToString(), e.Message, e.StackTrace); + m_log.DebugFormat( + "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", + reqnum, tickdiff, tickdata); } } - catch (System.InvalidOperationException) + finally { - // This is what happens when there is invalid XML - m_log.DebugFormat( - "[SynchronousRestObjectRequester]: Invalid XML from {0} {1} {2}", - verb, requestUrl, typeof(TResponse).ToString()); - } - catch (Exception e) - { - m_log.DebugFormat( - "[SynchronousRestObjectRequester]: Exception on response from {0} {1}: {2}{3}", - verb, requestUrl, e.Message, e.StackTrace); - } - - int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); - if (tickdiff > WebUtil.LongCallTime) - { - string originalRequest = null; - if (buffer != null) - { - originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); - - if (originalRequest.Length > WebUtil.MaxRequestDiagLength) - originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); - } - - m_log.InfoFormat( - "[SynchronousRestObjectRequester]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", - reqnum, - verb, - requestUrl, - tickdiff, - tickdata, - originalRequest); - } - else if (WebUtil.DebugLevel >= 4) - { - m_log.DebugFormat( - "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", - reqnum, tickdiff, tickdata); + buffer.Dispose(); } return deserial; } } -} +} \ No newline at end of file