summaryrefslogtreecommitdiffstats
path: root/libktorrent/torrent/udptrackersocket.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 02:37:40 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 02:37:40 +0000
commit9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0 (patch)
treed088b5210e77d9fa91d954d8550e00e372b47378 /libktorrent/torrent/udptrackersocket.h
downloadktorrent-9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0.tar.gz
ktorrent-9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0.zip
Updated to final KDE3 ktorrent release (2.2.6)
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/ktorrent@1077377 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'libktorrent/torrent/udptrackersocket.h')
-rw-r--r--libktorrent/torrent/udptrackersocket.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/libktorrent/torrent/udptrackersocket.h b/libktorrent/torrent/udptrackersocket.h
new file mode 100644
index 0000000..1537598
--- /dev/null
+++ b/libktorrent/torrent/udptrackersocket.h
@@ -0,0 +1,139 @@
+/***************************************************************************
+ * 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 BTUDPTRACKERSOCKET_H
+#define BTUDPTRACKERSOCKET_H
+
+#include <qobject.h>
+#include <qmap.h>
+#include <qcstring.h>
+#include <util/constants.h>
+
+
+namespace KNetwork
+{
+ class KDatagramSocket;
+ class KSocketAddress;
+}
+
+namespace bt
+{
+
+
+ enum Action
+ {
+ CONNECT = 0,
+ ANNOUNCE = 1,
+ SCRAPE = 2,
+ ERROR = 3
+ };
+
+
+
+ /**
+ * @author Joris Guisson
+ *
+ * Class which handles communication with one or more UDP trackers.
+ */
+ class UDPTrackerSocket : public QObject
+ {
+ Q_OBJECT
+ public:
+ UDPTrackerSocket();
+ virtual ~UDPTrackerSocket();
+
+ /**
+ * Send a connect message. As a response to this, the connectRecieved
+ * signal will be emitted, classes recieving this signal should check if
+ * the transaction_id is the same.
+ * @param tid The transaction_id
+ * @param addr The address to send to
+ */
+ void sendConnect(Int32 tid,const KNetwork::KSocketAddress & addr);
+
+ /**
+ * Send an announce message. As a response to this, the announceRecieved
+ * signal will be emitted, classes recieving this signal should check if
+ * the transaction_id is the same.
+ * @param tid The transaction_id
+ * @param data The data to send (connect input structure, in UDP Tracker specifaction)
+ * @param addr The address to send to
+ */
+ void sendAnnounce(Int32 tid,const Uint8* data,const KNetwork::KSocketAddress & addr);
+
+ /**
+ * If a transaction times out, this should be used to cancel it.
+ * @param tid
+ */
+ void cancelTransaction(Int32 tid);
+
+
+ /**
+ * Compute a free transaction_id.
+ * @return A free transaction_id
+ */
+ Int32 newTransactionID();
+
+ /**
+ * Set the port ot use.
+ * @param p The port
+ */
+ static void setPort(Uint16 p);
+
+ /// Get the port in use.
+ static Uint16 getPort();
+ private slots:
+ void dataReceived();
+
+ signals:
+ /**
+ * Emitted when a connect message is received.
+ * @param tid The transaction_id
+ * @param connection_id The connection_id returned
+ */
+ void connectRecieved(Int32 tid,Int64 connection_id);
+
+ /**
+ * Emitted when an announce message is received.
+ * @param tid The transaction_id
+ * @param buf The data
+ */
+ void announceRecieved(Int32 tid,const QByteArray & buf);
+
+ /**
+ * Signal emitted, when an error occurs during a transaction.
+ * @param tid The transaction_id
+ * @param error_string Potential error string
+ */
+ void error(Int32 tid,const QString & error_string);
+
+ private:
+ void handleConnect(const QByteArray & buf);
+ void handleAnnounce(const QByteArray & buf);
+ void handleError(const QByteArray & buf);
+
+ private:
+ Uint16 udp_port;
+ KNetwork::KDatagramSocket* sock;
+ QMap<Int32,Action> transactions;
+ static Uint16 port;
+ };
+}
+
+#endif