(trunk libT) #2489: tr_torrentSetAnnounceList() should check for invalid and duplicate announce URLs
This commit is contained in:
parent
0fd817b757
commit
2a22e1782f
|
@ -2011,15 +2011,29 @@ tr_torrentGetMTimes( const tr_torrent * tor,
|
||||||
****
|
****
|
||||||
***/
|
***/
|
||||||
|
|
||||||
void
|
tr_announce_list_err
|
||||||
tr_torrentSetAnnounceList( tr_torrent * tor,
|
tr_torrentSetAnnounceList( tr_torrent * tor,
|
||||||
const tr_tracker_info * trackers,
|
const tr_tracker_info * trackers,
|
||||||
int trackerCount )
|
int trackerCount )
|
||||||
{
|
{
|
||||||
|
int i, j;
|
||||||
tr_benc metainfo;
|
tr_benc metainfo;
|
||||||
|
|
||||||
assert( tr_isTorrent( tor ) );
|
assert( tr_isTorrent( tor ) );
|
||||||
|
|
||||||
|
/* look for bad URLs */
|
||||||
|
for( i=0; i<trackerCount; ++i )
|
||||||
|
if( !tr_httpIsValidURL( trackers[i].announce ) )
|
||||||
|
return TR_ANNOUNCE_LIST_HAS_BAD;
|
||||||
|
|
||||||
|
/* look for duplicates */
|
||||||
|
for( i=0; i<trackerCount; ++i )
|
||||||
|
for( j=0; j<trackerCount; ++j )
|
||||||
|
if( ( i != j )
|
||||||
|
&& ( trackers[i].tier == trackers[j].tier)
|
||||||
|
&& ( !strcmp( trackers[i].announce, trackers[j].announce ) ) )
|
||||||
|
return TR_ANNOUNCE_LIST_HAS_DUPLICATES;
|
||||||
|
|
||||||
/* save to the .torrent file */
|
/* save to the .torrent file */
|
||||||
if( !tr_bencLoadFile( &metainfo, TR_FMT_BENC, tor->info.torrent ) )
|
if( !tr_bencLoadFile( &metainfo, TR_FMT_BENC, tor->info.torrent ) )
|
||||||
{
|
{
|
||||||
|
@ -2068,6 +2082,8 @@ tr_torrentSetAnnounceList( tr_torrent * tor,
|
||||||
/* tell the announcer to reload this torrent's tracker list */
|
/* tell the announcer to reload this torrent's tracker list */
|
||||||
tr_announcerResetTorrent( tor->session->announcer, tor );
|
tr_announcerResetTorrent( tor->session->announcer, tor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TR_ANNOUNCE_LIST_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1101,6 +1101,15 @@ typedef struct tr_tracker_info
|
||||||
}
|
}
|
||||||
tr_tracker_info;
|
tr_tracker_info;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TR_ANNOUNCE_LIST_OK,
|
||||||
|
TR_ANNOUNCE_LIST_HAS_DUPLICATES,
|
||||||
|
TR_ANNOUNCE_LIST_HAS_BAD
|
||||||
|
}
|
||||||
|
tr_announce_list_err;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Modify a torrent's tracker list.
|
* @brief Modify a torrent's tracker list.
|
||||||
*
|
*
|
||||||
|
@ -1113,7 +1122,8 @@ tr_tracker_info;
|
||||||
* libtransmission derives `scrape' from `announce'.
|
* libtransmission derives `scrape' from `announce'.
|
||||||
* @param trackerCount size of the `trackers' array
|
* @param trackerCount size of the `trackers' array
|
||||||
*/
|
*/
|
||||||
void tr_torrentSetAnnounceList( tr_torrent * torrent,
|
tr_announce_list_err
|
||||||
|
tr_torrentSetAnnounceList( tr_torrent * torrent,
|
||||||
const tr_tracker_info * trackers,
|
const tr_tracker_info * trackers,
|
||||||
int trackerCount );
|
int trackerCount );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue