示例#1
0
        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);
        }
示例#3
0
 public FPOpenVol WithBitmap(AfpVolumeBitmap Bitmap) { this.Bitmap = (ushort)Bitmap; return this; }
示例#4
0
        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();
        }