/// <exception cref="System.IO.IOException"></exception> public override void WriteTo(OutputStream @out) { if (@out == null) { throw new ArgumentException("Output stream may not be null"); } try { byte[] tmp = new byte[4096]; int l; while ((l = [email protected](tmp)) != -1) { @out.Write(tmp, 0, l); } @out.Flush(); } finally { [email protected](); } }
public override void Flush() { os.Flush(); }
/// <exception cref="System.IO.IOException"></exception> public override void WriteTo(OutputStream @out) { if (@out == null) { throw new ArgumentException("Output stream may not be null"); } InputStream @in = new ByteArrayInputStream(this.content); byte[] tmp = new byte[4096]; int l; while ((l = @in.Read(tmp)) != -1) { @out.Write(tmp, 0, l); } @out.Flush(); }
/// <exception cref="NSch.SftpException"></exception> private void _get(string src, OutputStream dst, SftpProgressMonitor monitor, int mode, long skip) { //System.err.println("_get: "+src+", "+dst); byte[] srcb = Util.Str2byte(src, fEncoding); try { SendOPENR(srcb); ChannelHeader header = new ChannelHeader(this); header = Header(buf, header); int length = header.length; int type = header.type; Fill(buf, length); if (type != SSH_FXP_STATUS && type != SSH_FXP_HANDLE) { throw new SftpException(SSH_FX_FAILURE, string.Empty); } if (type == SSH_FXP_STATUS) { int i = buf.GetInt(); ThrowStatusError(buf, i); } byte[] handle = buf.GetString(); // filename long offset = 0; if (mode == RESUME) { offset += skip; } int request_len = 0; while (true) { request_len = buf.buffer.Length - 13; if (server_version == 0) { request_len = 1024; } SendREAD(handle, offset, request_len); header = Header(buf, header); length = header.length; type = header.type; if (type == SSH_FXP_STATUS) { Fill(buf, length); int i = buf.GetInt(); if (i == SSH_FX_EOF) { goto loop_break; } ThrowStatusError(buf, i); } if (type != SSH_FXP_DATA) { goto loop_break; } buf.Rewind(); Fill(buf.buffer, 0, 4); length -= 4; int i_1 = buf.GetInt(); // length of data int foo = i_1; while (foo > 0) { int bar = foo; if (bar > buf.buffer.Length) { bar = buf.buffer.Length; } i_1 = io_in.Read(buf.buffer, 0, bar); if (i_1 < 0) { goto loop_break; } int data_len = i_1; dst.Write(buf.buffer, 0, data_len); offset += data_len; foo -= data_len; if (monitor != null) { if (!monitor.Count(data_len)) { while (foo > 0) { i_1 = io_in.Read(buf.buffer, 0, (buf.buffer.Length < foo ? buf.buffer.Length : foo )); if (i_1 <= 0) { break; } foo -= i_1; } goto loop_break; } } } loop_continue: ; } loop_break: ; //System.err.println("length: "+length); // length should be 0 dst.Flush(); if (monitor != null) { monitor.End(); } _sendCLOSE(handle, header); } catch (Exception e) { if (e is SftpException) { throw (SftpException)e; } if (e is Exception) { throw new SftpException(SSH_FX_FAILURE, string.Empty, (Exception)e); } throw new SftpException(SSH_FX_FAILURE, string.Empty); } }
/// <exception cref="NSch.SftpException"></exception> private void _get(string src, OutputStream dst, SftpProgressMonitor monitor, int mode, long skip) { //System.err.println("_get: "+src+", "+dst); byte[] srcb = Util.Str2byte(src, fEncoding); try { SendOPENR(srcb); ChannelHeader header = new ChannelHeader(this); header = Header(buf, header); int length = header.length; int type = header.type; Fill(buf, length); if (type != SSH_FXP_STATUS && type != SSH_FXP_HANDLE) { throw new SftpException(SSH_FX_FAILURE, string.Empty); } if (type == SSH_FXP_STATUS) { int i = buf.GetInt(); ThrowStatusError(buf, i); } byte[] handle = buf.GetString(); // filename long offset = 0; if (mode == RESUME) { offset += skip; } int request_max = 1; rq.Init(); long request_offset = offset; int request_len = buf.buffer.Length - 13; if (server_version == 0) { request_len = 1024; } while (true) { while (rq.Count() < request_max) { SendREAD(handle, request_offset, request_len, rq); request_offset += request_len; } header = Header(buf, header); length = header.length; type = header.type; ChannelSftp.RequestQueue.Request rr = rq.Get(header.rid); if (type == SSH_FXP_STATUS) { Fill(buf, length); int i = buf.GetInt(); if (i == SSH_FX_EOF) { goto loop_break; } ThrowStatusError(buf, i); } if (type != SSH_FXP_DATA) { goto loop_break; } buf.Rewind(); Fill(buf.buffer, 0, 4); length -= 4; int length_of_data = buf.GetInt(); // length of data int optional_data = length - length_of_data; int foo = length_of_data; while (foo > 0) { int bar = foo; if (bar > buf.buffer.Length) { bar = buf.buffer.Length; } int data_len = io_in.Read(buf.buffer, 0, bar); if (data_len < 0) { goto loop_break; } dst.Write(buf.buffer, 0, data_len); offset += data_len; foo -= data_len; if (monitor != null) { if (!monitor.Count(data_len)) { Skip(foo); if (optional_data > 0) { Skip(optional_data); } goto loop_break; } } } //System.err.println("length: "+length); // length should be 0 if (optional_data > 0) { Skip(optional_data); } if (length_of_data < rr.length) { // rq.Cancel(header, buf); SendREAD(handle, rr.offset + length_of_data, (int)(rr.length - length_of_data), rq ); request_offset = rr.offset + rr.length; } if (request_max < rq.Size()) { request_max++; } loop_continue: ; } loop_break: ; dst.Flush(); if (monitor != null) { monitor.End(); } rq.Cancel(header, buf); _sendCLOSE(handle, header); } catch (Exception e) { if (e is SftpException) { throw (SftpException)e; } if (e is Exception) { throw new SftpException(SSH_FX_FAILURE, string.Empty, (Exception)e); } throw new SftpException(SSH_FX_FAILURE, string.Empty); } }