diff options
Diffstat (limited to 'libktorrent/torrent/cap.h')
-rw-r--r-- | libktorrent/torrent/cap.h | 113 |
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 |