void getData(Buffer buf){
    setRecipient(buf.getInt());
    setRemoteWindowSize(buf.getUInt());
    setRemotePacketSize(buf.getInt());
    byte[] addr=buf.getString();
    int port=buf.getInt();
    byte[] orgaddr=buf.getString();
    int orgport=buf.getInt();

    /*
    System.err.println("addr: "+Util.byte2str(addr));
    System.err.println("port: "+port);
    System.err.println("orgaddr: "+Util.byte2str(orgaddr));
    System.err.println("orgport: "+orgport);
    */

    Session _session=null;
    try{
      _session=getSession();
    }
    catch(JSchException e){
      // session has been already down.
    }

    synchronized(pool){
      for(int i=0; i<pool.size(); i++){
        Object[] foo=(Object[])(pool.elementAt(i));
        if(foo[0]!=_session) continue;
        if(((Integer)foo[1]).intValue()!=port) continue;
        this.rport=port;
        this.target=(String)foo[2];
        if(foo[3]==null || (foo[3] instanceof Object[])){ this.lport=-1; }
        else{ this.lport=((Integer)foo[3]).intValue(); }
        if(foo.length>=6){
          this.factory=((SocketFactory)foo[5]);
        }
        break;
      }
      if(target==null){
        //System.err.println("??");
      }
    }
  }