From 68baf9096a6c1bfbd9a5d782c0e16244af733795 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Mon, 19 Jan 2009 21:29:44 +0000 Subject: * Another image packet edge case. Thanks nebadon for printing a log of it --- .../Region/ClientStack/LindenUDP/LLImageManager.cs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs b/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs index 97e6bbe..6e81632 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs @@ -580,7 +580,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP // Console.WriteLine("ENdPacket"); //Console.WriteLine(String.Format("srcLen:{0}, BytePos:{1}, desLen:{2}, pktsize{3}", m_asset_ref.Data.Length, CurrentBytePosition(),0, imagePacketSize)); - + bool atEnd = false; + + // edge case + if ((CurrentBytePosition() + IMAGE_PACKET_SIZE) > m_asset_ref.Data.Length) + { + imagePacketSize = LastPacketSize(); + atEnd = true; + // edge case 2! + if ((CurrentBytePosition() + imagePacketSize) > m_asset_ref.Data.Length) + { + imagePacketSize = m_asset_ref.Data.Length - CurrentBytePosition(); + atEnd = true; + } + } + byte[] imageData = new byte[imagePacketSize]; try { Buffer.BlockCopy(m_asset_ref.Data, CurrentBytePosition(), imageData, 0, imagePacketSize); } catch (Exception e) @@ -596,7 +610,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP // Send next packet to the client client.SendImageNextPart((ushort)(CurrentPacket - 1), requestedUUID, imageData); + ++CurrentPacket; + + if (atEnd) + CurrentPacket = StopPacket + 1; + return true; } -- cgit v1.1