From f901a3820497e0d99accb6f5f60f6517e07c2c8f Mon Sep 17 00:00:00 2001
From: Oren Hurvitz
Date: Thu, 28 Nov 2013 23:07:14 +0200
Subject: Improved logging of HTTP requests - MemoryBuffer isn't seekable, so
we can't log it. Log the string instead. - Handle compressed streams - Don't
attempt to dump binary data. Either don't log it at all (if we know it's
binary), or at least convert non-ASCII characters to ASCII. - Log responses
to HTTP requests - Use the same log prefix for all of these log messages
("[LOGHTTP]"), to make them easy to see at a glance - Increased the snippet
length to 200 (80 doesn't show enough), and add "..." only if the message was
actually truncated
Resolves http://opensimulator.org/mantis/view.php?id=6949
---
OpenSim/Framework/Util.cs | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
(limited to 'OpenSim/Framework/Util.cs')
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index ae720f1..ce4af8b 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -1510,6 +1510,46 @@ namespace OpenSim.Framework
return result;
}
+ public static void BinaryToASCII(char[] chars)
+ {
+ for (int i = 0; i < chars.Length; i++)
+ {
+ char ch = chars[i];
+ if (ch < 32 || ch > 127)
+ chars[i] = '.';
+ }
+ }
+
+ public static string BinaryToASCII(string src)
+ {
+ char[] chars = src.ToCharArray();
+ BinaryToASCII(chars);
+ return new String(chars);
+ }
+
+ ///
+ /// Reads a known number of bytes from a stream.
+ /// Throws EndOfStreamException if the stream doesn't contain enough data.
+ ///
+ /// The stream to read data from
+ /// The array to write bytes into. The array
+ /// will be completely filled from the stream, so an appropriate
+ /// size must be given.
+ public static void ReadStream(Stream stream, byte[] data)
+ {
+ int offset = 0;
+ int remaining = data.Length;
+
+ while (remaining > 0)
+ {
+ int read = stream.Read(data, offset, remaining);
+ if (read <= 0)
+ throw new EndOfStreamException(String.Format("End of stream reached with {0} bytes left to read", remaining));
+ remaining -= read;
+ offset += read;
+ }
+ }
+
public static Guid GetHashGuid(string data, string salt)
{
byte[] hash = ComputeMD5Hash(data + salt);
--
cgit v1.1