Ejemplo n.º 1
0
        private static InventoryFolderWithChildren BuildInventoryHierarchy(ref InventoryCollection inventory)
        {
            m_log.DebugFormat("[INVENTORYARCHIVE]: Building inventory hierarchy");
            InventoryFolderWithChildren rootFolder = null;

            foreach (InventoryFolderWithChildren parentFolder in inventory.Folders.Values)
            {
                // Grab the root folder, it has no parents.
                if (UUID.Zero == parentFolder.ParentID)
                {
                    rootFolder = parentFolder;
                }

                foreach (InventoryFolderWithChildren folder in inventory.Folders.Values)
                {
                    if (parentFolder.ID == folder.ParentID)
                    {
                        parentFolder.Children.Add(folder.ID, folder);
                    }
                }

                foreach (InventoryItemBase item in inventory.Items.Values)
                {
                    if (parentFolder.ID == item.Folder)
                    {
                        parentFolder.Children.Add(item.ID, item);
                    }
                }
            }

            return(rootFolder);
        }
Ejemplo n.º 2
0
            public override byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
            {
                UUID agentID, sessionID;
                InventoryFolderWithChildren folder = DeserializeFolder(httpRequest.InputStream, out agentID, out sessionID);

                if (folder != null)
                {
                    Uri owner = Utils.GetOpenSimUri(folder.Owner);

                    // Some calls that are moving or updating a folder instead
                    // of creating a new one will pass in an InventoryFolder
                    // without the name set and type set to 0. If this is the
                    // case we need to look up the name first and preserver
                    // it's type.
                    if (String.IsNullOrEmpty(folder.Name))
                    {
                        InventoryFolderWithChildren oldFolder;
                        if (m_server.InventoryProvider.TryFetchFolder(owner, folder.ID, out oldFolder) == BackendResponse.Success)
                        {
                            folder.Name = oldFolder.Name;
                            folder.Type = oldFolder.Type;
                        }
                    }

                    BackendResponse storageResponse = m_server.InventoryProvider.TryCreateFolder(owner, folder);

                    if (storageResponse == BackendResponse.Success)
                    {
                        return SerializeBool(true);
                    }
                }

                return SerializeBool(false);
            }
        public BackendResponse TryPurgeFolder(Uri owner, UUID folderID)
        {
            BackendResponse ret;

            InventoryCollection         collection;
            InventoryFolderWithChildren folder;

            if (inventories.TryGetValue(owner, out collection) && collection.Folders.TryGetValue(folderID, out folder))
            {
                // Delete all of the folder children
                foreach (InventoryNodeBase obj in new List <InventoryNodeBase>(folder.Children.Values))
                {
                    if (obj is InventoryItemBase)
                    {
                        TryDeleteItem(owner, (obj as InventoryItemBase).ID);
                    }
                    else
                    {
                        InventoryFolderWithChildren childFolder = obj as InventoryFolderWithChildren;
                        TryPurgeFolder(owner, childFolder.ID);
                        TryDeleteFolder(owner, childFolder.ID);
                    }
                }

                ret = BackendResponse.Success;
            }
            else
            {
                ret = BackendResponse.NotFound;
            }

            server.MetricsProvider.LogInventoryPurgeFolder(EXTENSION_NAME, ret, owner, folderID, DateTime.Now);
            return(ret);
        }
        public BackendResponse TryFetchFolderList(Uri owner, out List <InventoryFolderWithChildren> folders)
        {
            folders = new List <InventoryFolderWithChildren>();
            BackendResponse ret;
            UUID            ownerID;

            if (Utils.TryGetOpenSimUUID(owner, out ownerID))
            {
                List <InventoryFolderBase> baseFolders = m_inventoryService.GetInventorySkeleton(ownerID);
                foreach (InventoryFolderBase baseFolder in baseFolders)
                {
                    InventoryFolderWithChildren folder = new InventoryFolderWithChildren(baseFolder);
                    //folder.Children = null; // This call does not create a folder hierarchy
                    folders.Add(folder);
                }

                ret = BackendResponse.Success;
            }
            else
            {
                folders = null;
                ret     = BackendResponse.NotFound;
            }

            m_server.MetricsProvider.LogInventoryFetchFolderList(EXTENSION_NAME, ret, owner, DateTime.Now);
            return(ret);
        }
Ejemplo n.º 5
0
            public override byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
            {
                UUID ownerID = DeserializeUUID(httpRequest.InputStream);

                if (ownerID != UUID.Zero)
                {
                    Uri owner = Utils.GetOpenSimUri(ownerID);
                    m_log.DebugFormat("[OPENSIMINVENTORYFRONTEND]: Created URI {0} for inventory creation", owner);

                    InventoryFolderWithChildren rootFolder = new InventoryFolderWithChildren("My Inventory", ownerID, UUID.Zero, (short)AssetType.Folder);
                    BackendResponse storageResponse = m_server.InventoryProvider.TryCreateInventory(owner, rootFolder);
                    if (storageResponse == BackendResponse.Success)
                    {
                        // TODO: The CreateFolder calls need to be executed in SimpleStorage.
                        //CreateFolder("Animations", ownerID, rootFolder.ID, AssetType.Animation);
                        //CreateFolder("Body Parts", ownerID, rootFolder.ID, AssetType.Bodypart);
                        //CreateFolder("Calling Cards", ownerID, rootFolder.ID, AssetType.CallingCard);
                        //CreateFolder("Clothing", ownerID, rootFolder.ID, AssetType.Clothing);
                        //CreateFolder("Gestures", ownerID, rootFolder.ID, AssetType.Gesture);
                        //CreateFolder("Landmarks", ownerID, rootFolder.ID, AssetType.Landmark);
                        //CreateFolder("Lost and Found", ownerID, rootFolder.ID, AssetType.LostAndFoundFolder);
                        //CreateFolder("Notecards", ownerID, rootFolder.ID, AssetType.Notecard);
                        //CreateFolder("Objects", ownerID, rootFolder.ID, AssetType.Object);
                        //CreateFolder("Photo Album", ownerID, rootFolder.ID, AssetType.SnapshotFolder);
                        //CreateFolder("Scripts", ownerID, rootFolder.ID, AssetType.LSLText);
                        //CreateFolder("Sounds", ownerID, rootFolder.ID, AssetType.Sound);
                        //CreateFolder("Textures", ownerID, rootFolder.ID, AssetType.Texture);
                        //CreateFolder("Trash", ownerID, rootFolder.ID, AssetType.TrashFolder);

                        return SerializeBool(true);
                    }
                }

                return SerializeBool(false);
            }
        public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolderWithChildren folder)
        {
            BackendResponse ret;

            // TODO: implement some logic for "folder not found"
            folder = m_inventoryService.GetInventoryFolder(folderID);
            ret    = BackendResponse.Success;

            m_server.MetricsProvider.LogInventoryFetch(EXTENSION_NAME, ret, owner, folderID, true, DateTime.Now);
            return(ret);
        }
        void SaveFolder(InventoryFolderWithChildren folder)
        {
            string filename = String.Format("{0}-{1}.folder", SanitizeFilename(folder.Name), folder.ID);

            string path = Path.Combine(DEFAULT_INVENTORY_DIR, folder.Owner.ToString());

            path = Path.Combine(path, filename);

            using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                folderSerializer.Serialize(stream, folder);
                stream.Flush();
            }
        }
Ejemplo n.º 8
0
        public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolderWithChildren folder)
        {
            folder = null;
            BackendResponse ret;

            InventoryCollection collection;
            if (inventories.TryGetValue(owner, out collection) && collection.Folders.TryGetValue(folderID, out folder))
                ret = BackendResponse.Success;
            else
                ret = BackendResponse.NotFound;

            server.MetricsProvider.LogInventoryFetch(EXTENSION_NAME, ret, owner, folderID, true, DateTime.Now);
            return ret;
        }
        public BackendResponse TryCreateInventory(Uri owner, InventoryFolderWithChildren rootFolder)
        {
            BackendResponse ret;

            lock (inventories)
            {
                if (!inventories.ContainsKey(owner))
                {
                    InventoryCollection collection = new InventoryCollection();
                    collection.UserID  = rootFolder.Owner;
                    collection.Folders = new Dictionary <UUID, InventoryFolderWithChildren>();
                    collection.Folders.Add(rootFolder.ID, rootFolder);
                    collection.Items = new Dictionary <UUID, InventoryItemBase>();

                    inventories.Add(owner, collection);

                    ret = BackendResponse.Success;
                }
                else
                {
                    ret = BackendResponse.Failure;
                }
            }

            if (ret == BackendResponse.Success)
            {
                string path = Path.Combine(DEFAULT_INVENTORY_DIR, rootFolder.Owner.ToString());
                try
                {
                    // Create the directory for this agent
                    Directory.CreateDirectory(path);

                    // Create an index.txt containing the UUID and URI for this agent
                    string[] index = new string[] { rootFolder.Owner.ToString(), owner.ToString() };
                    File.WriteAllLines(Path.Combine(path, "index.txt"), index);

                    // Create the root folder file
                    SaveFolder(rootFolder);
                }
                catch (Exception ex)
                {
                    m_log.Error("[SIMPLEINVENTORYSTORAGE]: " + ex.Message);
                    ret = BackendResponse.Failure;
                }
            }

            server.MetricsProvider.LogInventoryCreateInventory(EXTENSION_NAME, ret, DateTime.Now);
            return(ret);
        }
Ejemplo n.º 10
0
        private static InventoryFolderWithChildren DeserializeFolder(Stream stream, out UUID agentID, out UUID sessionID)
        {
            InventoryFolderWithChildren folder = new InventoryFolderWithChildren();

            try
            {
                using (XmlReader reader = XmlReader.Create(stream))
                {
                    reader.MoveToContent();
                    reader.ReadStartElement("RestSessionObjectOfInventoryFolderBase");
                    UUID.TryParse(reader.ReadElementContentAsString("SessionID", String.Empty), out sessionID);
                    UUID.TryParse(reader.ReadElementContentAsString("AvatarID", String.Empty), out agentID);
                    reader.ReadStartElement("Body");
                    if (reader.Name == "Name")
                        folder.Name = reader.ReadElementContentAsString("Name", String.Empty);
                    else
                        folder.Name = String.Empty;

                    UUID dummyUUID;
                    ReadUUID(reader, "ID", out dummyUUID);
                    folder.ID = dummyUUID;
                    ReadUUID(reader, "Owner", out dummyUUID);
                    folder.Owner = dummyUUID;
                    ReadUUID(reader, "ParentID", out dummyUUID);
                    folder.ParentID = dummyUUID;

                    short dummyType;
                    Int16.TryParse(reader.ReadElementContentAsString("Type", String.Empty), out dummyType);
                    folder.Type = dummyType;

                    ushort dummyVersion;
                    UInt16.TryParse(reader.ReadElementContentAsString("Version", String.Empty), out dummyVersion);
                    folder.Version = dummyVersion;

                    reader.ReadEndElement();
                    reader.ReadEndElement();
                }
            }
            catch (Exception ex)
            {
                m_log.Warn("[OPENSIMINVENTORYFRONTEND]: Failed to parse POST data (expecting InventoryFolderBase): " + ex.Message);
                agentID = UUID.Zero;
                sessionID = UUID.Zero;
                return null;
            }

            return folder;
        }
        public BackendResponse TryCreateFolder(Uri owner, InventoryFolderWithChildren folder)
        {
            BackendResponse ret;

            if (m_inventoryService.AddFolder(folder))
            {
                ret = BackendResponse.Success;
            }
            else
            {
                ret = BackendResponse.Failure;
            }

            m_server.MetricsProvider.LogInventoryCreate(EXTENSION_NAME, ret, owner, true, DateTime.Now);
            return(ret);
        }
Ejemplo n.º 12
0
        public BackendResponse TryCreateFolder(Uri owner, InventoryFolderWithChildren folder)
        {
            BackendResponse ret;

            InventoryCollection collection;

            if (inventories.TryGetValue(owner, out collection))
            {
                // Delete this folder first if it already exists
                InventoryFolderWithChildren oldFolder;
                if (collection.Folders.TryGetValue(folder.ID, out oldFolder))
                {
                    TryDeleteFolder(owner, folder.ID);
                }

                try
                {
                    // Create the file
                    SaveFolder(folder);

                    // Add the folder to the collection
                    lock (collection) collection.Folders[folder.ID] = folder;

                    // Add the folder to its parent folder
                    InventoryFolderWithChildren parent;
                    if (collection.Folders.TryGetValue(folder.ParentID, out parent))
                    {
                        lock (parent.Children) parent.Children.Add(folder.ID, folder);
                    }

                    ret = BackendResponse.Success;
                }
                catch (Exception ex)
                {
                    m_log.Error("[SIMPLEINVENTORYSTORAGE]: " + ex.Message);
                    ret = BackendResponse.Failure;
                }
            }
            else
            {
                ret = BackendResponse.NotFound;
            }

            server.MetricsProvider.LogInventoryCreate(EXTENSION_NAME, ret, owner, true, DateTime.Now);
            return(ret);
        }
        public InventoryFolderWithChildren GetInventoryFolder(UUID folderID)
        {
            InventoryFolderBase baseFolder = null;
            InventoryFolderWithChildren folder = null;

            foreach (IInventoryDataPlugin plugin in m_plugins)
            {
                baseFolder = plugin.getInventoryFolder(folderID);
            }

            if (null != baseFolder)
            {
                folder = new InventoryFolderWithChildren(baseFolder);
                folder.Children = null; // This call only returns data for the folder itself, no children data
            }

            return folder;
        }
Ejemplo n.º 14
0
        public InventoryFolderWithChildren GetInventoryFolder(UUID folderID)
        {
            InventoryFolderBase         baseFolder = null;
            InventoryFolderWithChildren folder     = null;

            foreach (IInventoryDataPlugin plugin in m_plugins)
            {
                baseFolder = plugin.getInventoryFolder(folderID);
            }

            if (null != baseFolder)
            {
                folder          = new InventoryFolderWithChildren(baseFolder);
                folder.Children = null; // This call only returns data for the folder itself, no children data
            }

            return(folder);
        }
Ejemplo n.º 15
0
        private static void WriteInventoryFolderToArchive(
            TarArchiveWriter archive, InventoryFolderWithChildren folder, string path)
        {
            path += string.Format("{0}{1}{2}/", folder.Name, ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, folder.ID);
            archive.WriteDir(path);

            foreach (InventoryNodeBase inventoryNode in folder.Children.Values)
            {
                if (inventoryNode is InventoryFolderWithChildren)
                {
                    WriteInventoryFolderToArchive(archive, (InventoryFolderWithChildren)inventoryNode, path);
                }
                else if (inventoryNode is InventoryItemBase)
                {
                    WriteInventoryItemToArchive(archive, (InventoryItemBase)inventoryNode, path);
                }
            }
        }
Ejemplo n.º 16
0
            public override byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
            {
                UUID agentID, sessionID;
                InventoryFolderWithChildren folder = DeserializeFolder(httpRequest.InputStream, out agentID, out sessionID);

                if (folder != null)
                {
                    Uri owner = Utils.GetOpenSimUri(folder.Owner);
                    BackendResponse storageResponse = m_server.InventoryProvider.TryPurgeFolder(owner, folder.ID);

                    if (storageResponse == BackendResponse.Success)
                    {
                        return SerializeBool(true);
                    }
                }

                return SerializeBool(false);
            }
Ejemplo n.º 17
0
        public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolderWithChildren folder)
        {
            folder = null;
            BackendResponse ret;

            InventoryCollection collection;

            if (inventories.TryGetValue(owner, out collection) && collection.Folders.TryGetValue(folderID, out folder))
            {
                ret = BackendResponse.Success;
            }
            else
            {
                ret = BackendResponse.NotFound;
            }

            server.MetricsProvider.LogInventoryFetch(EXTENSION_NAME, ret, owner, folderID, true, DateTime.Now);
            return(ret);
        }
Ejemplo n.º 18
0
        public BackendResponse TryFetchFolderContents(Uri owner, UUID folderID, out InventoryCollection contents)
        {
            contents = null;
            BackendResponse ret;

            InventoryCollection         collection;
            InventoryFolderWithChildren folder;

            if (inventories.TryGetValue(owner, out collection) && collection.Folders.TryGetValue(folderID, out folder))
            {
                contents         = new InventoryCollection();
                contents.UserID  = collection.UserID;
                contents.Folders = new Dictionary <UUID, InventoryFolderWithChildren>();
                contents.Items   = new Dictionary <UUID, InventoryItemBase>();

                foreach (InventoryNodeBase invBase in folder.Children.Values)
                {
                    if (invBase is InventoryItemBase)
                    {
                        InventoryItemBase invItem = invBase as InventoryItemBase;
                        contents.Items.Add(invItem.ID, invItem);
                    }
                    else
                    {
                        InventoryFolderWithChildren invFolder = invBase as InventoryFolderWithChildren;
                        contents.Folders.Add(invFolder.ID, invFolder);
                    }
                }

                ret = BackendResponse.Success;
            }
            else
            {
                ret = BackendResponse.NotFound;
            }

            server.MetricsProvider.LogInventoryFetchFolderContents(EXTENSION_NAME, ret, owner, folderID, DateTime.Now);
            return(ret);
        }
        public BackendResponse TryCreateInventory(Uri owner, InventoryFolderWithChildren rootFolder)
        {
            BackendResponse ret;
            UUID            ownerID;

            if (Utils.TryGetOpenSimUUID(owner, out ownerID))
            {
                if (m_inventoryService.CreateNewUserInventory(ownerID))
                {
                    ret = BackendResponse.Success;
                }
                else
                {
                    ret = BackendResponse.Failure;
                }
            }
            else
            {
                ret = BackendResponse.Failure;
            }

            return(ret);
        }
Ejemplo n.º 20
0
        private static byte[] ArchiveInventoryCollection(InventoryCollection inventory)
        {
            byte[] buffer = new byte[] {};

            // Fill in each folder's Children dictionary.
            InventoryFolderWithChildren rootFolder = BuildInventoryHierarchy(ref inventory);

            // TODO: It's probably a bad idea to tar to memory for large
            // inventories.
            MemoryStream     ms      = new MemoryStream();
            GZipStream       gzs     = new GZipStream(ms, CompressionMode.Compress, true);
            TarArchiveWriter archive = new TarArchiveWriter(gzs);

            WriteInventoryFolderToArchive(archive, rootFolder, ArchiveConstants.INVENTORY_PATH);

            archive.Close();

            ms.Seek(0, SeekOrigin.Begin);
            buffer = ms.GetBuffer();
            Array.Resize <byte>(ref buffer, (int)ms.Length);
            ms.Close();
            return(buffer);
        }
Ejemplo n.º 21
0
        public BackendResponse TryCreateInventory(Uri owner, InventoryFolderWithChildren rootFolder)
        {
            BackendResponse ret;
            UUID ownerID;

            if (Utils.TryGetOpenSimUUID(owner, out ownerID))
            {
                if (m_inventoryService.CreateNewUserInventory(ownerID))
                {
                    ret = BackendResponse.Success;
                }
                else
                {
                    ret = BackendResponse.Failure;
                }
            }
            else
            {
                ret = BackendResponse.Failure;
            }

            return ret;
        }
Ejemplo n.º 22
0
        public BackendResponse TryCreateInventory(Uri owner, InventoryFolderWithChildren rootFolder)
        {
            BackendResponse ret;

            lock (inventories)
            {
                if (!inventories.ContainsKey(owner))
                {
                    InventoryCollection collection = new InventoryCollection();
                    collection.UserID = rootFolder.Owner;
                    collection.Folders = new Dictionary<UUID, InventoryFolderWithChildren>();
                    collection.Folders.Add(rootFolder.ID, rootFolder);
                    collection.Items = new Dictionary<UUID, InventoryItemBase>();

                    inventories.Add(owner, collection);

                    ret = BackendResponse.Success;
                }
                else
                {
                    ret = BackendResponse.Failure;
                }
            }

            if (ret == BackendResponse.Success)
            {
                string path = Path.Combine(DEFAULT_INVENTORY_DIR, rootFolder.Owner.ToString());
                try
                {
                    // Create the directory for this agent
                    Directory.CreateDirectory(path);

                    // Create an index.txt containing the UUID and URI for this agent
                    string[] index = new string[] { rootFolder.Owner.ToString(), owner.ToString() };
                    File.WriteAllLines(Path.Combine(path, "index.txt"), index);

                    // Create the root folder file
                    SaveFolder(rootFolder);
                }
                catch (Exception ex)
                {
                    m_log.Error("[SIMPLEINVENTORYSTORAGE]: " + ex.Message);
                    ret = BackendResponse.Failure;
                }
            }

            server.MetricsProvider.LogInventoryCreateInventory(EXTENSION_NAME, ret, DateTime.Now);
            return ret;
        }
Ejemplo n.º 23
0
        void SaveFolder(InventoryFolderWithChildren folder)
        {
            string filename = String.Format("{0}-{1}.folder", SanitizeFilename(folder.Name), folder.ID);

            string path = Path.Combine(DEFAULT_INVENTORY_DIR, folder.Owner.ToString());
            path = Path.Combine(path, filename);

            using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                folderSerializer.Serialize(stream, folder);
                stream.Flush();
            }
        }
Ejemplo n.º 24
0
        public BackendResponse TryCreateFolder(Uri owner, InventoryFolderWithChildren folder)
        {
            BackendResponse ret;

            if (m_inventoryService.AddFolder(folder))
            {
                ret = BackendResponse.Success;
            }
            else
            {
                ret = BackendResponse.Failure;
            }

            m_server.MetricsProvider.LogInventoryCreate(EXTENSION_NAME, ret, owner, true, DateTime.Now);
            return ret;
        }
Ejemplo n.º 25
0
        public BackendResponse TryCreateFolder(Uri owner, InventoryFolderWithChildren folder)
        {
            BackendResponse ret;

            InventoryCollection collection;
            if (inventories.TryGetValue(owner, out collection))
            {
                // Delete this folder first if it already exists
                InventoryFolderWithChildren oldFolder;
                if (collection.Folders.TryGetValue(folder.ID, out oldFolder))
                    TryDeleteFolder(owner, folder.ID);

                try
                {
                    // Create the file
                    SaveFolder(folder);

                    // Add the folder to the collection
                    lock (collection) collection.Folders[folder.ID] = folder;

                    // Add the folder to its parent folder
                    InventoryFolderWithChildren parent;
                    if (collection.Folders.TryGetValue(folder.ParentID, out parent))
                        lock (parent.Children) parent.Children.Add(folder.ID, folder);

                    ret = BackendResponse.Success;
                }
                catch (Exception ex)
                {
                    m_log.Error("[SIMPLEINVENTORYSTORAGE]: " + ex.Message);
                    ret = BackendResponse.Failure;
                }
            }
            else
            {
                ret = BackendResponse.NotFound;
            }

            server.MetricsProvider.LogInventoryCreate(EXTENSION_NAME, ret, owner, true, DateTime.Now);
            return ret;
        }
Ejemplo n.º 26
0
        public BackendResponse TryFetchFolderList(Uri owner, out List<InventoryFolderWithChildren> folders)
        {
            folders = new List<InventoryFolderWithChildren>();
            BackendResponse ret;
            UUID ownerID;

            if (Utils.TryGetOpenSimUUID(owner, out ownerID))
            {
                List<InventoryFolderBase> baseFolders = m_inventoryService.GetInventorySkeleton(ownerID);
                foreach (InventoryFolderBase baseFolder in baseFolders)
                {
                    InventoryFolderWithChildren folder = new InventoryFolderWithChildren(baseFolder);
                    //folder.Children = null; // This call does not create a folder hierarchy
                    folders.Add(folder);
                }

                ret = BackendResponse.Success;
            }
            else
            {
                folders = null;
                ret = BackendResponse.NotFound;
            }

            m_server.MetricsProvider.LogInventoryFetchFolderList(EXTENSION_NAME, ret, owner, DateTime.Now);
            return ret;
        }
Ejemplo n.º 27
0
        void LoadFiles(string folder)
        {
            // Try to create the directory if it doesn't already exist
            if (!Directory.Exists(folder))
            {
                try { Directory.CreateDirectory(folder); }
                catch (Exception ex)
                {
                    m_log.Warn("[SIMPLEINVENTORYSTORAGE]: " + ex.Message);
                    return;
                }
            }

            try
            {
                string[] agentFolders = Directory.GetDirectories(DEFAULT_INVENTORY_DIR);

                for (int i = 0; i < agentFolders.Length; i++)
                {
                    string foldername = agentFolders[i];
                    string indexPath  = Path.Combine(foldername, "index.txt");
                    UUID   ownerID    = UUID.Zero;
                    Uri    owner      = null;

                    try
                    {
                        string[] index = File.ReadAllLines(indexPath);
                        ownerID = UUID.Parse(index[0]);
                        owner   = new Uri(index[1]);
                    }
                    catch (Exception ex)
                    {
                        m_log.WarnFormat("[SIMPLEINVENTORYSTORAGE]: Failed loading the index file {0}: {1}", indexPath, ex.Message);
                    }

                    if (ownerID != UUID.Zero && owner != null)
                    {
                        // Initialize the active gestures list for this agent
                        activeGestures.Add(owner, new List <InventoryItemBase>());

                        InventoryCollection collection = new InventoryCollection();
                        collection.UserID = ownerID;

                        // Load all of the folders for this agent
                        string[] folders = Directory.GetFiles(foldername, "*.folder", SearchOption.TopDirectoryOnly);
                        collection.Folders = new Dictionary <UUID, InventoryFolderWithChildren>(folders.Length);

                        for (int j = 0; j < folders.Length; j++)
                        {
                            InventoryFolderWithChildren invFolder = (InventoryFolderWithChildren)folderSerializer.Deserialize(
                                new FileStream(folders[j], FileMode.Open, FileAccess.Read));
                            collection.Folders[invFolder.ID] = invFolder;
                        }

                        // Iterate over the folders collection, adding children to their parents
                        foreach (InventoryFolderWithChildren invFolder in collection.Folders.Values)
                        {
                            InventoryFolderWithChildren parent;
                            if (collection.Folders.TryGetValue(invFolder.ParentID, out parent))
                            {
                                parent.Children[invFolder.ID] = invFolder;
                            }
                        }

                        // Load all of the items for this agent
                        string[] files = Directory.GetFiles(foldername, "*.item", SearchOption.TopDirectoryOnly);
                        collection.Items = new Dictionary <UUID, InventoryItemBase>(files.Length);

                        for (int j = 0; j < files.Length; j++)
                        {
                            InventoryItemBase invItem = (InventoryItemBase)itemSerializer.Deserialize(
                                new FileStream(files[j], FileMode.Open, FileAccess.Read));
                            collection.Items[invItem.ID] = invItem;

                            // Add items to their parent folders
                            InventoryFolderWithChildren parent;
                            if (collection.Folders.TryGetValue(invItem.Folder, out parent))
                            {
                                parent.Children[invItem.ID] = invItem;
                            }

                            // Add active gestures to our list
                            if (invItem.InvType == (int)InventoryType.Gesture && invItem.Flags != 0)
                            {
                                activeGestures[owner].Add(invItem);
                            }
                        }

                        inventories.Add(owner, collection);
                    }
                }
            }
            catch (Exception ex)
            {
                m_log.ErrorFormat("[SIMPLEINVENTORYSTORAGE]: Failed loading inventory from {0}: {1}", folder, ex.Message);
            }
        }
Ejemplo n.º 28
0
        public BackendResponse TryFetchFolder(Uri owner, UUID folderID, out InventoryFolderWithChildren folder)
        {
            BackendResponse ret;

            // TODO: implement some logic for "folder not found"
            folder = m_inventoryService.GetInventoryFolder(folderID);
            ret = BackendResponse.Success;

            m_server.MetricsProvider.LogInventoryFetch(EXTENSION_NAME, ret, owner, folderID, true, DateTime.Now);
            return ret;
        }
Ejemplo n.º 29
0
        private static void WriteInventoryFolderToArchive(
            TarArchiveWriter archive, InventoryFolderWithChildren folder, string path)
        {
            path += string.Format("{0}{1}{2}/", folder.Name, ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, folder.ID);
            archive.WriteDir(path);

            foreach (InventoryNodeBase inventoryNode in folder.Children.Values)
            {
                if (inventoryNode is InventoryFolderWithChildren)
                {
                    WriteInventoryFolderToArchive(archive, (InventoryFolderWithChildren) inventoryNode, path);
                }
                else if (inventoryNode is InventoryItemBase)
                {
                    WriteInventoryItemToArchive(archive, (InventoryItemBase) inventoryNode, path);
                }
            }
        }
Ejemplo n.º 30
0
            void WriteObject_InventoryFolder(InventoryFolderWithChildren ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
            {
                if (((object)ob) == null)
                {
                    if (isNullable)
                        WriteNullTagLiteral(element, namesp);
                    return;
                }

                System.Type type = ob.GetType();
                if (type == typeof(InventoryFolderWithChildren))
                { }
                else
                {
                    throw CreateUnknownTypeException(ob);
                }

                if (writeWrappingElem)
                {
                    WriteStartElement(element, namesp, ob);
                }

                if (needType) WriteXsiType("InventoryFolderBase", "");

                WriteElementString("Name", "", ob.@Name);
                WriteObject_UUID(ob.@Owner, "Owner", "", false, false, true);
                WriteObject_UUID(ob.@ParentID, "ParentID", "", false, false, true);
                WriteObject_UUID(ob.@ID, "ID", "", false, false, true);
                WriteElementString("Type", "", [email protected](CultureInfo.InvariantCulture));
                WriteElementString("Version", "", [email protected](CultureInfo.InvariantCulture));
                if (writeWrappingElem) WriteEndElement(ob);
            }