public async static Task SendFileNoCrypt(string fileName, byte[] fileContents, string peer) { try { progressIndeterminate(); PreSendRequestNoCrypt preSend = new PreSendRequestNoCrypt(); preSend.FileName = fileName; var preSendSocket = await sendRequestToPeer(peer, Strings.REQUEST_TYPE_PRE_SEND_NOCRYPT, JSONHandling.SerializeObject(preSend), timeout: 0); var response = await preSendSocket.Recv(); if (response == Strings.RESPONSE_NOT_PAIRED) { if (!(await Pair(peer))) return; await SendFile(fileName, fileContents, peer); return; } else if (response == Strings.RESPONSE_REJECT) { await DialogBoxes.ShowMessageBox("File rejected"); progressStop(); return; } File sentFile = new File(fileName, fileContents); await sendRequestToPeer(peer, Strings.REQUEST_TYPE_SEND_NOCRYPT, JSONHandling.SerializeObject(sentFile), true); progressStop(); } catch (FileTransferException error) { DialogBoxes.ShowMessageBox(error.Message); } catch (Exception error) { DialogBoxes.ShowMessageBox("Unknown error: " + error.Message); } finally { progressStop(); } }
public async static Task SendFile(string fileName, byte[] fileContents, string peer) { try { progressIndeterminate(); Peer selectedPeer = peerMap[peer]; PreSendRequest preSend = new PreSendRequest(); String filePrivateKey = DiffieHellman.generate_DH_Private(); String filePublicKey = DiffieHellman.calculate_DH_Public(filePrivateKey); byte[] aesKey = DiffieHellman.calculate_DH_AES(selectedPeer.PublicKey, filePrivateKey); preSend.FileName = fileName; preSend.key = new PublicKey(filePublicKey, selectedPeer.SharedPassword); var preSendSocket = await sendRequestToPeer(peer, Strings.REQUEST_TYPE_PRE_SEND, JSONHandling.SerializeObject(preSend), timeout:0); var response = await preSendSocket.Recv(); if (response == Strings.RESPONSE_NOT_PAIRED) { if (!(await Pair(peer))) return; await SendFile(fileName, fileContents, peer); return; } else if (response == Strings.RESPONSE_REJECT) { await DialogBoxes.ShowMessageBox("File rejected"); progressStop(); return; } File sentFile = new File(fileName, fileContents, aesKey); await sendRequestToPeer(peer, Strings.REQUEST_TYPE_SEND, JSONHandling.SerializeObject(sentFile), true); progressStop(); } catch (FileTransferException error) { DialogBoxes.ShowMessageBox(error.Message); } catch (Exception error) { DialogBoxes.ShowMessageBox("Unknown error: " + error.Message); } finally { progressStop(); } }