private static PrimInventory FromPrimObjectInventory(LLPrimitive host, PrimObject.InventoryBlock objInv) { PrimInventory inv = new PrimInventory(host); if (objInv == null) { return(inv); } for (int i = 0; i < objInv.Items.Length; i++) { PrimObject.InventoryBlock.ItemBlock objItem = objInv.Items[i]; LLInventoryTaskItem item = new LLInventoryTaskItem(); item.AssetID = objItem.AssetID; item.ContentType = LLUtil.LLAssetTypeToContentType((int)objItem.Type); item.CreationDate = objItem.CreationDate; item.CreatorID = objItem.CreatorID; item.Description = objItem.Description; item.Flags = (uint)objItem.Flags; item.GroupID = objItem.GroupID; item.ID = objItem.ID; item.Name = objItem.Name; item.OwnerID = objItem.OwnerID; item.Permissions = new Permissions(objItem.PermsBase, objItem.PermsEveryone, objItem.PermsGroup, objItem.PermsNextOwner, objItem.PermsOwner); item.PermissionGranter = objItem.PermsGranterID; inv.AddOrUpdateItem(item, true); } inv.InventorySerial = (short)objInv.Serial; return(inv); }
private void NewFileAgentInventoryUploadHandler(NewFileAgentInventoryMessage message, Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { byte[] assetData = request.GetBody(); UUID assetID = UUID.Zero; UUID itemID = UUID.Zero; m_log.Debug("Received inventory asset upload from " + cap.OwnerID + " (" + assetData.Length + " bytes)"); if (assetData != null && assetData.Length > 0) { string contentType = LLUtil.LLAssetTypeToContentType((int)message.AssetType); // Create the asset if (m_assetClient.StoreAsset(contentType, false, false, assetData, cap.OwnerID, out assetID)) { // Create the inventory item LLInventoryItem item = new LLInventoryItem(); item.AssetID = assetID; item.ContentType = contentType; item.CreationDate = DateTime.UtcNow; item.CreatorID = cap.OwnerID; item.Description = message.Description; item.ID = UUID.Random(); item.Name = message.Name; item.OwnerID = cap.OwnerID; item.ParentID = message.FolderID; item.Permissions = (m_permissions != null) ? m_permissions.GetDefaultPermissions() : Permissions.FullPermissions; item.SalePrice = 10; item.SaleType = SaleType.Not; if (m_inventoryClient.TryCreateItem(cap.OwnerID, item)) { itemID = item.ID; } else { m_log.Warn("Failed to create inventory item for uploaded asset " + assetID); } } else { m_log.WarnFormat("Failed to store uploaded inventory asset ({0} bytes)", assetData.Length); } } else { m_log.Warn("Inventory asset upload contained no data"); } // Build the response message OSDMap reply = new OSDMap { { "state", OSD.FromString("complete") }, { "new_asset", OSD.FromUUID(assetID) }, { "new_inventory_item", OSD.FromUUID(itemID) } }; LLUtil.SendLLSDXMLResponse(response, reply); }
private void AssetLoadedHandler(OpenMetaverse.Assets.Asset asset, long bytesRead, long totalBytes) { // Asynchronously filter and store the asset bool doRelease = m_assetLoadSemaphore.WaitOne(1000 * 10); if (!doRelease) { m_log.Error("Timed out waiting for the previous OAR asset load to complete"); } m_scheduler.FireAndForget( delegate(object o) { try { m_assetClient.StoreAsset(new Asset { ContentType = LLUtil.LLAssetTypeToContentType((int)asset.AssetType), CreationDate = DateTime.UtcNow, CreatorID = UUID.Zero, Data = asset.AssetData, ID = asset.AssetID }); //m_log.DebugFormat("Loaded asset {0} ({1}), {2} bytes", asset.AssetID, asset.AssetType, asset.AssetData.Length); } finally { if (doRelease) { m_assetLoadSemaphore.Release(); } } }, null ); PrintProgress(bytesRead, totalBytes); }
private void NewFileAgentInventoryVariablePriceUploadHandler(NewFileAgentInventoryVariablePriceMessage message, Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { byte[] assetData = request.GetBody(); UUID assetID = UUID.Zero; LLInventoryItem item = null; m_log.Debug("Received inventory asset upload from " + cap.OwnerID + " (" + assetData.Length + " bytes)"); if (assetData != null && assetData.Length > 0) { string contentType = LLUtil.LLAssetTypeToContentType((int)message.AssetType); // Create the asset if (m_assetClient.StoreAsset(contentType, false, false, assetData, cap.OwnerID, out assetID)) { // Create the inventory item item = new LLInventoryItem(); item.AssetID = assetID; item.ContentType = contentType; item.CreationDate = DateTime.UtcNow; item.CreatorID = cap.OwnerID; item.Description = message.Description; item.ID = UUID.Random(); item.Name = message.Name; item.OwnerID = cap.OwnerID; item.ParentID = message.FolderID; Permissions perms = (m_permissions != null) ? m_permissions.GetDefaultPermissions() : Permissions.FullPermissions; perms.EveryoneMask = message.EveryoneMask; perms.GroupMask = message.GroupMask; perms.NextOwnerMask = message.NextOwnerMask; item.Permissions = perms; item.SalePrice = 10; item.SaleType = SaleType.Not; if (!m_inventoryClient.TryCreateItem(cap.OwnerID, item)) { m_log.Warn("Failed to create inventory item for uploaded asset " + assetID); } } else { m_log.WarnFormat("Failed to store uploaded inventory asset ({0} bytes)", assetData.Length); } } else { m_log.Warn("Inventory asset upload contained no data"); } // Build the response message NewFileAgentInventoryUploadReplyMessage reply = new NewFileAgentInventoryUploadReplyMessage(); reply.NewAsset = assetID; if (item != null) { reply.NewInventoryItem = item.ID; reply.NewBaseMask = item.Permissions.BaseMask; reply.NewEveryoneMask = item.Permissions.EveryoneMask; reply.NewNextOwnerMask = item.Permissions.NextOwnerMask; reply.NewOwnerMask = item.Permissions.OwnerMask; } LLUtil.SendLLSDXMLResponse(response, reply.Serialize()); }
private static List <LLInventoryTaskItem> ParseTaskInventory(UUID parentObjectID, string taskData) { List <LLInventoryTaskItem> items = new List <LLInventoryTaskItem>(); int lineNum = 0; string[] lines = taskData.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); while (lineNum < lines.Length) { string key, value; if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "inv_item") { #region Default Values UUID itemID = UUID.Zero; UUID assetID = UUID.Zero; UUID parentID = UUID.Zero; UUID creatorID = UUID.Zero; UUID ownerID = UUID.Zero; UUID lastOwnerID = UUID.Zero; UUID groupID = UUID.Zero; bool groupOwned = false; string name = String.Empty; string desc = String.Empty; AssetType assetType = AssetType.Unknown; InventoryType inventoryType = InventoryType.Unknown; DateTime creationDate = Utils.Epoch; uint flags = 0; Permissions perms = Permissions.NoPermissions; SaleType saleType = SaleType.Not; int salePrice = 0; #endregion Default Values while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { #region Line Parsing if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "item_id") { UUID.TryParse(value, out itemID); } else if (key == "parent_id") { UUID.TryParse(value, out parentID); } else if (key == "permissions") { #region permissions while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "creator_mask") { // Deprecated uint val; if (Utils.TryParseHex(value, out val)) { perms.BaseMask = (PermissionMask)val; } } else if (key == "base_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.BaseMask = (PermissionMask)val; } } else if (key == "owner_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.OwnerMask = (PermissionMask)val; } } else if (key == "group_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.GroupMask = (PermissionMask)val; } } else if (key == "everyone_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.EveryoneMask = (PermissionMask)val; } } else if (key == "next_owner_mask") { uint val; if (Utils.TryParseHex(value, out val)) { perms.NextOwnerMask = (PermissionMask)val; } } else if (key == "creator_id") { UUID.TryParse(value, out creatorID); } else if (key == "owner_id") { UUID.TryParse(value, out ownerID); } else if (key == "last_owner_id") { UUID.TryParse(value, out lastOwnerID); } else if (key == "group_id") { UUID.TryParse(value, out groupID); } else if (key == "group_owned") { uint val; if (UInt32.TryParse(value, out val)) { groupOwned = (val != 0); } } } } #endregion permissions } else if (key == "sale_info") { #region sale_info while (lineNum < lines.Length) { if (ParseLine(lines[lineNum++], out key, out value)) { if (key == "{") { continue; } else if (key == "}") { break; } else if (key == "sale_type") { saleType = Utils.StringToSaleType(value); } else if (key == "sale_price") { Int32.TryParse(value, out salePrice); } } } #endregion sale_info } else if (key == "shadow_id") { UUID shadowID; if (UUID.TryParse(value, out shadowID)) { assetID = DecryptShadowID(shadowID); } } else if (key == "asset_id") { UUID.TryParse(value, out assetID); } else if (key == "type") { assetType = Utils.StringToAssetType(value); } else if (key == "inv_type") { inventoryType = Utils.StringToInventoryType(value); } else if (key == "flags") { UInt32.TryParse(value, out flags); } else if (key == "name") { name = value.Substring(0, value.IndexOf('|')); } else if (key == "desc") { desc = value.Substring(0, value.IndexOf('|')); } else if (key == "creation_date") { uint timestamp; if (UInt32.TryParse(value, out timestamp)) { creationDate = Utils.UnixTimeToDateTime(timestamp); } else { Logger.Log("Failed to parse creation_date " + value, Helpers.LogLevel.Warning); } } #endregion Line Parsing } } LLInventoryTaskItem item = new LLInventoryTaskItem(); item.AssetID = assetID; item.ContentType = LLUtil.LLAssetTypeToContentType((int)assetType); item.CreationDate = creationDate; item.CreatorID = creatorID; item.Description = desc; item.Flags = flags; item.GroupID = groupID; item.GroupOwned = groupOwned; item.ID = itemID; item.Name = name; item.OwnerID = ownerID; item.ParentID = parentID; item.ParentObjectID = parentObjectID; item.PermissionGranter = UUID.Zero; // TODO: We should be serializing this item.Permissions = perms; item.SalePrice = salePrice; item.SaleType = saleType; items.Add(item); } else { //m_log.Warn("Unrecognized token " + key + " in: " + Environment.NewLine + taskData); } } } return(items); }