Read() public method

public Read ( NfsPacket packet ) : NfsPacket
packet NfsPacket
return NfsPacket
Esempio n. 1
0
        protected override void Process(NfsPacket packet, IPEndPoint receivedFrom)
        {
            //Console.WriteLine("NfsHandler.Process : recievedFrom: " + receivedFrom.ToString());
            //Console.WriteLine("NfsHandler.Process: Procedure -> " + packet.ProcedureID + ":" + ((NfsProcedure)packet.ProcedureID).ToString());

            // get rid of authentication recorde in packet, we don't use them
            packet.ReadAuthentication();
            packet.ReadAuthentication();

            if (packet.ProcedureID == (int)NfsProcedure.NULL)
            {
                base.SendNull(packet, receivedFrom);
                return;
            }

            NfsPacket result;
            uint      xid = packet.XID;

            try {
                switch (packet.ProcedureID)
                {
                case (int)NfsProcedure.GETATTR:
                    result = _directory.GetAttr(packet);
                    break;

                case (int)NfsProcedure.SETATTR:
                    result = _directory.SetAttr(xid, packet);
                    break;

                case (int)NfsProcedure.LOOKUP:
                    result = _directory.Lookup(packet);
                    break;

                case (int)NfsProcedure.READ:
                    result = _io.Read(packet);
                    break;

                case (int)NfsProcedure.WRITE:
                    result = _io.Write(xid, packet);
                    break;

                case (int)NfsProcedure.CREATE:
                    result = _directory.Create(xid, packet);
                    break;

                case (int)NfsProcedure.REMOVE:
                    result = _directory.Remove(xid, packet);
                    break;

                case (int)NfsProcedure.RENAME:
                    result = _directory.Rename(xid, packet);
                    break;

                case (int)NfsProcedure.MKDIR:
                    result = _directory.Mkdir(xid, packet);
                    break;

                case (int)NfsProcedure.RMDIR:
                    result = _directory.Rmdir(xid, packet);
                    break;

                case (int)NfsProcedure.READDIR:
                    result = _directory.ReadDirectory(packet);
                    break;

                case (int)NfsProcedure.STATFS:
                    result = _directory.StatFS(packet);
                    break;

                default:
                    Console.Error.WriteLine("Unsupported NFS procedure called (" + packet.ProcedureID + ") from " + receivedFrom.ToString() + "\n");
                    throw new NFSException(packet.XID, (uint)NfsReply.ERR_IO);
                }
            }
            catch (NFSException e) {
                // make a reply packet that includes the error
                result = new NfsPacket(64);
                result.AddReplyHeader(packet.XID);
                result.SetUInt(e.ErrorNumber);
            }

            Send(result, receivedFrom);
        }