public override void MessageReceived(ChannelHandlerContext ctx, MessageEvent e) { ChannelBuffer buf = (ChannelBuffer)e.GetMessage(); // Read reply if (!ValidMessageLength(buf.ReadableBytes())) { e.GetChannel().Close(); return; } // handling fragment header for TCP, 4 bytes. byte[] fragmentHeader = Arrays.CopyOfRange(buf.Array(), 0, 4); int fragmentSize = XDR.FragmentSize(fragmentHeader); bool isLast = XDR.IsLastFragment(fragmentHeader); System.Diagnostics.Debug.Assert((fragmentSize == 28 && isLast == true)); XDR xdr = new XDR(); xdr.WriteFixedOpaque(Arrays.CopyOfRange(buf.Array(), 4, buf.ReadableBytes())); RpcReply reply = RpcReply.Read(xdr); if (reply.GetState() == RpcReply.ReplyState.MsgAccepted) { RpcAcceptedReply acceptedReply = (RpcAcceptedReply)reply; Handle(acceptedReply, xdr); } else { RpcDeniedReply deniedReply = (RpcDeniedReply)reply; Handle(deniedReply); } e.GetChannel().Close(); }
public override void MessageReceived(ChannelHandlerContext ctx, MessageEvent e) { // Get handle from create response ChannelBuffer buf = (ChannelBuffer)e.GetMessage(); XDR rsp = new XDR(buf.Array()); if (rsp.GetBytes().Length == 0) { Log.Info("rsp length is zero, why?"); return; } Log.Info("rsp length=" + rsp.GetBytes().Length); RpcReply reply = RpcReply.Read(rsp); int xid = reply.GetXid(); // Only process the create response if (xid != unchecked ((int)(0x8000004c))) { return; } int status = rsp.ReadInt(); if (status != Nfs3Status.Nfs3Ok) { Log.Error("Create failed, status =" + status); return; } Log.Info("Create succeeded"); rsp.ReadBoolean(); // value follow handle = new FileHandle(); handle.Deserialize(rsp); channel = e.GetChannel(); }