diff --git a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
index 06110c32cd..1f6dc5f71a 100644
--- a/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
+++ b/OpenSim/Client/MXP/ClientStack/MXPClientView.cs
@@ -1131,6 +1131,12 @@ namespace OpenSim.Client.MXP.ClientStack
// SL Specific, Ignore. (Remove from IClient)
}
+ public void SendAbortXferPacket(ulong xferID)
+ {
+
+ }
+
+
public void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit, int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent, float PriceObjectScaleFactor, int PriceParcelClaim, float PriceParcelClaimFactor, int PriceParcelRent, int PricePublicObjectDecay, int PricePublicObjectDelete, int PriceRentLight, int PriceUpload, int TeleportMinPrice, float TeleportPriceExponent)
{
// SL Specific, Ignore. (Remove from IClient)
diff --git a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
index bc5dc9e417..8a49c6297a 100644
--- a/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
+++ b/OpenSim/Client/VWoHTTP/ClientStack/VWHClientView.cs
@@ -675,6 +675,11 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
throw new System.NotImplementedException();
}
+ public virtual void SendAbortXferPacket(ulong xferID)
+ {
+ throw new System.NotImplementedException();
+ }
+
public void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit, int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent, float PriceObjectScaleFactor, int PriceParcelClaim, float PriceParcelClaimFactor, int PriceParcelRent, int PricePublicObjectDecay, int PricePublicObjectDelete, int PriceRentLight, int PriceUpload, int TeleportMinPrice, float TeleportPriceExponent)
{
throw new System.NotImplementedException();
diff --git a/OpenSim/Framework/Capabilities/Caps.cs b/OpenSim/Framework/Capabilities/Caps.cs
index 5937ae6e8c..dbb07817f6 100644
--- a/OpenSim/Framework/Capabilities/Caps.cs
+++ b/OpenSim/Framework/Capabilities/Caps.cs
@@ -1344,7 +1344,11 @@ namespace OpenSim.Framework.Capabilities
///
public string uploaderCaps(byte[] data, string path, string param)
{
- m_log.WarnFormat("[CAPS] baked texture upload completed for {0}",newAssetID);
+ handlerUpLoad = OnUpLoad;
+ if (handlerUpLoad != null)
+ {
+ Util.FireAndForget(delegate(object o) { handlerUpLoad(newAssetID, data); });
+ }
string res = String.Empty;
LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete();
@@ -1356,12 +1360,6 @@ namespace OpenSim.Framework.Capabilities
httpListener.RemoveStreamHandler("POST", uploaderPath);
- handlerUpLoad = OnUpLoad;
- if (handlerUpLoad != null)
- {
- handlerUpLoad(newAssetID, data);
- }
-
m_log.InfoFormat("[CAPS] baked texture upload completed for {0}",newAssetID);
return res;
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 1a59cf4c80..34ec42031a 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -1062,6 +1062,8 @@ namespace OpenSim.Framework
void SendXferPacket(ulong xferID, uint packet, byte[] data);
+ void SendAbortXferPacket(ulong xferID);
+
void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit,
int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent,
float PriceObjectScaleFactor,
diff --git a/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs b/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs
index 86fa44dfea..bae4e1b997 100644
--- a/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BinaryStreamHandler.cs
@@ -53,8 +53,8 @@ namespace OpenSim.Framework.Servers.HttpServer
private static byte[] ReadFully(Stream stream)
{
- byte[] buffer = new byte[32768];
- using (MemoryStream ms = new MemoryStream())
+ byte[] buffer = new byte[1024];
+ using (MemoryStream ms = new MemoryStream(1024*256))
{
while (true)
{
diff --git a/OpenSim/Framework/Watchdog.cs b/OpenSim/Framework/Watchdog.cs
index 9baf3a0702..3389ecb014 100644
--- a/OpenSim/Framework/Watchdog.cs
+++ b/OpenSim/Framework/Watchdog.cs
@@ -127,7 +127,7 @@ namespace OpenSim.Framework
m_threads.Add(threadInfo.Thread.ManagedThreadId, threadInfo);
}
- private static bool RemoveThread(int threadID)
+ public static bool RemoveThread(int threadID)
{
lock (m_threads)
return m_threads.Remove(threadID);
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 00a605e988..6a6bd12fea 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -2097,6 +2097,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(sendXfer, ThrottleOutPacketType.Asset);
}
+ public void SendAbortXferPacket(ulong xferID)
+ {
+ AbortXferPacket xferItem = (AbortXferPacket)PacketPool.Instance.GetPacket(PacketType.AbortXfer);
+ xferItem.XferID.ID = xferID;
+ OutPacket(xferItem, ThrottleOutPacketType.Asset);
+ }
+
public void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit,
int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent, float PriceObjectScaleFactor,
int PriceParcelClaim, float PriceParcelClaimFactor, int PriceParcelRent, int PricePublicObjectDecay,
diff --git a/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs b/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs
index ef7dce812e..c5a6e628bd 100644
--- a/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs
+++ b/OpenSim/Region/CoreModules/Agent/Xfer/XferModule.cs
@@ -40,8 +40,8 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
private Scene m_scene;
private Dictionary Requests = new Dictionary();
private List RequestTime = new List();
- public Dictionary NewFiles = new Dictionary();
- public Dictionary Transfers = new Dictionary();
+ private Dictionary NewFiles = new Dictionary();
+ private Dictionary Transfers = new Dictionary();
public struct XferRequest
@@ -51,6 +51,12 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
public string fileName;
public DateTime timeStamp;
}
+
+ private class FileData
+ {
+ public byte[] Data;
+ public int Count;
+ }
#region IRegionModule Members
@@ -89,20 +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);
}
}
- 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;
}
@@ -113,6 +121,7 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
{
client.OnRequestXfer += RequestXfer;
client.OnConfirmXfer += AckPacket;
+ client.OnAbortXfer += AbortXfer;
}
///
@@ -125,20 +134,35 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
{
lock (NewFiles)
{
+ if (RequestTime.Count > 0)
+ {
+ TimeSpan ts = new TimeSpan(DateTime.UtcNow.Ticks - RequestTime[0].timeStamp.Ticks);
+ if (ts.TotalSeconds > 30)
+ {
+ ulong zxferid = RequestTime[0].xferID;
+ remoteClient.SendAbortXferPacket(zxferid);
+ RemoveXferData(zxferid);
+ RemoveOrDecrement(fileName);
+ }
+ }
+
if (NewFiles.ContainsKey(fileName))
{
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())
{
- Transfers.Remove(xferID);
+ RemoveXferData(xferID);
}
+
+ // The transaction for this file is either complete or on its way
+ RemoveOrDecrement(fileName);
+
}
}
else
@@ -150,6 +174,8 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
{
Requests.Remove(RequestTime[0].fileName);
RequestTime.RemoveAt(0);
+ // Do we want to abort this here?
+ //remoteClient.SendAbortXfer(xferID);
}
}
@@ -165,22 +191,84 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
}
}
+
}
}
public void AckPacket(IClientAPI remoteClient, ulong xferID, uint packet)
{
- if (Transfers.ContainsKey(xferID))
+ lock (NewFiles) // This is actually to lock Transfers
{
- if (Transfers[xferID].AckPacket(packet))
+ if (Transfers.ContainsKey(xferID))
{
+ XferDownLoad dl = Transfers[xferID];
+ if (Transfers[xferID].AckPacket(packet))
{
- Transfers.Remove(xferID);
+ {
+ RemoveXferData(xferID);
+ RemoveOrDecrement(dl.FileName);
+ }
+ }
+ else
+ {
+
+ if (Requests.ContainsKey(dl.FileName))
+ {
+ //
+ XferRequest req = Requests[dl.FileName];
+ req.timeStamp = DateTime.UtcNow;
+ Requests[dl.FileName] = req;
+ }
}
}
}
}
+ private void RemoveXferData(ulong xferID)
+ {
+ // NewFiles must be locked!
+ if (Transfers.ContainsKey(xferID))
+ {
+ // Qualifier distinguishes between the OpenMetaverse version and the nested class
+
+ XferModule.XferDownLoad xferItem = Transfers[xferID];
+ //string filename = xferItem.FileName;
+ Transfers.Remove(xferID);
+ xferItem.Data = new byte[0]; // Clear the data
+ xferItem.DataPointer = 0;
+
+ // If the abort comes in
+
+ if (Requests.ContainsKey(xferItem.FileName))
+ Requests.Remove(xferItem.FileName);
+
+ }
+ }
+
+ public void AbortXfer(IClientAPI remoteClient, ulong xferID)
+ {
+ 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
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index 80adc4648d..a3e3b4ecd9 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -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;
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index 7441a60ff6..a6e2c03552 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -602,6 +602,12 @@ namespace OpenSim.Region.Examples.SimpleModule
{
}
+ public virtual void SendAbortXferPacket(ulong xferID)
+ {
+
+ }
+
+
public virtual void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit,
int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent, float PriceObjectScaleFactor,
int PriceParcelClaim, float PriceParcelClaimFactor, int PriceParcelRent, int PricePublicObjectDecay,
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index ed40da9609..4b17b9a71f 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -195,13 +195,6 @@ namespace OpenSim.Region.Framework.Interfaces
/// in this prim's inventory.
int RemoveInventoryItem(UUID itemID);
- ///
- /// Return the name with which a client can request a xfer of this prim's inventory metadata
- ///
- string GetInventoryFileName();
-
- bool GetInventoryFileName(IClientAPI client, uint localID);
-
///
/// Serialize all the metadata for the items in this prim's inventory ready for sending to the client
///
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index a1f1ea5489..47c574a2e4 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -951,23 +951,12 @@ namespace OpenSim.Region.Framework.Scenes
///
public void RequestTaskInventory(IClientAPI remoteClient, uint primLocalID)
{
- SceneObjectGroup group = GetGroupByPrim(primLocalID);
- if (group != null)
- {
- bool fileChange = group.GetPartInventoryFileName(remoteClient, primLocalID);
- if (fileChange)
- {
- if (XferManager != null)
- {
- group.RequestInventoryFile(remoteClient, primLocalID, XferManager);
- }
- }
- }
- else
- {
- m_log.ErrorFormat(
- "[PRIM INVENTORY]: Inventory requested of prim {0} which doesn't exist", primLocalID);
- }
+ SceneObjectPart part = GetSceneObjectPart(primLocalID);
+ if (part == null)
+ return;
+
+ if (XferManager != null)
+ part.Inventory.RequestInventoryFile(remoteClient, XferManager);
}
///
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index d915807aa7..deeb81724f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1093,6 +1093,7 @@ namespace OpenSim.Region.Framework.Scenes
{
m_log.ErrorFormat("[SCENE]: Restarting heartbeat thread because it hasn't reported in in region {0}", RegionInfo.RegionName);
HeartbeatThread.Abort();
+ Watchdog.RemoveThread(HeartbeatThread.ManagedThreadId);
HeartbeatThread = null;
}
m_lastUpdate = Util.EnvironmentTickCount();
@@ -4801,7 +4802,7 @@ namespace OpenSim.Region.Framework.Scenes
if (m_firstHeartbeat)
return;
- if (Util.EnvironmentTickCountSubtract(m_lastUpdate) > 2000)
+ if (Util.EnvironmentTickCountSubtract(m_lastUpdate) > 10000)
StartTimer();
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index 6cc7231502..50521c45ab 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -76,49 +76,6 @@ namespace OpenSim.Region.Framework.Scenes
parts[i].Inventory.RemoveScriptInstances(sceneObjectBeingDeleted);
}
- ///
- ///
- ///
- ///
- ///
- public bool GetPartInventoryFileName(IClientAPI remoteClient, uint localID)
- {
- SceneObjectPart part = GetChildPart(localID);
- if (part != null)
- {
- return part.Inventory.GetInventoryFileName(remoteClient, localID);
- }
- else
- {
- m_log.ErrorFormat(
- "[PRIM INVENTORY]: " +
- "Couldn't find part {0} in object group {1}, {2} to retreive prim inventory",
- localID, Name, UUID);
- }
- return false;
- }
-
- ///
- /// Return serialized inventory metadata for the given constituent prim
- ///
- ///
- ///
- public void RequestInventoryFile(IClientAPI client, uint localID, IXfer xferManager)
- {
- SceneObjectPart part = GetChildPart(localID);
- if (part != null)
- {
- part.Inventory.RequestInventoryFile(client, xferManager);
- }
- else
- {
- m_log.ErrorFormat(
- "[PRIM INVENTORY]: " +
- "Couldn't find part {0} in object group {1}, {2} to request inventory data",
- localID, Name, UUID);
- }
- }
-
///
/// Add an inventory item to a prim in this group.
///
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 8fcfcc5e75..9412e093e1 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -46,7 +46,8 @@ namespace OpenSim.Region.Framework.Scenes
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private string m_inventoryFileName = String.Empty;
- private int m_inventoryFileNameSerial = 0;
+ private byte[] m_inventoryFileData = new byte[0];
+ private uint m_inventoryFileNameSerial = 0;
private Dictionary m_scriptErrors = new Dictionary();
@@ -930,39 +931,17 @@ namespace OpenSim.Region.Framework.Scenes
return -1;
}
- public string GetInventoryFileName()
+ private bool CreateInventoryFileName()
{
- if (m_inventoryFileName == String.Empty)
- m_inventoryFileName = "inventory_" + UUID.Random().ToString() + ".tmp";
- if (m_inventoryFileNameSerial < m_inventorySerial)
+ if (m_inventoryFileName == String.Empty ||
+ m_inventoryFileNameSerial < m_inventorySerial)
{
m_inventoryFileName = "inventory_" + UUID.Random().ToString() + ".tmp";
- }
- return m_inventoryFileName;
- }
-
- ///
- /// Return the name with which a client can request a xfer of this prim's inventory metadata
- ///
- ///
- ///
- public bool GetInventoryFileName(IClientAPI client, uint localID)
- {
-// m_log.DebugFormat(
-// "[PRIM INVENTORY]: Received request from client {0} for inventory file name of {1}, {2}",
-// client.AgentId, Name, UUID);
-
- if (m_inventorySerial > 0)
- {
- client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
- Utils.StringToBytes(GetInventoryFileName()));
+ m_inventoryFileNameSerial = m_inventorySerial;
return true;
}
- else
- {
- client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
- return false;
- }
+
+ return false;
}
///
@@ -971,78 +950,92 @@ namespace OpenSim.Region.Framework.Scenes
///
public void RequestInventoryFile(IClientAPI client, IXfer xferManager)
{
- byte[] fileData = new byte[0];
+ bool changed = CreateInventoryFileName();
- // Confusingly, the folder item has to be the object id, while the 'parent id' has to be zero. This matches
- // what appears to happen in the Second Life protocol. If this isn't the case. then various functionality
- // isn't available (such as drag from prim inventory to agent inventory)
InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero);
+ Items.LockItemsForRead(true);
+
+ if (m_inventorySerial == 0) // No inventory
+ {
+ client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
+ Items.LockItemsForRead(false);
+ return;
+ }
+
+ client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
+ Util.StringToBytes256(m_inventoryFileName));
+
+ if (!changed)
+ {
+ if (m_inventoryFileData.Length > 2)
+ {
+ xferManager.AddNewFile(m_inventoryFileName,
+ m_inventoryFileData);
+ Items.LockItemsForRead(false);
+ return;
+ }
+ }
+
bool includeAssets = false;
if (m_part.ParentGroup.Scene.Permissions.CanEditObjectInventory(m_part.UUID, client.AgentId))
includeAssets = true;
- lock (m_items)
+ foreach (TaskInventoryItem item in m_items.Values)
{
- foreach (TaskInventoryItem item in m_items.Values)
- {
- UUID ownerID = item.OwnerID;
- uint everyoneMask = 0;
- uint baseMask = item.BasePermissions;
- uint ownerMask = item.CurrentPermissions;
- uint groupMask = item.GroupPermissions;
+ UUID ownerID = item.OwnerID;
+ uint everyoneMask = 0;
+ uint baseMask = item.BasePermissions;
+ uint ownerMask = item.CurrentPermissions;
+ uint groupMask = item.GroupPermissions;
- invString.AddItemStart();
- invString.AddNameValueLine("item_id", item.ItemID.ToString());
- invString.AddNameValueLine("parent_id", m_part.UUID.ToString());
+ invString.AddItemStart();
+ invString.AddNameValueLine("item_id", item.ItemID.ToString());
+ invString.AddNameValueLine("parent_id", m_part.UUID.ToString());
- invString.AddPermissionsStart();
+ invString.AddPermissionsStart();
- invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
- invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
- invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
- invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
- invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
+ invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
+ invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
+ invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
+ invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
+ invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
- invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
- invString.AddNameValueLine("owner_id", ownerID.ToString());
+ invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
+ invString.AddNameValueLine("owner_id", ownerID.ToString());
- invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());
+ invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());
- invString.AddNameValueLine("group_id", item.GroupID.ToString());
- invString.AddSectionEnd();
+ invString.AddNameValueLine("group_id", item.GroupID.ToString());
+ invString.AddSectionEnd();
- if (includeAssets)
- invString.AddNameValueLine("asset_id", item.AssetID.ToString());
- else
- invString.AddNameValueLine("asset_id", UUID.Zero.ToString());
- invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]);
- invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]);
- invString.AddNameValueLine("flags", Utils.UIntToHexString(item.Flags));
+ if (includeAssets)
+ invString.AddNameValueLine("asset_id", item.AssetID.ToString());
+ else
+ invString.AddNameValueLine("asset_id", UUID.Zero.ToString());
+ invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]);
+ invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]);
+ invString.AddNameValueLine("flags", Utils.UIntToHexString(item.Flags));
- invString.AddSaleStart();
- invString.AddNameValueLine("sale_type", "not");
- invString.AddNameValueLine("sale_price", "0");
- invString.AddSectionEnd();
+ invString.AddSaleStart();
+ invString.AddNameValueLine("sale_type", "not");
+ invString.AddNameValueLine("sale_price", "0");
+ invString.AddSectionEnd();
- invString.AddNameValueLine("name", item.Name + "|");
- invString.AddNameValueLine("desc", item.Description + "|");
+ invString.AddNameValueLine("name", item.Name + "|");
+ invString.AddNameValueLine("desc", item.Description + "|");
- invString.AddNameValueLine("creation_date", item.CreationDate.ToString());
- invString.AddSectionEnd();
- }
+ invString.AddNameValueLine("creation_date", item.CreationDate.ToString());
+ invString.AddSectionEnd();
}
- int count = m_items.Count;
- m_items.LockItemsForRead(false);
- fileData = Utils.StringToBytes(invString.BuildString);
+ Items.LockItemsForRead(false);
- //m_log.Debug(Utils.BytesToString(fileData));
- //m_log.Debug("[PRIM INVENTORY]: RequestInventoryFile fileData: " + Utils.BytesToString(fileData));
+ m_inventoryFileData = Utils.StringToBytes(invString.BuildString);
- if (fileData.Length > 2)
+ if (m_inventoryFileData.Length > 2)
{
- xferManager.AddNewFile(m_inventoryFileName, fileData);
+ xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData);
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneViewer.cs b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
index b44a0100a4..40a73a9d4c 100644
--- a/OpenSim/Region/Framework/Scenes/SceneViewer.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneViewer.cs
@@ -106,7 +106,7 @@ namespace OpenSim.Region.Framework.Scenes
g.ScheduleFullUpdateToAvatar(m_presence);
}
- while (m_partsUpdateQueue.Count > 0)
+ while (m_partsUpdateQueue.Count != null && m_partsUpdateQueue.Count > 0)
{
SceneObjectPart part = m_partsUpdateQueue.Dequeue();
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index 276e46dd3a..75f64418cc 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1123,6 +1123,11 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
}
+ public void SendAbortXferPacket(ulong xferID)
+ {
+
+ }
+
public void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit, int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent, float PriceObjectScaleFactor, int PriceParcelClaim, float PriceParcelClaimFactor, int PriceParcelRent, int PricePublicObjectDecay, int PricePublicObjectDelete, int PriceRentLight, int PriceUpload, int TeleportMinPrice, float TeleportPriceExponent)
{
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 39c3364660..51949b4b3b 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -686,6 +686,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public virtual void SendXferPacket(ulong xferID, uint packet, byte[] data)
{
+ }
+ public virtual void SendAbortXferPacket(ulong xferID)
+ {
+
}
public virtual void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit,
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs
index fbc339a7ab..69a152f6ab 100644
--- a/OpenSim/Tests/Common/Mock/TestClient.cs
+++ b/OpenSim/Tests/Common/Mock/TestClient.cs
@@ -696,6 +696,11 @@ namespace OpenSim.Tests.Common.Mock
{
}
+ public virtual void SendAbortXferPacket(ulong xferID)
+ {
+
+ }
+
public virtual void SendEconomyData(float EnergyEfficiency, int ObjectCapacity, int ObjectCount, int PriceEnergyUnit,
int PriceGroupCreate, int PriceObjectClaim, float PriceObjectRent, float PriceObjectScaleFactor,
int PriceParcelClaim, float PriceParcelClaimFactor, int PriceParcelRent, int PricePublicObjectDecay,