Close streams immediately when we finish using them

bullet-2.82
Oren Hurvitz 2014-06-01 17:39:11 +03:00
parent b81187db5a
commit 99ac770abb
34 changed files with 426 additions and 485 deletions

View File

@ -215,18 +215,7 @@ namespace OpenSim.OfflineIM
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
#endregion #endregion

View File

@ -68,7 +68,10 @@ namespace OpenSim.Framework.Capabilities
/// <returns></returns> /// <returns></returns>
public static object LLSDDeserialize(byte[] b) public static object LLSDDeserialize(byte[] b)
{ {
return LLSDDeserialize(new MemoryStream(b, false)); using (MemoryStream ms = new MemoryStream(b, false))
{
return LLSDDeserialize(ms);
}
} }
/// <summary> /// <summary>
@ -78,21 +81,23 @@ namespace OpenSim.Framework.Capabilities
/// <returns></returns> /// <returns></returns>
public static object LLSDDeserialize(Stream st) public static object LLSDDeserialize(Stream st)
{ {
XmlTextReader reader = new XmlTextReader(st); using (XmlTextReader reader = new XmlTextReader(st))
reader.Read(); {
SkipWS(reader); reader.Read();
SkipWS(reader);
if (reader.NodeType != XmlNodeType.Element || reader.LocalName != "llsd") if (reader.NodeType != XmlNodeType.Element || reader.LocalName != "llsd")
throw new LLSDParseException("Expected <llsd>"); throw new LLSDParseException("Expected <llsd>");
reader.Read(); reader.Read();
object ret = LLSDParseOne(reader); object ret = LLSDParseOne(reader);
SkipWS(reader); SkipWS(reader);
if (reader.NodeType != XmlNodeType.EndElement || reader.LocalName != "llsd") if (reader.NodeType != XmlNodeType.EndElement || reader.LocalName != "llsd")
throw new LLSDParseException("Expected </llsd>"); throw new LLSDParseException("Expected </llsd>");
return ret; return ret;
}
} }
/// <summary> /// <summary>

View File

@ -56,7 +56,7 @@ namespace OpenSim.Framework.Communications
/// other threads to execute, while it waits for a response from the web-service. RestClient itself can be /// other threads to execute, while it waits for a response from the web-service. RestClient itself can be
/// invoked by the caller in either synchronous mode or asynchronous modes. /// invoked by the caller in either synchronous mode or asynchronous modes.
/// </remarks> /// </remarks>
public class RestClient public class RestClient : IDisposable
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -148,6 +148,33 @@ namespace OpenSim.Framework.Communications
#endregion constructors #endregion constructors
#region Dispose
private bool disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
_resource.Dispose();
}
disposed = true;
}
#endregion Dispose
/// <summary> /// <summary>
/// Add a path element to the query, e.g. assets /// Add a path element to the query, e.g. assets
/// </summary> /// </summary>

View File

@ -832,28 +832,40 @@ namespace OpenSim.Framework.Servers.HttpServer
return; // never log these; they're just binary data return; // never log these; they're just binary data
Stream inputStream = Util.Copy(request.InputStream); Stream inputStream = Util.Copy(request.InputStream);
Stream innerStream = null;
if ((request.Headers["Content-Encoding"] == "gzip") || (request.Headers["X-Content-Encoding"] == "gzip")) try
inputStream = new GZipStream(inputStream, System.IO.Compression.CompressionMode.Decompress);
using (StreamReader reader = new StreamReader(inputStream, Encoding.UTF8))
{ {
string output; if ((request.Headers["Content-Encoding"] == "gzip") || (request.Headers["X-Content-Encoding"] == "gzip"))
if (DebugLevel == 5)
{ {
char[] chars = new char[WebUtil.MaxRequestDiagLength + 1]; // +1 so we know to add "..." only if needed innerStream = inputStream;
int len = reader.Read(chars, 0, WebUtil.MaxRequestDiagLength + 1); inputStream = new GZipStream(innerStream, System.IO.Compression.CompressionMode.Decompress);
output = new string(chars, 0, Math.Min(len, WebUtil.MaxRequestDiagLength));
if (len > WebUtil.MaxRequestDiagLength)
output += "...";
}
else
{
output = reader.ReadToEnd();
} }
m_log.DebugFormat("[LOGHTTP] {0}", Util.BinaryToASCII(output)); using (StreamReader reader = new StreamReader(inputStream, Encoding.UTF8))
{
string output;
if (DebugLevel == 5)
{
char[] chars = new char[WebUtil.MaxRequestDiagLength + 1]; // +1 so we know to add "..." only if needed
int len = reader.Read(chars, 0, WebUtil.MaxRequestDiagLength + 1);
output = new string(chars, 0, Math.Min(len, WebUtil.MaxRequestDiagLength));
if (len > WebUtil.MaxRequestDiagLength)
output += "...";
}
else
{
output = reader.ReadToEnd();
}
m_log.DebugFormat("[LOGHTTP] {0}", Util.BinaryToASCII(output));
}
}
finally
{
if (innerStream != null)
innerStream.Dispose();
inputStream.Dispose();
} }
} }
@ -981,19 +993,33 @@ namespace OpenSim.Framework.Servers.HttpServer
/// <param name="response"></param> /// <param name="response"></param>
private byte[] HandleXmlRpcRequests(OSHttpRequest request, OSHttpResponse response) private byte[] HandleXmlRpcRequests(OSHttpRequest request, OSHttpResponse response)
{ {
String requestBody;
Stream requestStream = request.InputStream; Stream requestStream = request.InputStream;
Stream innerStream = null;
try
{
if ((request.Headers["Content-Encoding"] == "gzip") || (request.Headers["X-Content-Encoding"] == "gzip"))
{
innerStream = requestStream;
requestStream = new GZipStream(innerStream, System.IO.Compression.CompressionMode.Decompress);
}
if ((request.Headers["Content-Encoding"] == "gzip") || (request.Headers["X-Content-Encoding"] == "gzip")) using (StreamReader reader = new StreamReader(requestStream, Encoding.UTF8))
requestStream = new GZipStream(requestStream, System.IO.Compression.CompressionMode.Decompress); {
requestBody = reader.ReadToEnd();
}
}
finally
{
if (innerStream != null)
innerStream.Dispose();
requestStream.Dispose();
}
Encoding encoding = Encoding.UTF8;
StreamReader reader = new StreamReader(requestStream, encoding);
string requestBody = reader.ReadToEnd();
reader.Close();
requestStream.Close();
//m_log.Debug(requestBody); //m_log.Debug(requestBody);
requestBody = requestBody.Replace("<base64></base64>", ""); requestBody = requestBody.Replace("<base64></base64>", "");
string responseString = String.Empty; string responseString = String.Empty;
XmlRpcRequest xmlRprcRequest = null; XmlRpcRequest xmlRprcRequest = null;
@ -1089,18 +1115,16 @@ namespace OpenSim.Framework.Servers.HttpServer
response.ContentType = "text/xml"; response.ContentType = "text/xml";
using (MemoryStream outs = new MemoryStream()) using (MemoryStream outs = new MemoryStream())
using (XmlTextWriter writer = new XmlTextWriter(outs, Encoding.UTF8))
{ {
using (XmlTextWriter writer = new XmlTextWriter(outs, Encoding.UTF8)) writer.Formatting = Formatting.None;
XmlRpcResponseSerializer.Singleton.Serialize(writer, xmlRpcResponse);
writer.Flush();
outs.Flush();
outs.Position = 0;
using (StreamReader sr = new StreamReader(outs))
{ {
writer.Formatting = Formatting.None; responseString = sr.ReadToEnd();
XmlRpcResponseSerializer.Singleton.Serialize(writer, xmlRpcResponse);
writer.Flush();
outs.Flush();
outs.Position = 0;
using (StreamReader sr = new StreamReader(outs))
{
responseString = sr.ReadToEnd();
}
} }
} }
} }

View File

@ -52,23 +52,25 @@ namespace OpenSim.Framework.Servers.HttpServer
request.Method = verb; request.Method = verb;
request.ContentType = "text/xml"; request.ContentType = "text/xml";
MemoryStream buffer = new MemoryStream(); using (MemoryStream buffer = new MemoryStream())
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
{ {
XmlSerializer serializer = new XmlSerializer(type); XmlWriterSettings settings = new XmlWriterSettings();
serializer.Serialize(writer, obj); settings.Encoding = Encoding.UTF8;
writer.Flush();
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;
using (Stream requestStream = request.GetRequestStream())
requestStream.Write(buffer.ToArray(), 0, length);
} }
int length = (int) buffer.Length;
request.ContentLength = length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(buffer.ToArray(), 0, length);
// IAsyncResult result = request.BeginGetResponse(AsyncCallback, request); // IAsyncResult result = request.BeginGetResponse(AsyncCallback, request);
request.BeginGetResponse(AsyncCallback, request); request.BeginGetResponse(AsyncCallback, request);
} }

View File

@ -60,24 +60,25 @@ namespace OpenSim.Framework.Servers.HttpServer
request.ContentType = "text/xml"; request.ContentType = "text/xml";
request.Timeout = 10000; request.Timeout = 10000;
MemoryStream buffer = new MemoryStream(); using (MemoryStream buffer = new MemoryStream())
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
{ {
XmlSerializer serializer = new XmlSerializer(type); XmlWriterSettings settings = new XmlWriterSettings();
serializer.Serialize(writer, obj); settings.Encoding = Encoding.UTF8;
writer.Flush();
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;
using (Stream requestStream = request.GetRequestStream())
requestStream.Write(buffer.ToArray(), 0, length);
} }
int length = (int) buffer.Length;
request.ContentLength = length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(buffer.ToArray(), 0, length);
requestStream.Close();
// IAsyncResult result = request.BeginGetResponse(AsyncCallback, request); // IAsyncResult result = request.BeginGetResponse(AsyncCallback, request);
request.BeginGetResponse(AsyncCallback, request); request.BeginGetResponse(AsyncCallback, request);
} }

View File

@ -77,26 +77,25 @@ namespace OpenSim.Framework.Servers.HttpServer
request.ContentType = "text/xml"; request.ContentType = "text/xml";
request.Timeout = 20000; request.Timeout = 20000;
MemoryStream buffer = new MemoryStream(); using (MemoryStream buffer = new MemoryStream())
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
{ {
XmlSerializer serializer = new XmlSerializer(type); XmlWriterSettings settings = new XmlWriterSettings();
serializer.Serialize(writer, sobj); settings.Encoding = Encoding.UTF8;
writer.Flush();
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
{
XmlSerializer serializer = new XmlSerializer(type);
serializer.Serialize(writer, sobj);
writer.Flush();
}
int length = (int)buffer.Length;
request.ContentLength = length;
using (Stream requestStream = request.GetRequestStream())
requestStream.Write(buffer.ToArray(), 0, length);
} }
int length = (int)buffer.Length;
request.ContentLength = length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(buffer.ToArray(), 0, length);
buffer.Close();
requestStream.Close();
TResponse deserial = default(TResponse); TResponse deserial = default(TResponse);
using (WebResponse resp = request.GetResponse()) using (WebResponse resp = request.GetResponse())
{ {
@ -133,25 +132,25 @@ namespace OpenSim.Framework.Servers.HttpServer
request.ContentType = "text/xml"; request.ContentType = "text/xml";
request.Timeout = 10000; request.Timeout = 10000;
MemoryStream buffer = new MemoryStream(); using (MemoryStream buffer = new MemoryStream())
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
{ {
XmlSerializer serializer = new XmlSerializer(type); XmlWriterSettings settings = new XmlWriterSettings();
serializer.Serialize(writer, sobj); settings.Encoding = Encoding.UTF8;
writer.Flush();
using (XmlWriter writer = XmlWriter.Create(buffer, settings))
{
XmlSerializer serializer = new XmlSerializer(type);
serializer.Serialize(writer, sobj);
writer.Flush();
}
int length = (int)buffer.Length;
request.ContentLength = length;
using (Stream requestStream = request.GetRequestStream())
requestStream.Write(buffer.ToArray(), 0, length);
} }
buffer.Close();
int length = (int)buffer.Length;
request.ContentLength = length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(buffer.ToArray(), 0, length);
requestStream.Close();
// IAsyncResult result = request.BeginGetResponse(AsyncCallback, request); // IAsyncResult result = request.BeginGetResponse(AsyncCallback, request);
request.BeginGetResponse(AsyncCallback, request); request.BeginGetResponse(AsyncCallback, request);
} }

View File

@ -509,6 +509,19 @@ namespace OpenSim.Framework
return sb.ToString(); return sb.ToString();
} }
public static byte[] DocToBytes(XmlDocument doc)
{
using (MemoryStream ms = new MemoryStream())
using (XmlTextWriter xw = new XmlTextWriter(ms, null))
{
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
}
}
/// <summary> /// <summary>
/// Is the platform Windows? /// Is the platform Windows?
/// </summary> /// </summary>
@ -1307,46 +1320,6 @@ namespace OpenSim.Framework
return ret; return ret;
} }
public static string Compress(string text)
{
byte[] buffer = Util.UTF8.GetBytes(text);
MemoryStream memory = new MemoryStream();
using (GZipStream compressor = new GZipStream(memory, CompressionMode.Compress, true))
{
compressor.Write(buffer, 0, buffer.Length);
}
memory.Position = 0;
byte[] compressed = new byte[memory.Length];
memory.Read(compressed, 0, compressed.Length);
byte[] compressedBuffer = new byte[compressed.Length + 4];
Buffer.BlockCopy(compressed, 0, compressedBuffer, 4, compressed.Length);
Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, compressedBuffer, 0, 4);
return Convert.ToBase64String(compressedBuffer);
}
public static string Decompress(string compressedText)
{
byte[] compressedBuffer = Convert.FromBase64String(compressedText);
using (MemoryStream memory = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(compressedBuffer, 0);
memory.Write(compressedBuffer, 4, compressedBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
memory.Position = 0;
using (GZipStream decompressor = new GZipStream(memory, CompressionMode.Decompress))
{
decompressor.Read(buffer, 0, buffer.Length);
}
return Util.UTF8.GetString(buffer);
}
}
/// <summary> /// <summary>
/// Copy data from one stream to another, leaving the read position of both streams at the beginning. /// Copy data from one stream to another, leaving the read position of both streams at the beginning.
/// </summary> /// </summary>

View File

@ -176,7 +176,8 @@ namespace OpenSim.Framework
public static void LogOutgoingDetail(string context, Stream outputStream) public static void LogOutgoingDetail(string context, Stream outputStream)
{ {
using (StreamReader reader = new StreamReader(Util.Copy(outputStream), Encoding.UTF8)) using (Stream stream = Util.Copy(outputStream))
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{ {
string output; string output;
@ -262,12 +263,12 @@ namespace OpenSim.Framework
using (MemoryStream ms = new MemoryStream()) using (MemoryStream ms = new MemoryStream())
{ {
using (GZipStream comp = new GZipStream(ms, CompressionMode.Compress)) using (GZipStream comp = new GZipStream(ms, CompressionMode.Compress, true))
{ {
comp.Write(buffer, 0, buffer.Length); comp.Write(buffer, 0, buffer.Length);
// We need to close the gzip stream before we write it anywhere // We need to close the gzip stream before we write it anywhere
// because apparently something important related to gzip compression // because apparently something important related to gzip compression
// gets written on the strteam upon Dispose() // gets written on the stream upon Dispose()
} }
byte[] buf = ms.ToArray(); byte[] buf = ms.ToArray();
request.ContentLength = buf.Length; //Count bytes to send request.ContentLength = buf.Length; //Count bytes to send

View File

@ -231,7 +231,11 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
{ {
try try
{ {
List<int> layerStarts = CSJ2K.J2kImage.GetLayerBoundaries(new MemoryStream(j2kData)); List<int> layerStarts;
using (MemoryStream ms = new MemoryStream(j2kData))
{
layerStarts = CSJ2K.J2kImage.GetLayerBoundaries(ms);
}
if (layerStarts != null && layerStarts.Count > 0) if (layerStarts != null && layerStarts.Count > 0)
{ {

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -289,18 +289,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
#endregion #endregion

View File

@ -918,17 +918,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver
{ {
ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>(); ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>();
MemoryStream ms = new MemoryStream(data); using (MemoryStream ms = new MemoryStream(data))
if (m_displacement != Vector3.Zero || m_rotation != 0f)
{ {
Vector2 rotationCenter = new Vector2(m_rotationCenter.X, m_rotationCenter.Y); if (m_displacement != Vector3.Zero || m_rotation != 0f)
terrainModule.LoadFromStream(terrainPath, m_displacement, m_rotation, rotationCenter, ms); {
Vector2 rotationCenter = new Vector2(m_rotationCenter.X, m_rotationCenter.Y);
terrainModule.LoadFromStream(terrainPath, m_displacement, m_rotation, rotationCenter, ms);
}
else
{
terrainModule.LoadFromStream(terrainPath, ms);
}
} }
else
{
terrainModule.LoadFromStream(terrainPath, ms);
}
ms.Close();
m_log.DebugFormat("[ARCHIVER]: Restored terrain {0}", terrainPath); m_log.DebugFormat("[ARCHIVER]: Restored terrain {0}", terrainPath);

View File

@ -569,10 +569,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
string terrainPath = String.Format("{0}{1}{2}.r32", string terrainPath = String.Format("{0}{1}{2}.r32",
regionDir, ArchiveConstants.TERRAINS_PATH, scene.RegionInfo.RegionName); regionDir, ArchiveConstants.TERRAINS_PATH, scene.RegionInfo.RegionName);
MemoryStream ms = new MemoryStream(); using (MemoryStream ms = new MemoryStream())
scene.RequestModuleInterface<ITerrainModule>().SaveToStream(terrainPath, ms); {
m_archiveWriter.WriteFile(terrainPath, ms.ToArray()); scene.RequestModuleInterface<ITerrainModule>().SaveToStream(terrainPath, ms);
ms.Close(); m_archiveWriter.WriteFile(terrainPath, ms.ToArray());
}
m_log.InfoFormat("[ARCHIVER]: Adding scene objects to archive."); m_log.InfoFormat("[ARCHIVER]: Adding scene objects to archive.");

View File

@ -1121,9 +1121,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
{ {
try try
{ {
MemoryStream terrainStream = new MemoryStream(terrainData); using (MemoryStream terrainStream = new MemoryStream(terrainData))
terr.LoadFromStream(filename, terrainStream); terr.LoadFromStream(filename, terrainStream);
terrainStream.Close();
FileInfo x = new FileInfo(filename); FileInfo x = new FileInfo(filename);
remoteClient.SendAlertMessage("Your terrain was loaded as a " + x.Extension + " file. It may take a few moments to appear."); remoteClient.SendAlertMessage("Your terrain was loaded as a " + x.Extension + " file. It may take a few moments to appear.");

View File

@ -281,18 +281,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
}
} }
} }

View File

@ -54,13 +54,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser
{ {
string xmlstream = GetObjectXml(scene); string xmlstream = GetObjectXml(scene);
MemoryStream stream = ReformatXmlString(xmlstream); using (MemoryStream stream = ReformatXmlString(xmlstream))
{
stream.Seek(0, SeekOrigin.Begin);
CreateXmlFile(stream, fileName);
stream.Seek(0, SeekOrigin.Begin); stream.Seek(0, SeekOrigin.Begin);
CreateXmlFile(stream, fileName); CreateCompressedXmlFile(stream, fileName);
}
stream.Seek(0, SeekOrigin.Begin);
CreateCompressedXmlFile(stream, fileName);
} }
private static MemoryStream ReformatXmlString(string xmlstream) private static MemoryStream ReformatXmlString(string xmlstream)
@ -112,13 +113,16 @@ namespace OpenSim.Region.CoreModules.World.Serialiser
{ {
#region GZip Compressed Version #region GZip Compressed Version
FileStream objectsFileCompressed = new FileStream(fileName + ".gzs", FileMode.Create); using (FileStream objectsFileCompressed = new FileStream(fileName + ".gzs", FileMode.Create))
MemoryStream gzipMSStream = new MemoryStream(); using (MemoryStream gzipMSStream = new MemoryStream())
GZipStream gzipStream = new GZipStream(gzipMSStream, CompressionMode.Compress); {
xmlStream.WriteTo(gzipStream); using (GZipStream gzipStream = new GZipStream(gzipMSStream, CompressionMode.Compress, true))
gzipMSStream.WriteTo(objectsFileCompressed); {
objectsFileCompressed.Flush(); xmlStream.WriteTo(gzipStream);
objectsFileCompressed.Close(); }
gzipMSStream.WriteTo(objectsFileCompressed);
}
#endregion #endregion
} }

View File

@ -1145,7 +1145,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
if (myMapImageJPEG.Length == 0) if (myMapImageJPEG.Length == 0)
{ {
MemoryStream imgstream = new MemoryStream(); MemoryStream imgstream = null;
Bitmap mapTexture = new Bitmap(1,1); Bitmap mapTexture = new Bitmap(1,1);
ManagedImage managedImage; ManagedImage managedImage;
Image image = (Image)mapTexture; Image image = (Image)mapTexture;
@ -1192,10 +1192,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
image.Dispose(); image.Dispose();
if (imgstream != null) if (imgstream != null)
{
imgstream.Close();
imgstream.Dispose(); imgstream.Dispose();
}
} }
} }
else else

View File

@ -373,24 +373,27 @@ namespace OpenSim.Region.DataSnapshot
for (int i = 0; i < services.Length; i++) for (int i = 0; i < services.Length; i++)
{ {
string url = services[i].Trim(); string url = services[i].Trim();
RestClient cli = new RestClient(url); using (RestClient cli = new RestClient(url))
cli.AddQueryParameter("service", serviceName);
cli.AddQueryParameter("host", m_hostname);
cli.AddQueryParameter("port", m_listener_port);
cli.AddQueryParameter("secret", m_Secret.ToString());
cli.RequestMethod = "GET";
try
{ {
reply = cli.Request(null); cli.AddQueryParameter("service", serviceName);
} cli.AddQueryParameter("host", m_hostname);
catch (WebException) cli.AddQueryParameter("port", m_listener_port);
{ cli.AddQueryParameter("secret", m_Secret.ToString());
m_log.Warn("[DATASNAPSHOT]: Unable to notify " + url); cli.RequestMethod = "GET";
} try
catch (Exception e) {
{ reply = cli.Request(null);
m_log.Warn("[DATASNAPSHOT]: Ignoring unknown exception " + e.ToString()); }
catch (WebException)
{
m_log.Warn("[DATASNAPSHOT]: Unable to notify " + url);
}
catch (Exception e)
{
m_log.Warn("[DATASNAPSHOT]: Ignoring unknown exception " + e.ToString());
}
} }
byte[] response = new byte[1024]; byte[] response = new byte[1024];
// int n = 0; // int n = 0;
try try

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
@ -113,31 +113,34 @@ namespace OpenSim.Region.Framework.Scenes.Animation
public byte[] ToBytes() public byte[] ToBytes()
{ {
byte[] outputbytes = new byte[0]; byte[] outputbytes;
BinaryWriter iostream = new BinaryWriter(new MemoryStream()); using (MemoryStream ms = new MemoryStream())
iostream.Write(BinBVHUtil.ES(Utils.UInt16ToBytes(unknown0))); using (BinaryWriter iostream = new BinaryWriter(ms))
iostream.Write(BinBVHUtil.ES(Utils.UInt16ToBytes(unknown1)));
iostream.Write(BinBVHUtil.ES(Utils.IntToBytes(Priority)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(Length)));
iostream.Write(BinBVHUtil.WriteNullTerminatedString(ExpressionName));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(InPoint)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(OutPoint)));
iostream.Write(BinBVHUtil.ES(Utils.IntToBytes(Loop ? 1 : 0)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(EaseInTime)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(EaseOutTime)));
iostream.Write(BinBVHUtil.ES(Utils.UIntToBytes(HandPose)));
iostream.Write(BinBVHUtil.ES(Utils.UIntToBytes((uint)(Joints.Length))));
for (int i = 0; i < Joints.Length; i++)
{ {
Joints[i].WriteBytesToStream(iostream, InPoint, OutPoint); iostream.Write(BinBVHUtil.ES(Utils.UInt16ToBytes(unknown0)));
iostream.Write(BinBVHUtil.ES(Utils.UInt16ToBytes(unknown1)));
iostream.Write(BinBVHUtil.ES(Utils.IntToBytes(Priority)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(Length)));
iostream.Write(BinBVHUtil.WriteNullTerminatedString(ExpressionName));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(InPoint)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(OutPoint)));
iostream.Write(BinBVHUtil.ES(Utils.IntToBytes(Loop ? 1 : 0)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(EaseInTime)));
iostream.Write(BinBVHUtil.ES(Utils.FloatToBytes(EaseOutTime)));
iostream.Write(BinBVHUtil.ES(Utils.UIntToBytes(HandPose)));
iostream.Write(BinBVHUtil.ES(Utils.UIntToBytes((uint)(Joints.Length))));
for (int i = 0; i < Joints.Length; i++)
{
Joints[i].WriteBytesToStream(iostream, InPoint, OutPoint);
}
iostream.Write(BinBVHUtil.ES(Utils.IntToBytes(0)));
using (MemoryStream ms2 = (MemoryStream)iostream.BaseStream)
outputbytes = ms2.ToArray();
} }
iostream.Write(BinBVHUtil.ES(Utils.IntToBytes(0)));
MemoryStream ms = (MemoryStream)iostream.BaseStream;
outputbytes = ms.ToArray();
ms.Close();
iostream.Close();
return outputbytes; return outputbytes;
} }

View File

@ -308,10 +308,11 @@ namespace OpenSim.Region.Framework.Scenes
try try
{ {
MemoryStream ms = new MemoryStream(data); using (MemoryStream ms = new MemoryStream(data))
BinaryFormatter fmt = new BinaryFormatter(); {
BinaryFormatter fmt = new BinaryFormatter();
newMotion = (KeyframeMotion)fmt.Deserialize(ms); newMotion = (KeyframeMotion)fmt.Deserialize(ms);
}
newMotion.m_group = grp; newMotion.m_group = grp;
@ -764,19 +765,22 @@ namespace OpenSim.Region.Framework.Scenes
public Byte[] Serialize() public Byte[] Serialize()
{ {
StopTimer(); StopTimer();
MemoryStream ms = new MemoryStream();
BinaryFormatter fmt = new BinaryFormatter();
SceneObjectGroup tmp = m_group; SceneObjectGroup tmp = m_group;
m_group = null; m_group = null;
if (!m_selected && tmp != null) if (!m_selected && tmp != null)
m_serializedPosition = tmp.AbsolutePosition; m_serializedPosition = tmp.AbsolutePosition;
fmt.Serialize(ms, this);
m_group = tmp;
if (m_running && !m_waitingCrossing)
StartTimer();
return ms.ToArray(); using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter fmt = new BinaryFormatter();
fmt.Serialize(ms, this);
m_group = tmp;
if (m_running && !m_waitingCrossing)
StartTimer();
return ms.ToArray();
}
} }
public void StartCrossingCheck() public void StartCrossingCheck()

View File

@ -458,35 +458,36 @@ namespace OpenSim.Region.Framework.Scenes
if (null == assetBase) if (null == assetBase)
return; return;
MemoryStream ms = new MemoryStream(assetBase.Data); using (MemoryStream ms = new MemoryStream(assetBase.Data))
StreamReader sr = new StreamReader(ms); using (StreamReader sr = new StreamReader(ms))
sr.ReadLine(); // Unknown (Version?)
sr.ReadLine(); // Unknown
sr.ReadLine(); // Unknown
sr.ReadLine(); // Name
sr.ReadLine(); // Comment ?
int count = Convert.ToInt32(sr.ReadLine()); // Item count
for (int i = 0 ; i < count ; i++)
{ {
string type = sr.ReadLine(); sr.ReadLine(); // Unknown (Version?)
if (type == null) sr.ReadLine(); // Unknown
break; sr.ReadLine(); // Unknown
string name = sr.ReadLine(); sr.ReadLine(); // Name
if (name == null) sr.ReadLine(); // Comment ?
break; int count = Convert.ToInt32(sr.ReadLine()); // Item count
string id = sr.ReadLine();
if (id == null)
break;
string unknown = sr.ReadLine();
if (unknown == null)
break;
// If it can be parsed as a UUID, it is an asset ID for (int i = 0 ; i < count ; i++)
UUID uuid; {
if (UUID.TryParse(id, out uuid)) string type = sr.ReadLine();
assetUuids[uuid] = (sbyte)AssetType.Animation; if (type == null)
break;
string name = sr.ReadLine();
if (name == null)
break;
string id = sr.ReadLine();
if (id == null)
break;
string unknown = sr.ReadLine();
if (unknown == null)
break;
// If it can be parsed as a UUID, it is an asset ID
UUID uuid;
if (UUID.TryParse(id, out uuid))
assetUuids[uuid] = (sbyte)AssetType.Animation; // the asset is either an Animation or a Sound, but this distinction isn't important
}
} }
} }

View File

@ -196,17 +196,19 @@ namespace OpenSim.Server.Base
public static byte[] SerializeResult(XmlSerializer xs, object data) public static byte[] SerializeResult(XmlSerializer xs, object data)
{ {
MemoryStream ms = new MemoryStream(); using (MemoryStream ms = new MemoryStream())
XmlTextWriter xw = new XmlTextWriter(ms, Util.UTF8); using (XmlTextWriter xw = new XmlTextWriter(ms, Util.UTF8))
xw.Formatting = Formatting.Indented; {
xs.Serialize(xw, data); xw.Formatting = Formatting.Indented;
xw.Flush(); xs.Serialize(xw, data);
xw.Flush();
ms.Seek(0, SeekOrigin.Begin); ms.Seek(0, SeekOrigin.Begin);
byte[] ret = ms.GetBuffer(); byte[] ret = ms.GetBuffer();
Array.Resize(ref ret, (int)ms.Length); Array.Resize(ref ret, (int)ms.Length);
return ret; return ret;
}
} }
/// <summary> /// <summary>

View File

@ -209,7 +209,7 @@ namespace OpenSim.Server.Handlers.Authentication
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
byte[] GetAuthInfo(UUID principalID) byte[] GetAuthInfo(UUID principalID)
@ -279,7 +279,7 @@ namespace OpenSim.Server.Handlers.Authentication
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] SuccessResult(string token) private byte[] SuccessResult(string token)
@ -306,18 +306,7 @@ namespace OpenSim.Server.Handlers.Authentication
rootElement.AppendChild(t); rootElement.AppendChild(t);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.GetBuffer();
} }
private byte[] ResultToBytes(Dictionary<string, object> result) private byte[] ResultToBytes(Dictionary<string, object> result)

View File

@ -247,7 +247,7 @@ namespace OpenSim.Server.Handlers.Avatar
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] FailureResult() private byte[] FailureResult()
@ -269,18 +269,7 @@ namespace OpenSim.Server.Handlers.Avatar
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
} }

View File

@ -229,7 +229,7 @@ namespace OpenSim.Server.Handlers.Friends
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] FailureResult() private byte[] FailureResult()
@ -261,18 +261,7 @@ namespace OpenSim.Server.Handlers.Friends
rootElement.AppendChild(message); rootElement.AppendChild(message);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
void FromKeyValuePairs(Dictionary<string, object> kvp, out string principalID, out string friend, out int flags) void FromKeyValuePairs(Dictionary<string, object> kvp, out string principalID, out string friend, out int flags)

View File

@ -602,7 +602,7 @@ namespace OpenSim.Server.Handlers.Grid
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] FailureResult() private byte[] FailureResult()
@ -634,18 +634,7 @@ namespace OpenSim.Server.Handlers.Grid
rootElement.AppendChild(message); rootElement.AppendChild(message);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
#endregion #endregion

View File

@ -279,7 +279,7 @@ namespace OpenSim.Server.Handlers.GridUser
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] FailureResult() private byte[] FailureResult()
@ -301,20 +301,8 @@ namespace OpenSim.Server.Handlers.GridUser
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
}
} }
} }

View File

@ -335,7 +335,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] SuccessResult(string value) private byte[] SuccessResult(string value)
@ -362,7 +362,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
rootElement.AppendChild(message); rootElement.AppendChild(message);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
@ -395,7 +395,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
rootElement.AppendChild(message); rootElement.AppendChild(message);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] BoolResult(bool value) private byte[] BoolResult(bool value)
@ -417,21 +417,9 @@ namespace OpenSim.Server.Handlers.Hypergrid
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
}
#endregion #endregion
} }
} }

View File

@ -191,18 +191,7 @@ namespace OpenSim.Server.Handlers.Asset
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
byte[] HandleCreateUserInventory(Dictionary<string,object> request) byte[] HandleCreateUserInventory(Dictionary<string,object> request)

View File

@ -188,7 +188,7 @@ namespace OpenSim.Server.Handlers.MapImage
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] FailureResult(string msg) private byte[] FailureResult(string msg)
@ -215,18 +215,7 @@ namespace OpenSim.Server.Handlers.MapImage
rootElement.AppendChild(message); rootElement.AppendChild(message);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
private System.Net.IPAddress GetCallerIP(IOSHttpRequest request) private System.Net.IPAddress GetCallerIP(IOSHttpRequest request)

View File

@ -265,7 +265,7 @@ namespace OpenSim.Server.Handlers.Presence
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] FailureResult() private byte[] FailureResult()
@ -287,18 +287,7 @@ namespace OpenSim.Server.Handlers.Presence
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
} }

View File

@ -250,14 +250,30 @@ namespace OpenSim.Server.Handlers.Simulation
return encoding.GetBytes("false"); return encoding.GetBytes("false");
} }
string requestBody;
Stream inputStream = request; Stream inputStream = request;
if ((httpRequest.ContentType == "application/x-gzip" || httpRequest.Headers["Content-Encoding"] == "gzip") || (httpRequest.Headers["X-Content-Encoding"] == "gzip")) Stream innerStream = null;
inputStream = new GZipStream(inputStream, CompressionMode.Decompress); try
{
if ((httpRequest.ContentType == "application/x-gzip" || httpRequest.Headers["Content-Encoding"] == "gzip") || (httpRequest.Headers["X-Content-Encoding"] == "gzip"))
{
innerStream = inputStream;
inputStream = new GZipStream(innerStream, CompressionMode.Decompress);
}
StreamReader reader = new StreamReader(inputStream, encoding); using (StreamReader reader = new StreamReader(inputStream, encoding))
{
requestBody = reader.ReadToEnd();
}
}
finally
{
if (innerStream != null)
innerStream.Dispose();
inputStream.Dispose();
}
string requestBody = reader.ReadToEnd();
reader.Close();
keysvals.Add("body", requestBody); keysvals.Add("body", requestBody);
Hashtable responsedata = new Hashtable(); Hashtable responsedata = new Hashtable();
@ -461,15 +477,31 @@ namespace OpenSim.Server.Handlers.Simulation
keysvals.Add("headers", headervals); keysvals.Add("headers", headervals);
keysvals.Add("querystringkeys", querystringkeys); keysvals.Add("querystringkeys", querystringkeys);
Stream inputStream = request; String requestBody;
if ((httpRequest.ContentType == "application/x-gzip" || httpRequest.Headers["Content-Encoding"] == "gzip") || (httpRequest.Headers["X-Content-Encoding"] == "gzip"))
inputStream = new GZipStream(inputStream, CompressionMode.Decompress);
Encoding encoding = Encoding.UTF8; Encoding encoding = Encoding.UTF8;
StreamReader reader = new StreamReader(inputStream, encoding);
string requestBody = reader.ReadToEnd(); Stream inputStream = request;
reader.Close(); Stream innerStream = null;
try
{
if ((httpRequest.ContentType == "application/x-gzip" || httpRequest.Headers["Content-Encoding"] == "gzip") || (httpRequest.Headers["X-Content-Encoding"] == "gzip"))
{
innerStream = inputStream;
inputStream = new GZipStream(innerStream, CompressionMode.Decompress);
}
using (StreamReader reader = new StreamReader(inputStream, encoding))
{
requestBody = reader.ReadToEnd();
}
}
finally
{
if (innerStream != null)
innerStream.Dispose();
inputStream.Dispose();
}
keysvals.Add("body", requestBody); keysvals.Add("body", requestBody);
httpResponse.StatusCode = 200; httpResponse.StatusCode = 200;

View File

@ -315,7 +315,7 @@ namespace OpenSim.Server.Handlers.UserAccounts
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
} }
private byte[] FailureResult() private byte[] FailureResult()
@ -337,18 +337,7 @@ namespace OpenSim.Server.Handlers.UserAccounts
rootElement.AppendChild(result); rootElement.AppendChild(result);
return DocToBytes(doc); return Util.DocToBytes(doc);
}
private byte[] DocToBytes(XmlDocument doc)
{
MemoryStream ms = new MemoryStream();
XmlTextWriter xw = new XmlTextWriter(ms, null);
xw.Formatting = Formatting.Indented;
doc.WriteTo(xw);
xw.Flush();
return ms.ToArray();
} }
private byte[] ResultToBytes(Dictionary<string, object> result) private byte[] ResultToBytes(Dictionary<string, object> result)

View File

@ -171,27 +171,29 @@ namespace OpenSim.Services.Connectors
return fullAsset.Data; return fullAsset.Data;
} }
RestClient rc = new RestClient(m_ServerURI); using (RestClient rc = new RestClient(m_ServerURI))
rc.AddResourcePath("assets");
rc.AddResourcePath(id);
rc.AddResourcePath("data");
rc.RequestMethod = "GET";
Stream s = rc.Request(m_Auth);
if (s == null)
return null;
if (s.Length > 0)
{ {
byte[] ret = new byte[s.Length]; rc.AddResourcePath("assets");
s.Read(ret, 0, (int)s.Length); rc.AddResourcePath(id);
rc.AddResourcePath("data");
return ret; rc.RequestMethod = "GET";
Stream s = rc.Request(m_Auth);
if (s == null)
return null;
if (s.Length > 0)
{
byte[] ret = new byte[s.Length];
s.Read(ret, 0, (int)s.Length);
return ret;
}
return null;
} }
return null;
} }
public bool Get(string id, Object sender, AssetRetrieved handler) public bool Get(string id, Object sender, AssetRetrieved handler)