summaryrefslogtreecommitdiffstats
path: root/libktorrent/torrent/tracker.h
blob: d254b63b09a7f27ff00048f4cf325de138040222 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/***************************************************************************
 *   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 BTTRACKER_H
#define BTTRACKER_H

#include <kurl.h>
#include <util/sha1hash.h>
#include <interfaces/peersource.h>
#include "globals.h"
#include "peerid.h"

class KURL;

namespace kt
{
	class TorrentInterface;
}


namespace bt
{
	class Tracker;
	
	/**
	 * Base class for all tracker classes.
	*/
	class Tracker : public kt::PeerSource
	{
		Q_OBJECT
	public:
		Tracker(const KURL & url,kt::TorrentInterface* tor,const PeerID & id,int tier);
		virtual ~Tracker();
		
		/// See if a start request succeeded
		bool isStarted() const {return started;}
		
		/**
		 * Set the custom IP
		 * @param str 
		 */
		static void setCustomIP(const QString & str);
		
		/// get the tracker url
		KURL trackerURL() const {return url;}
		
		/**
		 * Delete the tracker in ms milliseconds, or when the stopDone signal is emitted.
		 * @param ms Number of ms to wait
		 */
		void timedDelete(int ms);
		
		/**
		 * Get the number of failed attempts to reach a tracker.
		 * @return The number of failed attempts
		 */
		virtual Uint32 failureCount() const = 0;
		
		/**
		 * Do a tracker scrape to get more accurate stats about a torrent.
		 * Does nothing if the tracker does not support this.
		 */
		virtual void scrape() = 0;
		
		/// Get the trackers tier
		int getTier() const {return tier;}
		
		/**
		 * Get the update interval in ms
		 * @return interval
		 */
		Uint32 getInterval() const {return interval;}
		
		/// Set the interval
		void setInterval(Uint32 i) {interval = i;}
		
		/// Get the number of seeders
		Uint32 getNumSeeders() const {return seeders;}
		
		/// Get the number of leechers
		Uint32 getNumLeechers() const {return leechers;}
		
		/// Get the custom ip to use, null if none is set
		static QString getCustomIP();
	signals:
		/**
		 * Emitted when an error happens.
		 * @param failure_reason The reason why we couldn't reach the tracker
		 */
		void requestFailed(const QString & failure_reason);
		
		/**
		 * Emitted when a stop is done.
		 */
		void stopDone();
		
		/**
		 * Emitted when a request to the tracker succeeded
		 */
		void requestOK();
		
		/**
		 * A request to the tracker has been started.
		 */
		void requestPending();
		
	protected:
		KURL url;
		int tier;
		PeerID peer_id;
		kt::TorrentInterface* tor;
		Uint32 interval,seeders,leechers,key;
		bool started;
	private:
		//static QString custom_ip,custom_ip_resolved;
	};
	
}

#endif