Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
f57a646638
|
@ -1052,7 +1052,7 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, bool fetchFolders, bool fetchItems)
|
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, int version, bool fetchFolders, bool fetchItems)
|
||||||
{
|
{
|
||||||
// Need to translate to MXP somehow
|
// Need to translate to MXP somehow
|
||||||
}
|
}
|
||||||
|
|
|
@ -606,7 +606,7 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, bool fetchFolders, bool fetchItems)
|
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, int version, bool fetchFolders, bool fetchItems)
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,7 +208,7 @@ namespace OpenSim.Framework.Capabilities
|
||||||
// As of RC 1.22.9 of the Linden client this is
|
// As of RC 1.22.9 of the Linden client this is
|
||||||
// supported
|
// supported
|
||||||
|
|
||||||
m_capsHandlers["WebFetchInventoryDescendents"] =new RestStreamHandler("POST", capsBase + m_fetchInventoryPath, FetchInventoryDescendentsRequest);
|
//m_capsHandlers["WebFetchInventoryDescendents"] =new RestStreamHandler("POST", capsBase + m_fetchInventoryPath, FetchInventoryDescendentsRequest);
|
||||||
|
|
||||||
// justincc: I've disabled the CAPS service for now to fix problems with selecting textures, and
|
// justincc: I've disabled the CAPS service for now to fix problems with selecting textures, and
|
||||||
// subsequent inventory breakage, in the edit object pane (such as mantis 1085). This requires
|
// subsequent inventory breakage, in the edit object pane (such as mantis 1085). This requires
|
||||||
|
|
|
@ -679,7 +679,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||||
/// <param name="fetchFolders"></param>
|
/// <param name="fetchFolders"></param>
|
||||||
/// <param name="fetchItems"></param>
|
/// <param name="fetchItems"></param>
|
||||||
/// <returns>true if the request was queued or successfully processed, false otherwise</returns>
|
/// <returns>true if the request was queued or successfully processed, false otherwise</returns>
|
||||||
public bool SendInventoryDecendents(IClientAPI client, UUID folderID, bool fetchFolders, bool fetchItems)
|
public bool SendInventoryDecendents(IClientAPI client, UUID folderID, int version, bool fetchFolders, bool fetchItems)
|
||||||
{
|
{
|
||||||
if (m_hasReceivedInventory)
|
if (m_hasReceivedInventory)
|
||||||
{
|
{
|
||||||
|
@ -693,7 +693,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||||
|
|
||||||
client.SendInventoryFolderDetails(
|
client.SendInventoryFolderDetails(
|
||||||
client.AgentId, folderID, folder.RequestListOfItems(),
|
client.AgentId, folderID, folder.RequestListOfItems(),
|
||||||
folder.RequestListOfFolders(), fetchFolders, fetchItems);
|
folder.RequestListOfFolders(), version, fetchFolders, fetchItems);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1124,7 +1124,7 @@ namespace OpenSim.Framework
|
||||||
void ReprioritizeUpdates(StateUpdateTypes type, UpdatePriorityHandler handler);
|
void ReprioritizeUpdates(StateUpdateTypes type, UpdatePriorityHandler handler);
|
||||||
|
|
||||||
void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items,
|
void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items,
|
||||||
List<InventoryFolderBase> folders, bool fetchFolders,
|
List<InventoryFolderBase> folders, int version, bool fetchFolders,
|
||||||
bool fetchItems);
|
bool fetchItems);
|
||||||
|
|
||||||
void FlushPrimUpdates();
|
void FlushPrimUpdates();
|
||||||
|
|
|
@ -1251,7 +1251,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <param name="fetchFolders">Do we need to send folder information?</param>
|
/// <param name="fetchFolders">Do we need to send folder information?</param>
|
||||||
/// <param name="fetchItems">Do we need to send item information?</param>
|
/// <param name="fetchItems">Do we need to send item information?</param>
|
||||||
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items,
|
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items,
|
||||||
List<InventoryFolderBase> folders,
|
List<InventoryFolderBase> folders, int version,
|
||||||
bool fetchFolders, bool fetchItems)
|
bool fetchFolders, bool fetchItems)
|
||||||
{
|
{
|
||||||
// An inventory descendents packet consists of a single agent section and an inventory details
|
// An inventory descendents packet consists of a single agent section and an inventory details
|
||||||
|
@ -1266,172 +1266,104 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// 6 to 7 items at a time, so let's stick with 6
|
// 6 to 7 items at a time, so let's stick with 6
|
||||||
int MAX_ITEMS_PER_PACKET = 6;
|
int MAX_ITEMS_PER_PACKET = 6;
|
||||||
|
|
||||||
//Ckrinke This variable is not used, so comment out to remove the warning from the compiler (3-21-08)
|
int totalItems = fetchItems ? items.Count : 0;
|
||||||
//Ckrinke uint FULL_MASK_PERMISSIONS = 2147483647;
|
int totalFolders = fetchFolders ? folders.Count : 0;
|
||||||
|
|
||||||
int itemsSent = 0;
|
int itemsSent = 0;
|
||||||
if (fetchItems)
|
int foldersSent = 0;
|
||||||
{
|
int foldersToSend = 0;
|
||||||
InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID);
|
int itemsToSend = 0;
|
||||||
|
|
||||||
if (items.Count < MAX_ITEMS_PER_PACKET)
|
InventoryDescendentsPacket currentPacket = null;
|
||||||
|
|
||||||
|
// Handle empty folders
|
||||||
|
//
|
||||||
|
if (totalItems == 0 && totalFolders == 0)
|
||||||
|
currentPacket = CreateInventoryDescendentsPacket(ownerID, folderID, version, items.Count + folders.Count, 0, 0);
|
||||||
|
|
||||||
|
// To preserve SL compatibility, we will NOT combine folders and items in one packet
|
||||||
|
//
|
||||||
|
while(itemsSent < totalItems || foldersSent < totalFolders)
|
||||||
|
{
|
||||||
|
if (currentPacket == null) // Start a new packet
|
||||||
{
|
{
|
||||||
descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[items.Count];
|
foldersToSend = totalFolders - foldersSent;
|
||||||
|
if (foldersToSend > MAX_ITEMS_PER_PACKET)
|
||||||
|
foldersToSend = MAX_ITEMS_PER_PACKET;
|
||||||
|
|
||||||
|
if (foldersToSend == 0)
|
||||||
|
{
|
||||||
|
itemsToSend = totalItems - itemsSent;
|
||||||
|
if (itemsToSend > MAX_ITEMS_PER_PACKET)
|
||||||
|
itemsToSend = MAX_ITEMS_PER_PACKET;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentPacket = CreateInventoryDescendentsPacket(ownerID, folderID, version, items.Count + folders.Count, foldersToSend, itemsToSend);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (foldersToSend-- > 0)
|
||||||
|
currentPacket.FolderData[foldersSent % MAX_ITEMS_PER_PACKET] = CreateFolderDataBlock(folders[foldersSent++]);
|
||||||
|
else if(itemsToSend-- > 0)
|
||||||
|
currentPacket.ItemData[itemsSent % MAX_ITEMS_PER_PACKET] = CreateItemDataBlock(items[itemsSent++]);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[MAX_ITEMS_PER_PACKET];
|
OutPacket(currentPacket, ThrottleOutPacketType.Asset, false);
|
||||||
|
currentPacket = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Descendents must contain the *total* number of descendents (plus folders, whether we
|
|
||||||
// fetch them or not), not the number of entries we send in this packet. For consistency,
|
|
||||||
// I'll use it for folder-requests, too, although I wasn't able to get one with
|
|
||||||
// FetchFolders = true.
|
|
||||||
// TODO this should be checked with FetchFolders = true
|
|
||||||
descend.AgentData.Descendents = items.Count + folders.Count;
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
int i = 0;
|
|
||||||
foreach (InventoryItemBase item in items)
|
|
||||||
{
|
|
||||||
descend.ItemData[i] = new InventoryDescendentsPacket.ItemDataBlock();
|
|
||||||
descend.ItemData[i].ItemID = item.ID;
|
|
||||||
descend.ItemData[i].AssetID = item.AssetID;
|
|
||||||
descend.ItemData[i].CreatorID = item.CreatorIdAsUuid;
|
|
||||||
descend.ItemData[i].BaseMask = item.BasePermissions;
|
|
||||||
descend.ItemData[i].Description = Util.StringToBytes256(item.Description);
|
|
||||||
descend.ItemData[i].EveryoneMask = item.EveryOnePermissions;
|
|
||||||
descend.ItemData[i].OwnerMask = item.CurrentPermissions;
|
|
||||||
descend.ItemData[i].FolderID = item.Folder;
|
|
||||||
descend.ItemData[i].InvType = (sbyte)item.InvType;
|
|
||||||
descend.ItemData[i].Name = Util.StringToBytes256(item.Name);
|
|
||||||
descend.ItemData[i].NextOwnerMask = item.NextPermissions;
|
|
||||||
descend.ItemData[i].OwnerID = item.Owner;
|
|
||||||
descend.ItemData[i].Type = (sbyte)item.AssetType;
|
|
||||||
|
|
||||||
descend.ItemData[i].GroupID = item.GroupID;
|
|
||||||
descend.ItemData[i].GroupOwned = item.GroupOwned;
|
|
||||||
descend.ItemData[i].GroupMask = item.GroupPermissions;
|
|
||||||
descend.ItemData[i].CreationDate = item.CreationDate;
|
|
||||||
descend.ItemData[i].SalePrice = item.SalePrice;
|
|
||||||
descend.ItemData[i].SaleType = item.SaleType;
|
|
||||||
descend.ItemData[i].Flags = item.Flags;
|
|
||||||
|
|
||||||
descend.ItemData[i].CRC =
|
|
||||||
Helpers.InventoryCRC(descend.ItemData[i].CreationDate, descend.ItemData[i].SaleType,
|
|
||||||
descend.ItemData[i].InvType, descend.ItemData[i].Type,
|
|
||||||
descend.ItemData[i].AssetID, descend.ItemData[i].GroupID,
|
|
||||||
descend.ItemData[i].SalePrice,
|
|
||||||
descend.ItemData[i].OwnerID, descend.ItemData[i].CreatorID,
|
|
||||||
descend.ItemData[i].ItemID, descend.ItemData[i].FolderID,
|
|
||||||
descend.ItemData[i].EveryoneMask,
|
|
||||||
descend.ItemData[i].Flags, descend.ItemData[i].OwnerMask,
|
|
||||||
descend.ItemData[i].GroupMask, item.CurrentPermissions);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
count++;
|
|
||||||
itemsSent++;
|
|
||||||
if (i == MAX_ITEMS_PER_PACKET)
|
|
||||||
{
|
|
||||||
descend.Header.Zerocoded = true;
|
|
||||||
AddNullFolderBlockToDecendentsPacket(ref descend);
|
|
||||||
OutPacket(descend, ThrottleOutPacketType.Asset);
|
|
||||||
|
|
||||||
if ((items.Count - count) > 0)
|
|
||||||
{
|
|
||||||
descend = CreateInventoryDescendentsPacket(ownerID, folderID);
|
|
||||||
if ((items.Count - count) < MAX_ITEMS_PER_PACKET)
|
|
||||||
{
|
|
||||||
descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[items.Count - count];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[MAX_ITEMS_PER_PACKET];
|
|
||||||
}
|
|
||||||
descend.AgentData.Descendents = items.Count + folders.Count;
|
|
||||||
i = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0 < i && i < MAX_ITEMS_PER_PACKET)
|
|
||||||
{
|
|
||||||
AddNullFolderBlockToDecendentsPacket(ref descend);
|
|
||||||
OutPacket(descend, ThrottleOutPacketType.Asset);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//send subfolders
|
if (currentPacket != null)
|
||||||
if (fetchFolders)
|
OutPacket(currentPacket, ThrottleOutPacketType.Asset, false);
|
||||||
{
|
}
|
||||||
InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID);
|
|
||||||
|
|
||||||
if (folders.Count < MAX_ITEMS_PER_PACKET)
|
private InventoryDescendentsPacket.FolderDataBlock CreateFolderDataBlock(InventoryFolderBase folder)
|
||||||
{
|
{
|
||||||
descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[folders.Count];
|
InventoryDescendentsPacket.FolderDataBlock newBlock = new InventoryDescendentsPacket.FolderDataBlock();
|
||||||
}
|
newBlock.FolderID = folder.ID;
|
||||||
else
|
newBlock.Name = Util.StringToBytes256(folder.Name);
|
||||||
{
|
newBlock.ParentID = folder.ParentID;
|
||||||
descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[MAX_ITEMS_PER_PACKET];
|
newBlock.Type = (sbyte)folder.Type;
|
||||||
}
|
|
||||||
|
|
||||||
// Not sure if this scenario ever actually occurs, but nonetheless we include the items
|
return newBlock;
|
||||||
// count even if we're not sending item data for the same reasons as above.
|
}
|
||||||
descend.AgentData.Descendents = items.Count + folders.Count;
|
|
||||||
|
|
||||||
int i = 0;
|
private InventoryDescendentsPacket.ItemDataBlock CreateItemDataBlock(InventoryItemBase item)
|
||||||
int count = 0;
|
{
|
||||||
foreach (InventoryFolderBase folder in folders)
|
InventoryDescendentsPacket.ItemDataBlock newBlock = new InventoryDescendentsPacket.ItemDataBlock();
|
||||||
{
|
newBlock.ItemID = item.ID;
|
||||||
descend.FolderData[i] = new InventoryDescendentsPacket.FolderDataBlock();
|
newBlock.AssetID = item.AssetID;
|
||||||
descend.FolderData[i].FolderID = folder.ID;
|
newBlock.CreatorID = item.CreatorIdAsUuid;
|
||||||
descend.FolderData[i].Name = Util.StringToBytes256(folder.Name);
|
newBlock.BaseMask = item.BasePermissions;
|
||||||
descend.FolderData[i].ParentID = folder.ParentID;
|
newBlock.Description = Util.StringToBytes256(item.Description);
|
||||||
descend.FolderData[i].Type = (sbyte)folder.Type;
|
newBlock.EveryoneMask = item.EveryOnePermissions;
|
||||||
|
newBlock.OwnerMask = item.CurrentPermissions;
|
||||||
|
newBlock.FolderID = item.Folder;
|
||||||
|
newBlock.InvType = (sbyte)item.InvType;
|
||||||
|
newBlock.Name = Util.StringToBytes256(item.Name);
|
||||||
|
newBlock.NextOwnerMask = item.NextPermissions;
|
||||||
|
newBlock.OwnerID = item.Owner;
|
||||||
|
newBlock.Type = (sbyte)item.AssetType;
|
||||||
|
|
||||||
i++;
|
newBlock.GroupID = item.GroupID;
|
||||||
count++;
|
newBlock.GroupOwned = item.GroupOwned;
|
||||||
itemsSent++;
|
newBlock.GroupMask = item.GroupPermissions;
|
||||||
if (i == MAX_ITEMS_PER_PACKET)
|
newBlock.CreationDate = item.CreationDate;
|
||||||
{
|
newBlock.SalePrice = item.SalePrice;
|
||||||
AddNullItemBlockToDescendentsPacket(ref descend);
|
newBlock.SaleType = item.SaleType;
|
||||||
OutPacket(descend, ThrottleOutPacketType.Asset);
|
newBlock.Flags = item.Flags;
|
||||||
|
|
||||||
if ((folders.Count - count) > 0)
|
newBlock.CRC =
|
||||||
{
|
Helpers.InventoryCRC(newBlock.CreationDate, newBlock.SaleType,
|
||||||
descend = CreateInventoryDescendentsPacket(ownerID, folderID);
|
newBlock.InvType, newBlock.Type,
|
||||||
if ((folders.Count - count) < MAX_ITEMS_PER_PACKET)
|
newBlock.AssetID, newBlock.GroupID,
|
||||||
{
|
newBlock.SalePrice,
|
||||||
descend.FolderData =
|
newBlock.OwnerID, newBlock.CreatorID,
|
||||||
new InventoryDescendentsPacket.FolderDataBlock[folders.Count - count];
|
newBlock.ItemID, newBlock.FolderID,
|
||||||
}
|
newBlock.EveryoneMask,
|
||||||
else
|
newBlock.Flags, newBlock.OwnerMask,
|
||||||
{
|
newBlock.GroupMask, newBlock.NextOwnerMask);
|
||||||
descend.FolderData =
|
|
||||||
new InventoryDescendentsPacket.FolderDataBlock[MAX_ITEMS_PER_PACKET];
|
|
||||||
}
|
|
||||||
descend.AgentData.Descendents = items.Count + folders.Count;
|
|
||||||
i = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0 < i && i < MAX_ITEMS_PER_PACKET)
|
return newBlock;
|
||||||
{
|
|
||||||
AddNullItemBlockToDescendentsPacket(ref descend);
|
|
||||||
OutPacket(descend, ThrottleOutPacketType.Asset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itemsSent == 0)
|
|
||||||
{
|
|
||||||
// no items found.
|
|
||||||
InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID);
|
|
||||||
descend.AgentData.Descendents = 0;
|
|
||||||
AddNullItemBlockToDescendentsPacket(ref descend);
|
|
||||||
AddNullFolderBlockToDecendentsPacket(ref descend);
|
|
||||||
OutPacket(descend, ThrottleOutPacketType.Asset);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddNullFolderBlockToDecendentsPacket(ref InventoryDescendentsPacket packet)
|
private void AddNullFolderBlockToDecendentsPacket(ref InventoryDescendentsPacket packet)
|
||||||
|
@ -1473,14 +1405,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// No need to add CRC
|
// No need to add CRC
|
||||||
}
|
}
|
||||||
|
|
||||||
private InventoryDescendentsPacket CreateInventoryDescendentsPacket(UUID ownerID, UUID folderID)
|
private InventoryDescendentsPacket CreateInventoryDescendentsPacket(UUID ownerID, UUID folderID, int version, int descendents, int folders, int items)
|
||||||
{
|
{
|
||||||
InventoryDescendentsPacket descend = (InventoryDescendentsPacket)PacketPool.Instance.GetPacket(PacketType.InventoryDescendents);
|
InventoryDescendentsPacket descend = (InventoryDescendentsPacket)PacketPool.Instance.GetPacket(PacketType.InventoryDescendents);
|
||||||
descend.Header.Zerocoded = true;
|
descend.Header.Zerocoded = true;
|
||||||
descend.AgentData.AgentID = AgentId;
|
descend.AgentData.AgentID = AgentId;
|
||||||
descend.AgentData.OwnerID = ownerID;
|
descend.AgentData.OwnerID = ownerID;
|
||||||
descend.AgentData.FolderID = folderID;
|
descend.AgentData.FolderID = folderID;
|
||||||
descend.AgentData.Version = 1;
|
descend.AgentData.Version = version;
|
||||||
|
descend.AgentData.Descendents = descendents;
|
||||||
|
|
||||||
|
if (folders > 0)
|
||||||
|
descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[folders];
|
||||||
|
else
|
||||||
|
AddNullFolderBlockToDecendentsPacket(ref descend);
|
||||||
|
|
||||||
|
if (items > 0)
|
||||||
|
descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[items];
|
||||||
|
else
|
||||||
|
AddNullItemBlockToDescendentsPacket(ref descend);
|
||||||
|
|
||||||
return descend;
|
return descend;
|
||||||
}
|
}
|
||||||
|
@ -4963,6 +4906,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, true);
|
m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is the starting point for sending a simulator packet out to the client
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packet">Packet to send</param>
|
||||||
|
/// <param name="throttlePacketType">Throttling category for the packet</param>
|
||||||
|
/// <param name="doAutomaticSplitting">True to automatically split oversized
|
||||||
|
/// packets (the default), or false to disable splitting if the calling code
|
||||||
|
/// handles splitting manually</param>
|
||||||
|
protected void OutPacket(Packet packet, ThrottleOutPacketType throttlePacketType, bool doAutomaticSplitting)
|
||||||
|
{
|
||||||
|
m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting);
|
||||||
|
}
|
||||||
|
|
||||||
public bool AddMoney(int debit)
|
public bool AddMoney(int debit)
|
||||||
{
|
{
|
||||||
if (m_moneyBalance + debit >= 0)
|
if (m_moneyBalance + debit >= 0)
|
||||||
|
|
|
@ -327,7 +327,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// The vast majority of packets are less than 200 bytes, although due to asset transfers and packet splitting
|
// The vast majority of packets are less than 200 bytes, although due to asset transfers and packet splitting
|
||||||
// there are a decent number of packets in the 1000-1140 byte range. We allocate one of two sizes of data here
|
// there are a decent number of packets in the 1000-1140 byte range. We allocate one of two sizes of data here
|
||||||
// to accomodate for both common scenarios and provide ample room for ACK appending in both
|
// to accomodate for both common scenarios and provide ample room for ACK appending in both
|
||||||
int bufferSize = (dataLength > 180) ? LLUDPServer.MTU : 200;
|
int bufferSize = (dataLength > 180) ? LLUDPServer.MTU + 1000 : 200;
|
||||||
|
|
||||||
UDPPacketBuffer buffer = new UDPPacketBuffer(udpClient.RemoteEndPoint, bufferSize);
|
UDPPacketBuffer buffer = new UDPPacketBuffer(udpClient.RemoteEndPoint, bufferSize);
|
||||||
|
|
||||||
|
|
|
@ -538,6 +538,7 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID,
|
public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID,
|
||||||
List<InventoryItemBase> items,
|
List<InventoryItemBase> items,
|
||||||
List<InventoryFolderBase> folders,
|
List<InventoryFolderBase> folders,
|
||||||
|
int version,
|
||||||
bool fetchFolders,
|
bool fetchFolders,
|
||||||
bool fetchItems)
|
bool fetchItems)
|
||||||
{
|
{
|
||||||
|
|
|
@ -77,13 +77,13 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid
|
||||||
|
|
||||||
#region Internal functions
|
#region Internal functions
|
||||||
|
|
||||||
private string UserAssetURL(UUID userID)
|
// private string UserAssetURL(UUID userID)
|
||||||
{
|
// {
|
||||||
CachedUserInfo uinfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(userID);
|
// CachedUserInfo uinfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(userID);
|
||||||
if (uinfo != null)
|
// if (uinfo != null)
|
||||||
return (uinfo.UserProfile.UserAssetURI == "") ? null : uinfo.UserProfile.UserAssetURI;
|
// return (uinfo.UserProfile.UserAssetURI == "") ? null : uinfo.UserProfile.UserAssetURI;
|
||||||
return null;
|
// return null;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// private string UserInventoryURL(UUID userID)
|
// private string UserInventoryURL(UUID userID)
|
||||||
// {
|
// {
|
||||||
|
|
|
@ -1175,7 +1175,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[AGENT INVENTORY]: Send Inventory Folder {0} Update to {1} {2}", folder.Name, client.FirstName, client.LastName);
|
m_log.DebugFormat("[AGENT INVENTORY]: Send Inventory Folder {0} Update to {1} {2}", folder.Name, client.FirstName, client.LastName);
|
||||||
InventoryCollection contents = InventoryService.GetFolderContent(client.AgentId, folder.ID);
|
InventoryCollection contents = InventoryService.GetFolderContent(client.AgentId, folder.ID);
|
||||||
client.SendInventoryFolderDetails(client.AgentId, folder.ID, contents.Items, contents.Folders, fetchFolders, fetchItems);
|
InventoryFolderBase containingFolder = new InventoryFolderBase();
|
||||||
|
containingFolder.ID = folder.ID;
|
||||||
|
containingFolder.Owner = client.AgentId;
|
||||||
|
containingFolder = InventoryService.GetFolder(containingFolder);
|
||||||
|
int version = containingFolder.Version;
|
||||||
|
|
||||||
|
client.SendInventoryFolderDetails(client.AgentId, folder.ID, contents.Items, contents.Folders, version, fetchFolders, fetchItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -462,7 +462,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
remoteClient.SendInventoryFolderDetails(
|
remoteClient.SendInventoryFolderDetails(
|
||||||
fold.Owner, folderID, fold.RequestListOfItems(),
|
fold.Owner, folderID, fold.RequestListOfItems(),
|
||||||
fold.RequestListOfFolders(), fetchFolders, fetchItems);
|
fold.RequestListOfFolders(), fold.Version, fetchFolders, fetchItems);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1043,7 +1043,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
TimeSpan SinceLastFrame = DateTime.UtcNow - m_lastupdate;
|
TimeSpan SinceLastFrame = DateTime.UtcNow - m_lastupdate;
|
||||||
physicsFPS = 0f;
|
physicsFPS = 0f;
|
||||||
|
|
||||||
maintc = maintc = otherMS = Environment.TickCount;
|
maintc = otherMS = Environment.TickCount;
|
||||||
int tmpFrameMS = maintc;
|
int tmpFrameMS = maintc;
|
||||||
|
|
||||||
// Increment the frame counter
|
// Increment the frame counter
|
||||||
|
|
|
@ -76,7 +76,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private static readonly byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
|
private static readonly byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
|
||||||
private static readonly byte[] DEFAULT_TEXTURE = AvatarAppearance.GetDefaultTexture().GetBytes();
|
// private static readonly byte[] DEFAULT_TEXTURE = AvatarAppearance.GetDefaultTexture().GetBytes();
|
||||||
private static readonly Array DIR_CONTROL_FLAGS = Enum.GetValues(typeof(Dir_ControlFlags));
|
private static readonly Array DIR_CONTROL_FLAGS = Enum.GetValues(typeof(Dir_ControlFlags));
|
||||||
private static readonly Vector3 HEAD_ADJUSTMENT = new Vector3(0f, 0f, 0.3f);
|
private static readonly Vector3 HEAD_ADJUSTMENT = new Vector3(0f, 0f, 0.3f);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -181,7 +181,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private byte m_state;
|
private byte m_state;
|
||||||
|
|
||||||
//Reuse the Vector3 instead of creating a new one on the UpdateMovement method
|
//Reuse the Vector3 instead of creating a new one on the UpdateMovement method
|
||||||
private Vector3 movementvector;
|
// private Vector3 movementvector;
|
||||||
|
|
||||||
private bool m_autopilotMoving;
|
private bool m_autopilotMoving;
|
||||||
private Vector3 m_autoPilotTarget;
|
private Vector3 m_autoPilotTarget;
|
||||||
|
@ -2074,7 +2074,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (heldDown) { move.Z -= 1; }
|
if (heldDown) { move.Z -= 1; }
|
||||||
|
|
||||||
// Is the avatar trying to move?
|
// Is the avatar trying to move?
|
||||||
bool moving = (move != Vector3.Zero);
|
// bool moving = (move != Vector3.Zero);
|
||||||
bool jumping = m_animTickJump != 0;
|
bool jumping = m_animTickJump != 0;
|
||||||
|
|
||||||
#endregion Inputs
|
#endregion Inputs
|
||||||
|
@ -2326,7 +2326,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (m_isChildAgent == false)
|
if (m_isChildAgent == false)
|
||||||
{
|
{
|
||||||
PhysicsActor actor = m_physicsActor;
|
// PhysicsActor actor = m_physicsActor;
|
||||||
|
|
||||||
// NOTE: Velocity is not the same as m_velocity. Velocity will attempt to
|
// NOTE: Velocity is not the same as m_velocity. Velocity will attempt to
|
||||||
// grab the latest PhysicsActor velocity, whereas m_velocity is often
|
// grab the latest PhysicsActor velocity, whereas m_velocity is often
|
||||||
|
@ -3262,7 +3262,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Vector3 force = m_forceToApply.Value;
|
Vector3 force = m_forceToApply.Value;
|
||||||
|
|
||||||
m_updateflag = true;
|
m_updateflag = true;
|
||||||
movementvector = force;
|
// movementvector = force;
|
||||||
Velocity = force;
|
Velocity = force;
|
||||||
|
|
||||||
m_forceToApply = null;
|
m_forceToApply = null;
|
||||||
|
|
|
@ -1055,7 +1055,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, bool fetchFolders, bool fetchItems)
|
public void SendInventoryFolderDetails(UUID ownerID, UUID folderID, List<InventoryItemBase> items, List<InventoryFolderBase> folders, int version, bool fetchFolders, bool fetchItems)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -627,6 +627,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID,
|
public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID,
|
||||||
List<InventoryItemBase> items,
|
List<InventoryItemBase> items,
|
||||||
List<InventoryFolderBase> folders,
|
List<InventoryFolderBase> folders,
|
||||||
|
int version,
|
||||||
bool fetchFolders,
|
bool fetchFolders,
|
||||||
bool fetchItems)
|
bool fetchItems)
|
||||||
{
|
{
|
||||||
|
|
|
@ -631,6 +631,7 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID,
|
public virtual void SendInventoryFolderDetails(UUID ownerID, UUID folderID,
|
||||||
List<InventoryItemBase> items,
|
List<InventoryItemBase> items,
|
||||||
List<InventoryFolderBase> folders,
|
List<InventoryFolderBase> folders,
|
||||||
|
int version,
|
||||||
bool fetchFolders,
|
bool fetchFolders,
|
||||||
bool fetchItems)
|
bool fetchItems)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue