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); }
public OpTicket(Guid storeID, FileEntry file) { TicketType = OpTicketType.FileRepair; TicketCreationTime = DateTime.UtcNow; OpID = Guid.NewGuid(); StoreID = storeID; Files = new FileEntry[] { file }; }
public OpTicket(Guid storeID, FileEntry[] files) { TicketType = OpTicketType.HashList; TicketCreationTime = DateTime.UtcNow; OpID = Guid.NewGuid(); StoreID = storeID; Files = files; }
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(); }
/// <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; } }
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"); }
public void AddEntry(FileEntry entry) { string path = VirtualPath + entry.VirtualName; Entries.Add(entry.VirtualName, entry); }
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 }
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); }
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); } }
public FileStoreEntry(Guid store, FileEntry entry) { StoreID = store; Entry = entry; storeIdStr = StoreID.ToHexString(); }
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(); }