All pastes #183456 Raw Edit

Something

public text v1 · immutable
#183456 ·published 2006-09-26 22:52 UTC
rendered paste body
Index: src/net/sf/drftpd/master/BaseFtpConnection.java
===================================================================
--- src/net/sf/drftpd/master/BaseFtpConnection.java	(revision 1232)
+++ src/net/sf/drftpd/master/BaseFtpConnection.java	(working copy)
@@ -144,6 +144,8 @@
             env.add("isbanned",""+
                     ((user.getKeyedMap().getObjectDate(UserManagement.BAN_TIME)).getTime() > 
                     		System.currentTimeMillis()));
+            env.add("maxspeeddn",user.getMaxTransferSpeedDown());
+            env.add("maxspeedup",user.getMaxTransferSpeedUp());
 //        } else {
 //            env.add("user", "<unknown>");
         }
Index: src/net/sf/drftpd/master/command/plugins/DataConnectionHandler.java
===================================================================
--- src/net/sf/drftpd/master/command/plugins/DataConnectionHandler.java	(revision 1232)
+++ src/net/sf/drftpd/master/command/plugins/DataConnectionHandler.java	(working copy)
@@ -1292,10 +1292,12 @@
 
             //transfer
             try {
+            	long transferSpeedDown = conn.getUserNull().getMaxTransferSpeedDown();
+            	long transferSpeedUp = conn.getUserNull().getMaxTransferSpeedUp();
                 //TODO ABORtable transfers
                 if (isRetr) {
                     _transfer.sendFile(_transferFile.getPath(), getType(),
-                        _resumePosition);
+                        _resumePosition,transferSpeedDown);
 
                     while (true) {
                         status = _transfer.getTransferStatus();
@@ -1311,7 +1313,7 @@
                     }
                 } else if (isStor) {
                     _transfer.receiveFile(_transferFile.getPath(), getType(),
-                        _resumePosition);
+                        _resumePosition,transferSpeedUp);
 
                     while (true) {
                         status = _transfer.getTransferStatus();
Index: src/net/sf/drftpd/mirroring/SlaveTransfer.java
===================================================================
--- src/net/sf/drftpd/mirroring/SlaveTransfer.java	(revision 1232)
+++ src/net/sf/drftpd/mirroring/SlaveTransfer.java	(working copy)
@@ -93,7 +93,7 @@
         }
 
         try {
-            _destTransfer.receiveFile(_file.getPath(), 'I', 0);
+            _destTransfer.receiveFile(_file.getPath(), 'I', 0,0);
         } catch (IOException e1) {
             throw new DestinationSlaveException(e1);
         } catch (SlaveUnavailableException e1) {
@@ -101,7 +101,7 @@
         }
 
         try {
-            _srcTransfer.sendFile(_file.getPath(), 'I', 0);
+            _srcTransfer.sendFile(_file.getPath(), 'I', 0,0);
         } catch (IOException e2) {
             throw new SourceSlaveException(e2);
         } catch (SlaveUnavailableException e2) {
Index: src/org/drftpd/usermanager/AbstractUser.java
===================================================================
--- src/org/drftpd/usermanager/AbstractUser.java	(revision 1232)
+++ src/org/drftpd/usermanager/AbstractUser.java	(working copy)
@@ -94,6 +94,8 @@
      */
     protected long[] _uploadedBytes = new long[P_SIZE];
 
+    private long _maxTransferSpeedDown;
+    private long _maxTransferSpeedUp;
     //protected long _uploadedBytes;
     //protected long _uploadedBytes[P_DAY];
     //protected long _uploadedBytes[P_MONTH];
@@ -201,6 +203,14 @@
     public long getDownloadedBytesDay() {
         return _downloadedBytes[P_DAY];
     }
+    
+    public long getMaxTransferSpeedDown() {
+    	return _maxTransferSpeedDown;
+    }
+    
+    public long getMaxTransferSpeedUp() {
+    	return _maxTransferSpeedUp;
+    }
 
     public long getDownloadedBytesForTrialPeriod(int period) {
         switch (period) {
@@ -330,6 +340,14 @@
     public void setLastReset(long lastReset) {
     	_lastReset = lastReset;
     }
+    
+    public void setMaxTransferSpeedDown(long speed) {
+    	_maxTransferSpeedDown = speed;
+    }
+    
+    public void setMaxTransferSpeedUp(long speed) {
+    	_maxTransferSpeedUp = speed;
+    }
 
     //    public int getRequests() {
     //        return _requests;
Index: src/org/drftpd/usermanager/User.java
===================================================================
--- src/org/drftpd/usermanager/User.java	(revision 1232)
+++ src/org/drftpd/usermanager/User.java	(working copy)
@@ -82,7 +82,9 @@
     public abstract List getGroups();
 
     public abstract HostMaskCollection getHostMaskCollection();
-
+    public abstract long getMaxTransferSpeedDown();
+    public abstract long getMaxTransferSpeedUp();
+    
     /**
      * Returns the idleTime.
      *
@@ -276,6 +278,8 @@
     public abstract void setDownloadedTimeWeek(long millis);
 
     public abstract void setGroup(String group);
+    public abstract void setMaxTransferSpeedDown(long speed);
+    public abstract void setMaxTransferSpeedUp(long speed);
 
     /**
      * Sets the idleTime.
Index: src/org/drftpd/slave/Slave.java
===================================================================
--- src/org/drftpd/slave/Slave.java	(revision 1232)
+++ src/org/drftpd/slave/Slave.java	(working copy)
@@ -46,6 +46,7 @@
 import javax.net.ssl.SSLContext;
 
 import net.sf.drftpd.FileExistsException;
+import net.sf.drftpd.ObjectNotFoundException;
 import net.sf.drftpd.util.PortRange;
 
 import org.apache.log4j.BasicConfigurator;
@@ -64,8 +65,8 @@
 import org.drftpd.slave.async.AsyncCommandArgument;
 import org.drftpd.slave.async.AsyncResponse;
 import org.drftpd.slave.async.AsyncResponseChecksum;
+import org.drftpd.slave.async.AsyncResponseDiskStatus;
 import org.drftpd.slave.async.AsyncResponseDIZFile;
-import org.drftpd.slave.async.AsyncResponseDiskStatus;
 import org.drftpd.slave.async.AsyncResponseException;
 import org.drftpd.slave.async.AsyncResponseID3Tag;
 import org.drftpd.slave.async.AsyncResponseMaxPath;
@@ -110,9 +111,6 @@
         InetSocketAddress addr = new InetSocketAddress(PropertyHelper.getProperty(
                     p, "master.host"),
                 Integer.parseInt(PropertyHelper.getProperty(p, "master.bindport")));
-        // Whatever interface the slave uses to connect to the master, is the 
-        // interface that the master will report to clients requesting PASV transfers 
-        // from this slave, unless pasv_addr is set on the master for this slave
         logger.info("Connecting to master at " + addr);
 
         String slavename = PropertyHelper.getProperty(p, "slave.name");
@@ -650,7 +648,9 @@
         String path = mapPathToRenameQueue(st.nextToken());
         String fileName = path.substring(path.lastIndexOf("/") + 1);
         String dirName = path.substring(0, path.lastIndexOf("/"));
+        long speed = Long.parseLong(st.nextToken());
         Transfer t = getTransfer(transferIndex);
+        t.setTransferSpeed(speed);
         sendResponse(new AsyncResponse(ac.getIndex())); // return calling thread
 														// on master
         try {
@@ -739,7 +739,9 @@
         TransferIndex transferIndex = new TransferIndex(Integer.parseInt(
                     st.nextToken()));
         String path = mapPathToRenameQueue(st.nextToken());
+        long speed = Long.parseLong(st.nextToken());
         Transfer t = getTransfer(transferIndex);
+        t.setTransferSpeed(speed);
         sendResponse(new AsyncResponse(ac.getIndex())); // return
 
         // calling thread on master
Index: src/org/drftpd/slave/Transfer.java
===================================================================
--- src/org/drftpd/slave/Transfer.java	(revision 1232)
+++ src/org/drftpd/slave/Transfer.java	(working copy)
@@ -38,6 +38,7 @@
 import org.drftpd.io.AddAsciiOutputStream;
 import org.drftpd.slave.async.AsyncResponseDiskStatus;
 import org.drftpd.slave.async.AsyncResponseTransferStatus;
+//import org.drftpd.slave.ThrottledInputStream;
 
 import se.mog.io.File;
 
@@ -54,6 +55,7 @@
     private char _direction;
     private long _finished = 0;
     private InputStream _in;
+    private ThrottledInputStream _int;
     private char _mode = 'I';
     private OutputStream _out;
     private Slave _slave;
@@ -68,12 +70,13 @@
 	public static final char TRANSFER_UNKNOWN = 'U';
 	private File _file = null;
 	private String _pathForUpload = null;
+	private static long _speed;
 
     /**
      * Start undefined transfer.
      */
     public Transfer(Connection conn, Slave slave, TransferIndex transferIndex) {
-        if (conn == null) {
+    	if (conn == null) {
             throw new RuntimeException();
         }
 
@@ -232,8 +235,10 @@
 			if (_slave.getBufferSize() > 0) {
 				_sock.setReceiveBufferSize(_slave.getBufferSize());
 			}
-
+			
+			
 			_in = _sock.getInputStream();
+			
 			synchronized(this) {
 				_direction = Transfer.TRANSFER_RECEIVING_UPLOAD;
 			}
@@ -325,6 +330,10 @@
         _conn = null;
     }
 
+    public void setTransferSpeed(long speed) {
+    	_speed = speed;
+    }
+    
     /**
 	 * Call sock.connect() and start sending.
 	 * 
@@ -360,15 +369,19 @@
 			byte[] buff = new byte[Math.max(_slave.getBufferSize(), 65535)];
 			int count;
 			long currentTime = System.currentTimeMillis();
+			_int = new ThrottledInputStream(_in);
+			_int.setMaxBytesPerSecond(_speed);
 
+
 			try {
 				while (true) {
+
 					if (_abortReason != null) {
 						throw new TransferFailedException(
 								"Transfer was aborted - " + _abortReason,
 								getTransferStatus());
 					}
-					count = _in.read(buff);
+					count = _int.read(buff);
 					if (count == -1) {
 						if (associatedUpload == null) {
 							break; // done transferring
Index: src/org/drftpd/master/RemoteTransfer.java
===================================================================
--- src/org/drftpd/master/RemoteTransfer.java	(revision 1232)
+++ src/org/drftpd/master/RemoteTransfer.java	(working copy)
@@ -147,11 +147,12 @@
         _rslave.issueAbortToSlave(getTransferIndex(),reason);
     }
 
-    public void receiveFile(String path, char type, long position)
+    public void receiveFile(String path, char type, long position, long speed)
         throws IOException, SlaveUnavailableException {
     	_path = path;
+    	
         String index = _rslave.issueReceiveToSlave(path, type, position,
-                getTransferIndex());
+                getTransferIndex(),speed);
         _state = Transfer.TRANSFER_RECEIVING_UPLOAD;
         try {
             _rslave.fetchResponse(index);
@@ -160,11 +161,11 @@
         }
     }
 
-    public void sendFile(String path, char type, long position)
+    public void sendFile(String path, char type, long position, long speed)
         throws IOException, SlaveUnavailableException {
     	_path = path;
         String index = _rslave.issueSendToSlave(path, type, position,
-                getTransferIndex());
+                getTransferIndex(),speed);
         _state = Transfer.TRANSFER_SENDING_DOWNLOAD;
         try {
             _rslave.fetchResponse(index);
Index: src/org/drftpd/master/RemoteSlave.java
===================================================================
--- src/org/drftpd/master/RemoteSlave.java	(revision 1232)
+++ src/org/drftpd/master/RemoteSlave.java	(working copy)
@@ -809,10 +809,10 @@
 	}
 
 	public String issueReceiveToSlave(String name, char c, long position,
-			TransferIndex tindex) throws SlaveUnavailableException {
+			TransferIndex tindex, long transferSpeed) throws SlaveUnavailableException {
 		String index = fetchIndex();
 		sendCommand(new AsyncCommandArgument(index, "receive", c + ","
-				+ position + "," + tindex + "," + name));
+				+ position + "," + tindex + "," + name + "," + transferSpeed));
 
 		return index;
 	}
@@ -1052,10 +1052,10 @@
 	}
 
 	public String issueSendToSlave(String name, char c, long position,
-			TransferIndex tindex) throws SlaveUnavailableException {
+			TransferIndex tindex, long transferSpeed) throws SlaveUnavailableException {
 		String index = fetchIndex();
 		sendCommand(new AsyncCommandArgument(index, "send", c + "," + position
-				+ "," + tindex + "," + name));
+				+ "," + tindex + "," + name + "," + transferSpeed));
 
 		return index;
 	}
Index: src/org/drftpd/commands/UserManagement.java
===================================================================
--- src/org/drftpd/commands/UserManagement.java	(revision 1232)
+++ src/org/drftpd/commands/UserManagement.java	(working copy)
@@ -717,7 +717,28 @@
             userToChange.getKeyedMap().setObject(UserManagement.TAGLINE, fullCommandArgument);
 
             response = Reply.RESPONSE_200_COMMAND_OK;
+        } else if ("max_dlspeed".equals(command)) {
+        	if(commandArguments.length < 1) {
+        		throw new ImproperUsageException();
+        	}
+        	
+        	logger.info("'" + conn.getUserNull().getName() + "' changed max_dlspeed for'" + userToChange.getName() + 
+        			"' from '" + userToChange.getMaxTransferSpeedDown() + "' to '" + fullCommandArgument + "'");
+        	userToChange.setMaxTransferSpeedDown(Long.parseLong(fullCommandArgument));
+        	
+        	response = Reply.RESPONSE_200_COMMAND_OK;
+        } else if ("max_upspeed".equals(command)) {
+        	if(commandArguments.length < 1) {
+        		throw new ImproperUsageException();
+        	}
+        	
+        	logger.info("'" + conn.getUserNull().getName() + "' changed max_dlspeed for'" + userToChange.getName() + 
+        			"' from '" + userToChange.getMaxTransferSpeedUp() + "' to '" + fullCommandArgument + "'");
+        	userToChange.setMaxTransferSpeedUp(Long.parseLong(fullCommandArgument));
+        	
+        	response = Reply.RESPONSE_200_COMMAND_OK;
         } else {
+        	
         	throw new ImproperUsageException();
         }
 
Index: src/org/drftpd/commands/UserManagement.properties
===================================================================
--- src/org/drftpd/commands/UserManagement.properties	(revision 1232)
+++ src/org/drftpd/commands/UserManagement.properties	(working copy)
@@ -15,7 +15,8 @@
 help.change.specific=site change <username> <field> <value>\n\
 Valid fields: group, created, ratio, idle_time, credits, tagline\n\
               num_logins # [opt perIP], comment\n\
-              group_slots # [opt leech slots], wkly_allotment
+              group_slots # [opt leech slots], wkly_allotment\n\
+              max_dlspeed, max_upspeed
 change.specify=You need to specify a value to change
 
 changeratio.invalidratio=Ratio must be 0 or 3
@@ -57,6 +58,7 @@
 Ratio: ${org.drftpd.commands.UserManagement@ratio,-23} Credits: ${credits}\n\
 Max logins: ${org.drftpd.commands.UserManagement@maxlogins,-18} From same IP: ${org.drftpd.commands.UserManagement@maxloginsip}\n\
 Max sim uploads: ${org.drftpd.commands.UserManagement@maxsimup,-13} Max sim downloads: ${org.drftpd.commands.UserManagement@maxsimdn}\n\
+Max download speed(bytes/sec): ${maxspeeddn} Max upload speed(bytes/sec): ${maxspeedup}\n\
 Group / Leech slots: ${org.drftpd.commands.UserManagement@groupslots} ${org.drftpd.commands.UserManagement@leechslots}\n\
 Total uploaded: ${uploaded,-14} Total downloaded: ${downloaded}\n\
 Times nuked: ${org.drftpd.commands.Nuke@nuked,-17} Bytes nuked: ${org.drftpd.commands.Nuke@nukedBytes}\n\