public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Pad AfpVolumeBitmap volumeBitmap = requestStream.ReadEnum <AfpVolumeBitmap>(); string volumeName = requestStream.ReadPascalString(); IStorageProvider provider = session.Server.Shares .Where(s => s.Name == volumeName) .FirstOrDefault(); if (provider == null) { return(AfpResultCode.FPObjectNotFound); } IAfpVolume volume = session.OpenVolume(provider); if (volume == null) { return(AfpResultCode.FPAccessDenied); } responseStream.WriteEnum(volumeBitmap); responseStream.WriteVolumeInfo(volume, volumeBitmap); return(AfpResultCode.FPNoErr); }
public AfpResultCode Process(IAfpSession session, DsiHeader dsiHeader, AfpStream requestStream, AfpStream responseStream) { requestStream.ReadUInt8(); // Pad ushort volumeId = requestStream.ReadUInt16(); AfpVolumeBitmap bitmap = requestStream.ReadEnum <AfpVolumeBitmap>(); IAfpVolume volume = session.GetVolume(volumeId); if (volume == null) { return(AfpResultCode.FPObjectNotFound); } responseStream.WriteEnum(bitmap); responseStream.WriteVolumeInfo(volume, bitmap); return(AfpResultCode.FPNoErr); }
public FPOpenVol WithBitmap(AfpVolumeBitmap Bitmap) { this.Bitmap = (ushort)Bitmap; return this; }
public void WriteVolumeInfo(IAfpVolume volume, AfpVolumeBitmap bitmap) { this.BeginMarking(); foreach (AfpVolumeBitmap flag in bitmap.EnumerateFlags()) { switch (flag) { case AfpVolumeBitmap.kFPVolAttributeBit: AfpVolumeAttributesBitmap volBitmap = AfpVolumeAttributesBitmap.kSupportsUTF8Names | AfpVolumeAttributesBitmap.kSupportsACLs | AfpVolumeAttributesBitmap.kSupportsFileIDs | AfpVolumeAttributesBitmap.kSupportsTMLockSteal; ISearchable searchable = (volume.StorageProvider as ISearchable); if (searchable != null && searchable.SearchProvider != null) { volBitmap |= AfpVolumeAttributesBitmap.kSupportsCatSearch; } this.WriteEnum <AfpVolumeAttributesBitmap>(volBitmap); break; case AfpVolumeBitmap.kFPVolSignatureBit: this.WriteUInt16(2); // Fixed directory ID break; case AfpVolumeBitmap.kFPVolCreateDateBit: case AfpVolumeBitmap.kFPVolModDateBit: case AfpVolumeBitmap.kFPVolBackupDateBit: this.WriteMacintoshDate(DateTime.Now); break; case AfpVolumeBitmap.kFPVolIDBit: this.WriteUInt16(volume.Identifier); break; case AfpVolumeBitmap.kFPVolBytesFreeBit: this.WriteUInt32((uint)volume.StorageProvider.AvailableBytes); break; case AfpVolumeBitmap.kFPVolBytesTotalBit: this.WriteUInt32((uint)volume.StorageProvider.TotalBytes); break; case AfpVolumeBitmap.kFPVolNameBit: this.WriteMark("Name"); break; case AfpVolumeBitmap.kFPVolExtBytesFreeBit: this.WriteUInt64(volume.StorageProvider.AvailableBytes); break; case AfpVolumeBitmap.kFPVolExtBytesTotalBit: this.WriteUInt64(volume.StorageProvider.TotalBytes); break; case AfpVolumeBitmap.kFPVolBlockSizeBit: this.WriteUInt32(4096); // I guess? break; } } foreach (AfpVolumeBitmap flag in bitmap.EnumerateFlags()) { switch (flag) { case AfpVolumeBitmap.kFPVolNameBit: this.BeginMark("Name"); this.WritePascalString(volume.StorageProvider.Name); break; } } this.EndMarking(); }