1 /* 2 * Bittorrent Client using Qt and libtorrent. 3 * Copyright (C) 2015 Vladimir Golovnev <glassez@yandex.ru> 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * 19 * In addition, as a special exception, the copyright holders give permission to 20 * link this program with the OpenSSL project's "OpenSSL" library (or with 21 * modified versions of it that use the same license as the "OpenSSL" library), 22 * and distribute the linked executables. You must obey the GNU General Public 23 * License in all respects for all of the code used other than "OpenSSL". If you 24 * modify file(s), you may extend this exception to your version of the file(s), 25 * but you are not obligated to do so. If you do not wish to do so, delete this 26 * exception statement from your version. 27 */ 28 29 #pragma once 30 31 #include <libtorrent/peer_info.hpp> 32 33 #include <QCoreApplication> 34 35 class QBitArray; 36 37 namespace BitTorrent 38 { 39 class Torrent; 40 struct PeerAddress; 41 42 class PeerInfo 43 { 44 Q_DECLARE_TR_FUNCTIONS(PeerInfo) 45 46 public: 47 PeerInfo() = default; 48 PeerInfo(const Torrent *torrent, const lt::peer_info &nativeInfo); 49 50 bool fromDHT() const; 51 bool fromPeX() const; 52 bool fromLSD() const; 53 54 bool isInteresting() const; 55 bool isChocked() const; 56 bool isRemoteInterested() const; 57 bool isRemoteChocked() const; 58 bool isSupportsExtensions() const; 59 bool isLocalConnection() const; 60 61 bool isHandshake() const; 62 bool isConnecting() const; 63 bool isOnParole() const; 64 bool isSeed() const; 65 66 bool optimisticUnchoke() const; 67 bool isSnubbed() const; 68 bool isUploadOnly() const; 69 bool isEndgameMode() const; 70 bool isHolepunched() const; 71 72 bool useI2PSocket() const; 73 bool useUTPSocket() const; 74 bool useSSLSocket() const; 75 76 bool isRC4Encrypted() const; 77 bool isPlaintextEncrypted() const; 78 79 PeerAddress address() const; 80 QString client() const; 81 qreal progress() const; 82 int payloadUpSpeed() const; 83 int payloadDownSpeed() const; 84 qlonglong totalUpload() const; 85 qlonglong totalDownload() const; 86 QBitArray pieces() const; 87 QString connectionType() const; 88 qreal relevance() const; 89 QString flags() const; 90 QString flagsDescription() const; 91 QString country() const; 92 int downloadingPieceIndex() const; 93 94 private: 95 void calcRelevance(const Torrent *torrent); 96 void determineFlags(); 97 98 lt::peer_info m_nativeInfo = {}; 99 qreal m_relevance = 0; 100 QString m_flags; 101 QString m_flagsDescription; 102 103 mutable QString m_country; 104 }; 105 } 106