--- a/libtransmission/peer-mgr.c 2021-08-31 03:10:20.435836776 +0800
+++ b/libtransmission/peer-mgr.c 2021-08-31 03:14:31.268153266 +0800
@@ -2007,6 +2007,21 @@
tr_peerMsgsUpdateActive(msgs, TR_DOWN);
}
+static bool isUserAgentBad(const char* ua)
+{
+ static const char* blacklist[] = {"Thunder", "Xunlei"};
+ int i;
+
+ for (i = 0; i != sizeof(blacklist) / sizeof(blacklist[0]); ++i) {
+ // Performs bad, honestly.
+ if (!strncmp(blacklist[i], ua, strlen(blacklist[i]))) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
/* FIXME: this is kind of a mess. */
static bool myHandshakeDoneCB(tr_handshake* handshake, tr_peerIo* io, bool readAnythingFromPeer, bool isConnected,
uint8_t const* peer_id, void* vmanager)
@@ -2100,21 +2115,29 @@
tr_quark client;
tr_peerIo* io;
char buf[128];
+ const char* ua = "";
if (peer_id != NULL)
{
- client = tr_quark_new(tr_clientForId(buf, sizeof(buf), peer_id), TR_BAD_SIZE);
+ client = tr_quark_new((ua = tr_clientForId(buf, sizeof(buf), peer_id)), TR_BAD_SIZE);
}
else
{
client = TR_KEY_NONE;
}
- io = tr_handshakeStealIO(handshake); /* this steals its refcount too, which is balanced by our unref in peerDelete() */
- tr_peerIoSetParent(io, &s->tor->bandwidth);
- createBitTorrentPeer(s->tor, io, atom, client);
+ if (!isUserAgentBad(ua))
+ {
+ io = tr_handshakeStealIO(handshake); /* this steals its refcount too, which is balanced by our unref in peerDelete() */
+ tr_peerIoSetParent(io, &s->tor->bandwidth);
+ createBitTorrentPeer(s->tor, io, atom, client);
- success = true;
+ success = true;
+ }
+ else
+ {
+ tr_logAddDebug("Bad user agent \"%s\" (peer %s) tried to connect to us", ua, tr_atomAddrStr(atom));
+ }
}
}
}