public void GetBytes() { var request = new SftpUnblockRequest(_protocolVersion, _requestId, _handle, _offset, _length, null); var bytes = request.GetBytes(); var expectedBytesLength = 0; expectedBytesLength += 4; // Length expectedBytesLength += 1; // Type expectedBytesLength += 4; // RequestId expectedBytesLength += 4; // Handle length expectedBytesLength += _handle.Length; // Handle expectedBytesLength += 8; // Offset expectedBytesLength += 8; // Length Assert.AreEqual(expectedBytesLength, bytes.Length); var sshDataStream = new SshDataStream(bytes); Assert.AreEqual((uint)bytes.Length - 4, sshDataStream.ReadUInt32()); Assert.AreEqual((byte)SftpMessageTypes.Unblock, sshDataStream.ReadByte()); Assert.AreEqual(_requestId, sshDataStream.ReadUInt32()); Assert.AreEqual((uint)_handle.Length, sshDataStream.ReadUInt32()); var actualHandle = new byte[_handle.Length]; sshDataStream.Read(actualHandle, 0, actualHandle.Length); Assert.IsTrue(_handle.SequenceEqual(actualHandle)); Assert.AreEqual(_offset, sshDataStream.ReadUInt64()); Assert.AreEqual(_length, sshDataStream.ReadUInt64()); Assert.IsTrue(sshDataStream.IsEndOfData); }
internal static SftpFileAttributes FromBytes(SshDataStream stream) { var flag = stream.ReadUInt32(); long size = -1; var userId = -1; var groupId = -1; uint permissions = 0; DateTime accessTime; DateTime modifyTime; IDictionary <string, string> extensions = null; if ((flag & 0x00000001) == 0x00000001) // SSH_FILEXFER_ATTR_SIZE { size = (long)stream.ReadUInt64(); } if ((flag & 0x00000002) == 0x00000002) // SSH_FILEXFER_ATTR_UIDGID { userId = (int)stream.ReadUInt32(); groupId = (int)stream.ReadUInt32(); } if ((flag & 0x00000004) == 0x00000004) // SSH_FILEXFER_ATTR_PERMISSIONS { permissions = stream.ReadUInt32(); } if ((flag & 0x00000008) == 0x00000008) // SSH_FILEXFER_ATTR_ACMODTIME { // The incoming times are "Unix times", so they're already in UTC. We need to preserve that // to avoid losing information in a local time conversion during the "fall back" hour in DST. var time = stream.ReadUInt32(); accessTime = DateTime.FromFileTimeUtc((time + 11644473600) * 10000000); time = stream.ReadUInt32(); modifyTime = DateTime.FromFileTimeUtc((time + 11644473600) * 10000000); } else { accessTime = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc); modifyTime = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc); } if ((flag & 0x80000000) == 0x80000000) // SSH_FILEXFER_ATTR_EXTENDED { var extendedCount = (int)stream.ReadUInt32(); extensions = new Dictionary <string, string>(extendedCount); for (var i = 0; i < extendedCount; i++) { var extensionName = stream.ReadString(SshData.Utf8); var extensionData = stream.ReadString(SshData.Utf8); extensions.Add(extensionName, extensionData); } } return(new SftpFileAttributes(accessTime, modifyTime, size, userId, groupId, permissions, extensions)); }
internal static SftpFileAttributes FromBytes(SshDataStream stream) { var flag = stream.ReadUInt32(); long size = -1; var userId = -1; var groupId = -1; uint permissions = 0; var accessTime = DateTime.MinValue; var modifyTime = DateTime.MinValue; IDictionary <string, string> extensions = null; if ((flag & 0x00000001) == 0x00000001) // SSH_FILEXFER_ATTR_SIZE { size = (long)stream.ReadUInt64(); } if ((flag & 0x00000002) == 0x00000002) // SSH_FILEXFER_ATTR_UIDGID { userId = (int)stream.ReadUInt32(); groupId = (int)stream.ReadUInt32(); } if ((flag & 0x00000004) == 0x00000004) // SSH_FILEXFER_ATTR_PERMISSIONS { permissions = stream.ReadUInt32(); } if ((flag & 0x00000008) == 0x00000008) // SSH_FILEXFER_ATTR_ACMODTIME { var time = stream.ReadUInt32(); accessTime = DateTime.FromFileTime((time + 11644473600) * 10000000); time = stream.ReadUInt32(); modifyTime = DateTime.FromFileTime((time + 11644473600) * 10000000); } if ((flag & 0x80000000) == 0x80000000) // SSH_FILEXFER_ATTR_EXTENDED { var extendedCount = (int)stream.ReadUInt32(); extensions = new Dictionary <string, string>(extendedCount); for (var i = 0; i < extendedCount; i++) { var extensionName = stream.ReadString(SshData.Utf8); var extensionData = stream.ReadString(SshData.Utf8); extensions.Add(extensionName, extensionData); } } return(new SftpFileAttributes(accessTime, modifyTime, size, userId, groupId, permissions, extensions)); }
public void GetBytes() { #if TUNING var request = new SftpWriteRequest(_protocolVersion, _requestId, _handle, _offset, _data, _length, null); #else var request = new SftpWriteRequest(_protocolVersion, _requestId, _handle, _offset, _data, null); #endif var bytes = request.GetBytes(); var expectedBytesLength = 0; #if TUNING expectedBytesLength += 4; // Length #endif expectedBytesLength += 1; // Type expectedBytesLength += 4; // RequestId expectedBytesLength += 4; // Handle length expectedBytesLength += _handle.Length; // Handle expectedBytesLength += 8; // Offset expectedBytesLength += 4; // Data length expectedBytesLength += _length; // Data Assert.AreEqual(expectedBytesLength, bytes.Length); var sshDataStream = new SshDataStream(bytes); #if TUNING Assert.AreEqual((uint)bytes.Length - 4, sshDataStream.ReadUInt32()); #endif Assert.AreEqual((byte)SftpMessageTypes.Write, sshDataStream.ReadByte()); Assert.AreEqual(_requestId, sshDataStream.ReadUInt32()); Assert.AreEqual((uint)_handle.Length, sshDataStream.ReadUInt32()); var actualHandle = new byte[_handle.Length]; sshDataStream.Read(actualHandle, 0, actualHandle.Length); Assert.IsTrue(_handle.SequenceEqual(actualHandle)); Assert.AreEqual(_offset, sshDataStream.ReadUInt64()); Assert.AreEqual((uint)_length, sshDataStream.ReadUInt32()); var actualData = new byte[_length]; sshDataStream.Read(actualData, 0, actualData.Length); Assert.IsTrue(_data.Take(_length).SequenceEqual(actualData)); Assert.IsTrue(sshDataStream.IsEndOfData); }
public override void LoadData(SshDataStream stream) { Information = new SftpFileSytemInformation(stream.ReadUInt64(), // FileSystemBlockSize stream.ReadUInt64(), // BlockSize stream.ReadUInt64(), // TotalBlocks stream.ReadUInt64(), // FreeBlocks stream.ReadUInt64(), // AvailableBlocks stream.ReadUInt64(), // TotalNodes stream.ReadUInt64(), // FreeNodes stream.ReadUInt64(), // AvailableNodes stream.ReadUInt64(), // Sid stream.ReadUInt64(), // Flags stream.ReadUInt64() // MaxNameLenght ); }