1 package org.drftpd.slaveselection.filter; 18 19 import java.net.InetAddress ; 20 import java.rmi.RemoteException ; 21 import java.util.Iterator ; 22 import java.util.Properties ; 23 24 import net.sf.drftpd.NoAvailableSlaveException; 25 import net.sf.drftpd.master.config.FtpConfig; 26 import net.sf.drftpd.master.usermanager.User; 27 import net.sf.drftpd.remotefile.LinkedRemoteFileInterface; 28 import net.sf.drftpd.slave.SlaveStatus; 29 import net.sf.drftpd.slave.Transfer; 30 31 34 public class MaxtransfersFilter extends Filter { 35 private long _maxTransfers; 36 37 public MaxtransfersFilter(FilterChain ssm, int i, Properties p) { 38 _maxTransfers = 39 Long.parseLong(FtpConfig.getProperty(p, i + ".maxtransfers")); 40 } 41 42 public void process( 43 ScoreChart scorechart, 44 User user, 45 InetAddress peer, 46 char direction, 47 LinkedRemoteFileInterface dir) 48 throws NoAvailableSlaveException { 49 for (Iterator iter = scorechart.getSlaveScores().iterator(); 50 iter.hasNext(); 51 ) { 52 ScoreChart.SlaveScore slavescore = 53 (ScoreChart.SlaveScore) iter.next(); 54 SlaveStatus status; 55 try { 56 status = slavescore.getRSlave().getStatus(); 57 } catch (Exception e) { 58 if (e instanceof RemoteException ) { 59 slavescore.getRSlave().handleRemoteException( 60 (RemoteException ) e); 61 } 62 iter.remove(); 63 continue; 64 } 65 int transfers = 0; 66 if ( direction == Transfer.TRANSFER_RECEIVING_UPLOAD) 67 transfers = status.getTransfersReceiving(); 68 else if ( direction == Transfer.TRANSFER_SENDING_DOWNLOAD) 69 transfers = status.getTransfersSending(); 70 else throw new IllegalArgumentException ("Direction was not one of download or upload"); 71 if (transfers > _maxTransfers) { 72 iter.remove(); 73 } 74 } 75 } 76 } 77 | Popular Tags |