FtpStream FileToFtpStream(string source) { try { FtpStream writeStream; #pragma warning disable SCS0018 // Path traversal: injection possible in {1} argument passed to '{0}' using (FileStream readStream = new FileStream(source, FileMode.Open, FileAccess.Read)) #pragma warning restore SCS0018 // Path traversal: injection possible in {1} argument passed to '{0}' { using (writeStream = new FtpStream(new MemoryStream(), false, true, false)) { int Length = 256; Byte[] buffer = new Byte[Length]; int bytesread = readStream.Read(buffer, 0, Length); while (bytesread > 0) { writeStream.Write(buffer, 0, bytesread); bytesread = readStream.Read(buffer, 0, Length); } } } return(writeStream); } catch (Exception e) { ProcessApplicationError("", e); return(null); } }
private int SendData(Stream requestStream, Socket Accept) { if (Accept == null) { throw new ArgumentNullException(nameof(Accept)); } FtpStream ftpStream = requestStream as FtpStream; ftpStream.InternalPosition = 0; int Length = (int)ftpStream.InternalLength; Byte [] sendbuffer = new Byte[Length]; ftpStream.InternalRead(sendbuffer, 0, Length); int cbReturn = Accept.Send(sendbuffer, Length, 0); ftpStream.InternalClose(); return(cbReturn); }
public void Put(string source, string target, string transferMode) { string targetPath, sourcePath, targetName, sourceName; ResetError(); pathAndName("", source, out sourcePath, out sourceName); pathAndName(sourceName, target, out targetPath, out targetName); FtpStream writeStream = FileToFtpStream(sourcePath + "\\" + sourceName); if (_status != 0) { return; } if (_bPassiveMode) { OpenPassiveDataConnection(); } else { OpenDataConnection(); } string sztype = "I"; if (transferMode == "A") { sztype = "A"; } SendCommand("TYPE", sztype); ResponseDescription resp_desc = ReceiveCommandResponse(); if (!resp_desc.PositiveCompletion) { ProcessApplicationError("Data negotiation failed:\n" + _sbControlSocketLog.ToString()); CloseDataConnection(); return; } setFtpDir(targetPath); SendCommand("STOR", targetName); resp_desc = ReceiveCommandResponse(); if (resp_desc.PositivePreliminary) { if (writeStream != null) { Socket DataConnection; if (_bPassiveMode) { DataConnection = _DataSocket; } else { DataConnection = _DataSocket.Accept(); } if (DataConnection == null) { ProcessProtocolViolationError("Accept failed "); } SendData(writeStream, DataConnection); DataConnection.Close(); ResponseDescription resp = ReceiveCommandResponse(); if (!resp.PositiveCompletion) { _status = resp.Status; } else { _status = 0; } _statusDescription = resp.StatusDescription; } else { ProcessApplicationError("Data to be uploaded not specified"); CloseDataConnection(); return; } } else { ProcessApplicationError(ComposeExceptionMessage(resp_desc, _sbControlSocketLog.ToString())); CloseDataConnection(); return; } CloseDataConnection(); return; }