public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Pad short forkId = requestStream.ReadInt16(); long offset = requestStream.ReadInt64(); long readBytes = requestStream.ReadInt64(); //byte newLineMask = requestStream.ReadUInt8(); //byte newLineChar = requestStream.ReadUInt8(); IAfpFork fork = session.GetFork(forkId); if (fork == null) { return(AfpResultCode.FPObjectNotFound); } byte[] buffer = new byte[readBytes]; int bytesRead = fork.DataProvider.Read(offset, buffer, 0, (int)readBytes); responseStream.WriteBytes(buffer); if (bytesRead < readBytes) { return(AfpResultCode.FPEOFErr); } return(AfpResultCode.FPNoErr); }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { byte flag = requestStream.ReadUInt8(); short forkId = requestStream.ReadInt16(); long offset = requestStream.ReadInt64(); long reqCount = requestStream.ReadInt64(); IAfpFork fork = session.GetFork(forkId); if (fork == null) { return AfpResultCode.FPObjectNotFound; } byte[] writeData = requestStream.ReadBytes((uint)reqCount); long position = 0; if (flag == 1) { // End of the fork position = (fork.DataProvider.Length - offset); } else { position = offset; } fork.DataProvider.Write(position, writeData, 0, writeData.Length); responseStream.WriteUInt64((ulong)(position + writeData.LongLength)); return AfpResultCode.FPNoErr; }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { byte flag = requestStream.ReadUInt8(); short forkId = requestStream.ReadInt16(); long offset = requestStream.ReadInt64(); long reqCount = requestStream.ReadInt64(); IAfpFork fork = session.GetFork(forkId); if (fork == null) { return(AfpResultCode.FPObjectNotFound); } byte[] writeData = requestStream.ReadBytes((uint)reqCount); long position = 0; if (flag == 1) { // End of the fork position = (fork.DataProvider.Length - offset); } else { position = offset; } fork.DataProvider.Write(position, writeData, 0, writeData.Length); responseStream.WriteUInt64((ulong)(position + writeData.LongLength)); return(AfpResultCode.FPNoErr); }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Pad short forkId = requestStream.ReadInt16(); long offset = requestStream.ReadInt64(); long readBytes = requestStream.ReadInt64(); //byte newLineMask = requestStream.ReadUInt8(); //byte newLineChar = requestStream.ReadUInt8(); IAfpFork fork = session.GetFork(forkId); if (fork == null) { return AfpResultCode.FPObjectNotFound; } byte[] buffer = new byte[readBytes]; int bytesRead = fork.DataProvider.Read(offset, buffer, 0, (int)readBytes); responseStream.WriteBytes(buffer); if (bytesRead < readBytes) { return AfpResultCode.FPEOFErr; } return AfpResultCode.FPNoErr; }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); short forkId = requestStream.ReadInt16(); IAfpFork fork = session.GetFork(forkId); if (fork == null) { return AfpResultCode.FPObjectNotFound; } fork.Close(); return AfpResultCode.FPNoErr; }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); short forkId = requestStream.ReadInt16(); IAfpFork fork = session.GetFork(forkId); if (fork == null) { return(AfpResultCode.FPObjectNotFound); } fork.Close(); return(AfpResultCode.FPNoErr); }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Padding requestStream.ReadInt16(); // Type (always zero) int tokenLength = requestStream.ReadInt32(); byte[] tokenData = requestStream.ReadBytes((uint)tokenLength); Guid token = new Guid(tokenData); IAfpSession otherSession = session.Server.FindSession(token, AfpSessionSearchType.ServerIssued); if (otherSession == null) { return AfpResultCode.FPMiscErr; } otherSession.Recover(session); return AfpResultCode.FPNoErr; }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Padding requestStream.ReadInt16(); // Type (always zero) int tokenLength = requestStream.ReadInt32(); byte[] tokenData = requestStream.ReadBytes((uint)tokenLength); Guid token = new Guid(tokenData); IAfpSession otherSession = session.Server.FindSession(token, AfpSessionSearchType.ServerIssued); if (otherSession == null) { return(AfpResultCode.FPMiscErr); } otherSession.Recover(session); return(AfpResultCode.FPNoErr); }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Padding ushort volumeId = requestStream.ReadUInt16(); uint directoryId = requestStream.ReadUInt32(); AfpFileDirectoryBitmap fileBitmap = requestStream.ReadEnum<AfpFileDirectoryBitmap>(); AfpFileDirectoryBitmap directoryBitmap = requestStream.ReadEnum<AfpFileDirectoryBitmap>(); short reqCount = requestStream.ReadInt16(); int startIndex = requestStream.ReadInt32(); int maxReplySize = requestStream.ReadInt32(); AfpPathType pathType = requestStream.ReadEnum<AfpPathType>(); string path = null; switch (pathType) { case AfpPathType.kFPLongName: case AfpPathType.kFPShortName: path = requestStream.ReadPascalString(); break; case AfpPathType.kFPUTF8Name: path = requestStream.ReadUTF8StringWithHint(); break; } IAfpVolume volume = session.GetVolume(volumeId); if (volume == null) { return AfpResultCode.FPObjectNotFound; } IStorageContainer container = null; if (directoryId == 2) { container = volume.StorageProvider; } else { container = (volume.GetNode(directoryId) as IStorageContainer); } if (container == null) { return AfpResultCode.FPObjectNotFound; } IStorageContainer lookAtContainer = null; if (string.IsNullOrEmpty(path)) { lookAtContainer = container; } else { lookAtContainer = (container.Content(path) as IStorageContainer); } if (lookAtContainer == null) { return AfpResultCode.FPObjectNotFound; } var useContents = lookAtContainer.Contents(); if (fileBitmap == 0) { useContents = useContents.OfType<IStorageContainer>(); } else if (directoryBitmap == 0) { useContents = useContents.OfType<IStorageFile>(); } useContents = useContents .Skip(startIndex-1) .Take(reqCount); var contents = useContents.ToList(); if (contents.Count == 0) { return AfpResultCode.FPObjectNotFound; } responseStream.WriteEnum<AfpFileDirectoryBitmap>(fileBitmap); responseStream.WriteEnum<AfpFileDirectoryBitmap>(directoryBitmap); responseStream.WriteInt16((short)contents.Count); foreach (IStorageItem item in contents) { AfpStream resultRecord = new AfpStream(); resultRecord.WriteUInt16(0); // Length if (item is IStorageContainer) { resultRecord.WriteStorageContainerInfo(volume, (IStorageContainer)item, directoryBitmap); } else { resultRecord.WriteStorageFileInfo(volume, (IStorageFile)item, fileBitmap); } resultRecord.WritePadding(); resultRecord.Stream.Position = 0; resultRecord.WriteUInt16((byte)resultRecord.Stream.Length); byte[] recordData = resultRecord.ToByteArray(); responseStream.WriteBytes(recordData); } return AfpResultCode.FPNoErr; }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Padding ushort volumeId = requestStream.ReadUInt16(); uint directoryId = requestStream.ReadUInt32(); AfpFileDirectoryBitmap fileBitmap = requestStream.ReadEnum <AfpFileDirectoryBitmap>(); AfpFileDirectoryBitmap directoryBitmap = requestStream.ReadEnum <AfpFileDirectoryBitmap>(); short reqCount = requestStream.ReadInt16(); int startIndex = requestStream.ReadInt32(); int maxReplySize = requestStream.ReadInt32(); AfpPathType pathType = requestStream.ReadEnum <AfpPathType>(); string path = null; switch (pathType) { case AfpPathType.kFPLongName: case AfpPathType.kFPShortName: path = requestStream.ReadPascalString(); break; case AfpPathType.kFPUTF8Name: path = requestStream.ReadUTF8StringWithHint(); break; } IAfpVolume volume = session.GetVolume(volumeId); if (volume == null) { return(AfpResultCode.FPObjectNotFound); } IStorageContainer container = null; if (directoryId == 2) { container = volume.StorageProvider; } else { container = (volume.GetNode(directoryId) as IStorageContainer); } if (container == null) { return(AfpResultCode.FPObjectNotFound); } IStorageContainer lookAtContainer = null; if (string.IsNullOrEmpty(path)) { lookAtContainer = container; } else { lookAtContainer = (container.Content(path) as IStorageContainer); } if (lookAtContainer == null) { return(AfpResultCode.FPObjectNotFound); } var useContents = lookAtContainer.Contents(); if (fileBitmap == 0) { useContents = useContents.OfType <IStorageContainer>(); } else if (directoryBitmap == 0) { useContents = useContents.OfType <IStorageFile>(); } useContents = useContents .Skip(startIndex - 1) .Take(reqCount); var contents = useContents.ToList(); if (contents.Count == 0) { return(AfpResultCode.FPObjectNotFound); } responseStream.WriteEnum <AfpFileDirectoryBitmap>(fileBitmap); responseStream.WriteEnum <AfpFileDirectoryBitmap>(directoryBitmap); responseStream.WriteInt16((short)contents.Count); foreach (IStorageItem item in contents) { AfpStream resultRecord = new AfpStream(); resultRecord.WriteUInt16(0); // Length if (item is IStorageContainer) { resultRecord.WriteStorageContainerInfo(volume, (IStorageContainer)item, directoryBitmap); } else { resultRecord.WriteStorageFileInfo(volume, (IStorageFile)item, fileBitmap); } resultRecord.WritePadding(); resultRecord.Stream.Position = 0; resultRecord.WriteUInt16((byte)resultRecord.Stream.Length); byte[] recordData = resultRecord.ToByteArray(); responseStream.WriteBytes(recordData); } return(AfpResultCode.FPNoErr); }