summaryrefslogtreecommitdiffstats
path: root/libktorrent/torrent/cap.h
diff options
context:
space:
mode:
Diffstat (limited to 'libktorrent/torrent/cap.h')
-rw-r--r--libktorrent/torrent/cap.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/libktorrent/torrent/cap.h b/libktorrent/torrent/cap.h
new file mode 100644
index 0000000..a3a365e
--- /dev/null
+++ b/libktorrent/torrent/cap.h
@@ -0,0 +1,113 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Joris Guisson *
+ * joris.guisson@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef BTCAP_H
+#define BTCAP_H
+
+#if 0
+#include <qvaluelist.h>
+#include <util/timer.h>
+#include <util/constants.h>
+
+namespace bt
+{
+ /**
+ * Base class for all cappable objects.
+ */
+ class Cappable
+ {
+ public:
+ /**
+ * Proceed with doing some bytes
+ * @param bytes The number of bytes it can do (0 = no limit)
+ * @return true if finished, false otherwise
+ */
+ virtual void proceed(Uint32 bytes) = 0;
+ };
+
+ /**
+ * @author Joris Guisson <joris.guisson@gmail.com>
+ *
+ * A Cap is something which caps something.
+ */
+ class Cap
+ {
+ public:
+ Cap(bool percentage_check);
+ virtual ~Cap();
+
+ struct Entry
+ {
+ Cappable* obj;
+ Uint32 num_bytes;
+
+ Entry() : obj(0),num_bytes(0) {}
+ Entry(Cappable* obj,Uint32 nb) : obj(obj),num_bytes(nb) {}
+ };
+
+ /**
+ * Set the speed cap in bytes per second. 0 indicates
+ * no limit.
+ * @param max Maximum number of bytes per second.
+ */
+ void setMaxSpeed(Uint32 max);
+
+ /// Get max bytes/sec
+ Uint32 getMaxSpeed() const {return max_bytes_per_sec;}
+
+ /// Set the current speed
+ void setCurrentSpeed(Uint32 cs) {current_speed = cs;}
+
+ /// Get the current speed
+ Uint32 getCurrrentSpeed() const {return current_speed;}
+
+ /**
+ * Allow or disallow somebody from proceeding. If somebody
+ * is disallowed they will be stored in a queue, and will be notified
+ * when there turn is up.
+ * @param pd Thing which is doing the request
+ * @param bytes Bytes it wants to send
+ * @return true if the piece is allowed or not
+ */
+ bool allow(Cappable* pd,Uint32 bytes);
+
+ /**
+ * A thing in the queue should call this when it get destroyed. To
+ * remove them from the queue.
+ * @param pd The Cappable thing
+ */
+ void killed(Cappable* pd);
+
+ /**
+ * Update the downloadcap.
+ */
+ void update();
+
+ private:
+ QValueList<Entry> entries;
+ Uint32 max_bytes_per_sec;
+ Timer timer;
+ Uint32 leftover;
+ Uint32 current_speed;
+ bool percentage_check;
+ };
+
+}
+#endif
+#endif