diff --git a/libtransmission/peer-io.c b/libtransmission/peer-io.c index 7d10e026e..ab91dfee8 100644 --- a/libtransmission/peer-io.c +++ b/libtransmission/peer-io.c @@ -426,7 +426,8 @@ utp_on_state_change(void *closure, int state) assert( tr_isPeerIo( io ) ); if( state == UTP_STATE_CONNECT ) { - dbgmsg( io, "utp_on_state_change -- changed to readable" ); + dbgmsg( io, "utp_on_state_change -- changed to connected" ); + io->dhtSupported = TRUE; } else if( state == UTP_STATE_WRITABLE ) { dbgmsg( io, "utp_on_state_change -- changed to writable" ); } else if( state == UTP_STATE_EOF ) { diff --git a/libtransmission/peer-io.h b/libtransmission/peer-io.h index feaa49230..5fe3b851c 100644 --- a/libtransmission/peer-io.h +++ b/libtransmission/peer-io.h @@ -71,6 +71,7 @@ typedef struct tr_peerIo tr_bool extendedProtocolSupported; tr_bool fastExtensionSupported; tr_bool dhtSupported; + tr_bool utpSupported; tr_priority_t priority; @@ -177,6 +178,11 @@ static inline tr_bool tr_peerIoSupportsDHT( const tr_peerIo * io ) return io->dhtSupported; } +static inline tr_bool tr_peerIoSupportsUTP( const tr_peerIo * io ) +{ + return io->dhtSupported; +} + /** *** **/ diff --git a/libtransmission/peer-mgr.c b/libtransmission/peer-mgr.c index 18ba948ee..408e41dd4 100644 --- a/libtransmission/peer-mgr.c +++ b/libtransmission/peer-mgr.c @@ -671,6 +671,16 @@ tr_peerMgrPeerIsSeed( const tr_torrent * tor, return isSeed; } +void +tr_peerMgrSetUtpSupported( tr_torrent * tor, const tr_address * addr ) +{ + struct peer_atom * atom = getExistingAtom( tor->torrentPeers, addr ); + + if( atom ) + atom->flags |= ADDED_F_UTP_FLAGS; +} + + /** *** REQUESTS *** diff --git a/libtransmission/peer-mgr.h b/libtransmission/peer-mgr.h index 117595c68..2820798f3 100644 --- a/libtransmission/peer-mgr.h +++ b/libtransmission/peer-mgr.h @@ -149,6 +149,9 @@ void tr_peerMgrFree( tr_peerMgr * manager ); tr_bool tr_peerMgrPeerIsSeed( const tr_torrent * tor, const tr_address * addr ); +void tr_peerMgrSetUtpSupported( tr_torrent * tor, + const tr_address * addr ); + void tr_peerMgrGetNextRequests( tr_torrent * torrent, tr_peer * peer, int numwant, diff --git a/libtransmission/peer-msgs.c b/libtransmission/peer-msgs.c index 826682bc4..b6edf1a84 100644 --- a/libtransmission/peer-msgs.c +++ b/libtransmission/peer-msgs.c @@ -2376,6 +2376,11 @@ tr_peerMsgsNew( struct tr_torrent * torrent, peer->msgs = m; tr_timerAdd( m->pexTimer, PEX_INTERVAL_SECS, 0 ); + if( tr_peerIoSupportsUTP( peer->io ) ) { + const tr_address * addr = tr_peerIoGetAddress( peer->io, NULL ); + tr_peerMgrSetUtpSupported( torrent, addr ); + } + if( tr_peerIoSupportsLTEP( peer->io ) ) sendLtepHandshake( m );