// Processing Data objects received static void HandleData(Data data) { if (data.type == DataType.FileSearch) { DataFileSearch dfs = (DataFileSearch)data; Console.WriteLine("[+] Received search for " + dfs.search); String[] tabFile = Directory.GetFiles(Program.incomingFolder, dfs.search); for (int i = 0; i < tabFile.Length; i++) { tabFile[i] = Path.GetFileName(tabFile[i]); } SendData(new DataFileResults { results = tabFile }); } else if (data.type == DataType.FileResults) { DataFileResults dfr = (DataFileResults)data; Console.WriteLine("[+] Received this results : "); for (int i = 0; i < dfr.results.Length; i++) { Console.WriteLine("- " + dfr.results[i]); } } else if (data.type == DataType.FileRequest) { DataFileRequest dfr = (DataFileRequest)data; sFile f = new sFile(incomingFolder + dfr.request); SendFile(f); Console.WriteLine("[+] Peer requested for " + dfr.request + ", file sent"); } else if (data.type == DataType.FileSend) { DataFileSend dfs = (DataFileSend)data; ReceiveFile(dfs); //BASIC check //since TCP is reliable, there should be no problem. But you can add checksum for integrity if (dfs.fileinfo.size == new FileInfo(incomingFolder + dfs.fileinfo.name).Length) { Console.WriteLine("[+] Received " + dfs.fileinfo.name); } } }
//looping for input commands //available commands : search, send, request static void InputLoop() { while (alive) { String txt = Console.ReadLine(); String[] args = txt.Split(' '); if (args[0] == "search") { if (args.Length == 2) { SendData(new DataFileSearch { search = args[1] }); } else { Console.WriteLine("[-] Please provide an argument. Ex : search *.jpg"); } } else if (args[0] == "send") { if (args.Length == 2) { if (File.Exists(incomingFolder + args[1])) { sFile f = new sFile(incomingFolder + args[1]); if (f.size == 0) { Console.WriteLine("[-] Specified file is empty"); } else { SendFile(f); } } else { Console.WriteLine("[-] File doesn't exist"); } } else { Console.WriteLine("[-] Please provide an argument. Ex : send myfile.png"); } } else if (args[0] == "request") { if (args.Length == 2) { SendData(new DataFileRequest { request = args[1] }); } else { Console.WriteLine("[-] Please provide an argument. Ex : request yourfile.png"); } } else if (args[0] == "exit") { alive = false; Console.WriteLine("[+] Exiting, good bye"); } else { Console.WriteLine("[-] Unknow command : " + args[0]); } } }