public void Constructor()
        {
            var target = new SftpDataResponse(_protocolVersion);

            Assert.IsNull(target.Data);
            Assert.AreEqual(_protocolVersion, target.ProtocolVersion);
            Assert.AreEqual((uint)0, target.ResponseId);
            Assert.AreEqual(SftpMessageTypes.Data, target.SftpMessageType);
        }
示例#2
0
        private static SftpMessage Load(uint protocolVersion, byte[] data, SftpMessageTypes messageType, Encoding encoding)
        {
            SftpMessage message;

            switch (messageType)
            {
            case SftpMessageTypes.Version:
                message = new SftpVersionResponse();
                break;

            case SftpMessageTypes.Status:
                message = new SftpStatusResponse(protocolVersion);
                break;

            case SftpMessageTypes.Data:
                message = new SftpDataResponse(protocolVersion);
                break;

            case SftpMessageTypes.Handle:
                message = new SftpHandleResponse(protocolVersion);
                break;

            case SftpMessageTypes.Name:
                message = new SftpNameResponse(protocolVersion, encoding);
                break;

            case SftpMessageTypes.Attrs:
                message = new SftpAttrsResponse(protocolVersion);
                break;

            case SftpMessageTypes.ExtendedReply:
                message = new SftpExtendedReplyResponse(protocolVersion);
                break;

            default:
                throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "Message type '{0}' is not supported.", messageType));
            }

#if TUNING
            message.Load(data);
#else
            message.LoadBytes(data);

            message.ResetReader();

            message.LoadData();
#endif

            return(message);
        }
示例#3
0
        /// <summary>
        /// Performs SSH_FXP_READ request.
        /// </summary>
        /// <param name="handle">The handle.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="length">The length.</param>
        /// <param name="readCompleted">Action for response</param>
        /// <returns>data array; null if EOF</returns>
        public bool RequestReadAsync(byte[] handle, UInt64 offset, UInt32 length, Action <SftpDataResponse> readCompleted)
        {
            var request = new SftpReadRequest(this.ProtocolVersion, this.NextRequestId, handle, offset, length,
                                              (response) =>//data
            {
                readCompleted(response);
            },
                                              (response) =>//status, eof, no data in area
            {
                SftpDataResponse dataResponse = new SftpDataResponse(response.ProtocolVersion);
                //dataResponse.Data = null;
                readCompleted(dataResponse);
            });

            this.SendRequest(request);

            return(true);
        }
        public SftpMessage Create(uint protocolVersion, byte messageType, Encoding encoding)
        {
            var sftpMessageType = (SftpMessageTypes)messageType;

            SftpMessage message;

            switch (sftpMessageType)
            {
            case SftpMessageTypes.Version:
                message = new SftpVersionResponse();
                break;

            case SftpMessageTypes.Status:
                message = new SftpStatusResponse(protocolVersion);
                break;

            case SftpMessageTypes.Data:
                message = new SftpDataResponse(protocolVersion);
                break;

            case SftpMessageTypes.Handle:
                message = new SftpHandleResponse(protocolVersion);
                break;

            case SftpMessageTypes.Name:
                message = new SftpNameResponse(protocolVersion, encoding);
                break;

            case SftpMessageTypes.Attrs:
                message = new SftpAttrsResponse(protocolVersion);
                break;

            case SftpMessageTypes.ExtendedReply:
                message = new SftpExtendedReplyResponse(protocolVersion);
                break;

            default:
                throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "Message type '{0}' is not supported.", sftpMessageType));
            }

            return(message);
        }
        public void Load()
        {
            var target = new SftpDataResponse(_protocolVersion);

            var sshDataStream = new SshDataStream(4 + _data.Length);

            sshDataStream.Write(_responseId);
            sshDataStream.Write((uint)_data.Length);
            sshDataStream.Write(_data, 0, _data.Length);

            var sshData = sshDataStream.ToArray();

            target.Load(sshData);

            Assert.IsNotNull(target.Data);
            Assert.IsTrue(target.Data.SequenceEqual(_data));
            Assert.AreEqual(_protocolVersion, target.ProtocolVersion);
            Assert.AreEqual(_responseId, target.ResponseId);
            Assert.AreEqual(SftpMessageTypes.Data, target.SftpMessageType);
        }
        public void Load()
        {
            var target = new SftpDataResponse(_protocolVersion);

            var sshDataStream = new SshDataStream(4 + 1 + 4 + _data.Length);

            sshDataStream.Position = 4; // skip 4 bytes for SSH packet length
            sshDataStream.WriteByte((byte)SftpMessageTypes.Attrs);
            sshDataStream.Write(_responseId);
            sshDataStream.Write((uint)_data.Length);
            sshDataStream.Write(_data, 0, _data.Length);

            target.Load(sshDataStream.ToArray());

            Assert.IsNotNull(target.Data);
            Assert.IsTrue(target.Data.SequenceEqual(_data));
            Assert.AreEqual(_protocolVersion, target.ProtocolVersion);
            Assert.AreEqual(_responseId, target.ResponseId);
            Assert.AreEqual(SftpMessageTypes.Data, target.SftpMessageType);
        }
示例#7
0
        public void Complete_SftpDataResponse()
        {
            var statusActionInvocations = new List <SftpStatusResponse>();
            var dataActionInvocations   = new List <SftpDataResponse>();

            Action <SftpStatusResponse> statusAction = statusActionInvocations.Add;
            Action <SftpDataResponse>   dataAction   = dataActionInvocations.Add;
            var dataResponse = new SftpDataResponse(_protocolVersion);

            var request = new SftpReadRequest(
                _protocolVersion,
                _requestId,
                _handle,
                _offset,
                _length,
                dataAction,
                statusAction);

            request.Complete(dataResponse);

            Assert.AreEqual(0, statusActionInvocations.Count);
            Assert.AreEqual(1, dataActionInvocations.Count);
            Assert.AreSame(dataResponse, dataActionInvocations[0]);
        }