Example #1
0
 public bool CheckHash(FileEntry entry)
 {
     Stream stream = File.OpenRead(StorePath + entry.VirtualPath);
     
     byte[] hash = hashProvider.ComputeHash(stream);
     stream.Close();
     return Enumerable.SequenceEqual(hash, entry.VerifiedHash);
 }
Example #2
0
 public OpTicket(Guid storeID, FileEntry file)
 {
     TicketType = OpTicketType.FileRepair;
     TicketCreationTime = DateTime.UtcNow;
     OpID = Guid.NewGuid();
     StoreID = storeID;
     Files = new FileEntry[] { file };
 }
Example #3
0
 public OpTicket(Guid storeID, FileEntry[] files)
 {
     TicketType = OpTicketType.HashList;
     TicketCreationTime = DateTime.UtcNow;
     OpID = Guid.NewGuid();
     StoreID = storeID;
     Files = files;
 }
Example #4
0
 public static void AddEntries(MySqlConnection connection, FileEntry[] entries)
 {
     MySqlCommand command = connection.CreateCommand();
     StringBuilder builder = new StringBuilder("INSERT INTO fog.entry_data (Path, md5chksum, LastChange) VALUES ");
     for (int i = 0; i < entries.Length; i++)
     {
         FileEntry entry = entries[i];
         builder.Append(string.Format("('{0}', '{1}', '{2}')", entry.VirtualPath, entry.VerifiedHash.ToHexString(), entry.TimeOfUpdate.ToString("yyyy-MM-dd H:mm:ss")));
         if (i != entries.Length - 1)
             builder.Append(", \n");
     }
     builder.Append(";");
     command.CommandText = builder.ToString();
     command.ExecuteNonQuery();
 }
Example #5
0
        /// <summary>
        /// Recreates an OpTicket by deserializing OpTicket data
        /// </summary>
        /// <param name="data">The serialized data</param>
        public OpTicket(byte[] data)
        {
            TicketType = (OpTicketType)data[0];
            byte[] guidData = new byte[16];
            Array.Copy(data, 1, guidData, 0, 16);
            OpID = new Guid(guidData);
            Array.Copy(data, 17, guidData, 0, 16);
            StoreID = new Guid(guidData);

            TicketCreationTime = DateTime.FromBinary(BitConverter.ToInt64(data, 33));
            Files = new FileEntry[data[41] * 256 + data[42]];
            int index = 43;
            for (int i = 0; i < Files.Length; i++)
            {
                byte[] fileData = new byte[data[index] * 256 + data[index + 1]];
                Array.Copy(data, index + 2, fileData, 0, fileData.Length);
                Files[i] = new FileEntry(fileData);
                index += fileData.Length + 2;
            }
        }
Example #6
0
 private void RepairFile(FileStore store, FileEntry entry)
 {
     //CmdConsole.Print("Sending repair request: " + entry.VirtualPath);
     string link = RepairRequest(ID, store.ID, entry.VirtualPath);
     System.Threading.Thread.Sleep(1000);
     //CmdConsole.Print("Downloading file link: " + link);
     Directory.CreateDirectory(store.StorePath + entry.VirtualPath.Substring(0, entry.VirtualPath.LastIndexOf("/")));
     Client.DownloadFile(link, store.StorePath + entry.VirtualPath);
     CmdConsole.Print("Downloaded");
 }
Example #7
0
 public void AddEntry(FileEntry entry)
 {
     string path = VirtualPath + entry.VirtualName;
     Entries.Add(entry.VirtualName, entry);
 }
Example #8
0
 public void DeleteEntry(FileEntry entry)
 {
     string[] pathData = GetPathData(entry.VirtualPath);
     EntryDirectoryNode pathNode = Navigate(pathData[0], true);
     pathNode.Entries.Remove(entry.VirtualName); //remove from tree
     entries.Remove(entry); //remove from linked list
 }
Example #9
0
        public void ReplaceFile(FileEntry entry)
        {
            //Get Directory where entry exists
            string[] pathData = GetPathData(entry.VirtualPath);
            EntryDirectoryNode pathNode = Navigate(pathData[0], true);

            //delete old if exists
            if (pathNode.Entries.ContainsKey(pathData[1]))
                DeleteEntry(pathNode.Entries[pathData[1]]);
            //add entry
            pathNode.Entries.Add(entry.VirtualName, entry);
            entries.Add(entry);
        }
Example #10
0
 public void AddFile(FileEntry entry)
 {
     //Get Directory where entry exists
     string[] pathData = GetPathData(entry.VirtualPath);
     EntryDirectoryNode pathNode = Navigate(pathData[0], true);
     
     //check if entry exists
     if (pathNode.Entries.ContainsKey(pathData[1]))
     {
         FileEntry conflictEntry = pathNode.Entries[pathData[1]];
         if (!Enumerable.SequenceEqual(entry.VerifiedHash, conflictEntry.VerifiedHash))
         {
             throw new InvalidOperationException("Current entry has different checksum");
         }
         //do nothing since path and checksum is same
     }
     else
     {
         //add new entry
         pathNode.Entries.Add(entry.VirtualName, entry);
         entries.Add(entry);
     }
 }
Example #11
0
 public FileStoreEntry(Guid store, FileEntry entry)
 {
     StoreID = store;
     Entry = entry;
     storeIdStr = StoreID.ToHexString();
 }
Example #12
0
 private AvailableStore GetAvailableNode(Guid brokenStoreID, FileEntry entry)
 {
     foreach (NodeInfo node in nodeList)
     {
         foreach (FileStore store in storeList)
         {
             if (brokenStoreID == store.ID) continue;
             else if (store.EntryTree.GetFile(entry.VirtualPath) != null)
                 return new AvailableStore(node, store);
         }
     }
     return new AvailableStore();
 }