/* 9P Protocol JAVA
 * P9P/rcpSrv/rpc9Pread.java
 * Autor: Jaime Garzon (2006) jgarzon@gmail.com
 *
 * Esta clase implementa las operaciones de la RPC
 * "read", que son requeridas por el mensaje tmsg9P
 * Retornando un mensaje de tipo rmsg9P.
*/

package P9P.rpcSrv;

import java.io.*;

import P9P.msg.*;
import PFS.*;

public class rpc9Pread extends rpc9P {

   Tread9P tmsg;

   public rpc9Pread (Tread9P m) {
      tmsg = m;
   }

   public rmsg9P process(fidtable fidt) {
      Rread9P rmsg = new Rread9P();
      pfid qid=fidt.get(tmsg.fid.value);
      byte[] b;

      if (qid!=null) {
         try {
            b = qid.read (tmsg.offset.value,tmsg.count.value);
         }
         catch (Exception e) {
            return returnError("[Tread]",tmsg.tag,e);
         }

         rmsg.type.value=cto9P.Rread;
         rmsg.tag.value = tmsg.tag.value;
         rmsg.data.value = b;

         if (b==null)
            rmsg.count.value = 0;
         else
            rmsg.count.value = b.length;

         return rmsg;
      }
      return returnError("[Tread] Error FID NO found.",tmsg.tag,null);
   }
}