Merge branch 'master' into careminster-presence-refactor

avinationmerge
Melanie 2010-12-23 02:57:45 +00:00
commit d06456c8b2
2 changed files with 43 additions and 18 deletions

View File

@ -40,8 +40,8 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
private Scene m_scene;
private Dictionary<string, XferRequest> Requests = new Dictionary<string, XferRequest>();
private List<XferRequest> RequestTime = new List<XferRequest>();
public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>();
public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
private Dictionary<string, FileData> NewFiles = new Dictionary<string, FileData>();
private Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
public struct XferRequest
@ -52,6 +52,12 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
public DateTime timeStamp;
}
private class FileData
{
public byte[] Data;
public int Count;
}
#region IRegionModule Members
public void Initialise(Scene scene, IConfigSource config)
@ -89,21 +95,22 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
lock (NewFiles)
{
if (NewFiles.ContainsKey(fileName))
{
NewFiles[fileName] = data;
}
NewFiles[fileName].Count++;
else
{
NewFiles.Add(fileName, data);
FileData fd = new FileData();
fd.Count = 1;
fd.Data = data;
NewFiles.Add(fileName, fd);
}
}
string filename = string.Empty;
if (Requests.ContainsKey(fileName))
{
RequestXfer(Requests[fileName].remoteClient, Requests[fileName].xferID, fileName);
Requests.Remove(fileName);
}
// This should not be here
//if (Requests.ContainsKey(fileName))
//{
// RequestXfer(Requests[fileName].remoteClient, Requests[fileName].xferID, fileName);
// Requests.Remove(fileName);
//}
return true;
}
@ -135,6 +142,7 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
ulong zxferid = RequestTime[0].xferID;
remoteClient.SendAbortXferPacket(zxferid);
RemoveXferData(zxferid);
RemoveOrDecrement(fileName);
}
}
@ -142,16 +150,19 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
{
if (!Transfers.ContainsKey(xferID))
{
byte[] fileData = NewFiles[fileName];
byte[] fileData = NewFiles[fileName].Data;
XferDownLoad transaction = new XferDownLoad(fileName, fileData, xferID, remoteClient);
Transfers.Add(xferID, transaction);
NewFiles.Remove(fileName);
if (transaction.StartSend())
{
RemoveXferData(xferID);
}
// The transaction for this file is either complete or on its way
RemoveOrDecrement(fileName);
}
}
else
@ -195,6 +206,7 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
{
{
RemoveXferData(xferID);
RemoveOrDecrement(dl.FileName);
}
}
else
@ -226,8 +238,6 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
xferItem.DataPointer = 0;
// If the abort comes in
if (NewFiles.ContainsKey(xferItem.FileName))
NewFiles.Remove(xferItem.FileName);
if (Requests.ContainsKey(xferItem.FileName))
Requests.Remove(xferItem.FileName);
@ -239,10 +249,26 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
{
lock (NewFiles)
{
if (Transfers.ContainsKey(xferID))
RemoveOrDecrement(Transfers[xferID].FileName);
RemoveXferData(xferID);
}
}
private void RemoveOrDecrement(string fileName)
{
// NewFiles must be locked
if (NewFiles.ContainsKey(fileName))
{
if (NewFiles[fileName].Count == 1)
NewFiles.Remove(fileName);
else
NewFiles[fileName].Count--;
}
}
#region Nested type: XferDownLoad
public class XferDownLoad

View File

@ -620,8 +620,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
}
catch (WebException e)
{
m_log.ErrorFormat("[GRID INSTANT MESSAGE]: Error sending message to {0}} the host didn't respond ({2})",
reginfo.ServerURI, e.Message);
m_log.ErrorFormat("[GRID INSTANT MESSAGE]: Error sending message to {0} the host didn't respond " + e.ToString(), reginfo.ServerURI.ToString());
}
return false;