diff options
Diffstat (limited to 'trackerlogic.c')
-rw-r--r-- | trackerlogic.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/trackerlogic.c b/trackerlogic.c index 8ebaa46..1bd8ac7 100644 --- a/trackerlogic.c +++ b/trackerlogic.c | |||
@@ -41,6 +41,33 @@ void free_peerlist( ot_peerlist *peer_list ) { | |||
41 | free( peer_list ); | 41 | free( peer_list ); |
42 | } | 42 | } |
43 | 43 | ||
44 | void add_torrent_from_saved_state( ot_hash hash, ot_time base, size_t down_count ) { | ||
45 | int exactmatch; | ||
46 | ot_torrent *torrent; | ||
47 | ot_vector *torrents_list = mutex_bucket_lock_by_hash( hash ); | ||
48 | |||
49 | if( !accesslist_hashisvalid( hash ) ) | ||
50 | return mutex_bucket_unlock_by_hash( hash, 0 ); | ||
51 | |||
52 | torrent = vector_find_or_insert( torrents_list, (void*)hash, sizeof( ot_torrent ), OT_HASH_COMPARE_SIZE, &exactmatch ); | ||
53 | if( !torrent || exactmatch ) | ||
54 | return mutex_bucket_unlock_by_hash( hash, 0 ); | ||
55 | |||
56 | /* Create a new torrent entry, then */ | ||
57 | memcpy( torrent->hash, hash, sizeof(ot_hash) ); | ||
58 | |||
59 | if( !( torrent->peer_list = malloc( sizeof (ot_peerlist) ) ) ) { | ||
60 | vector_remove_torrent( torrents_list, torrent ); | ||
61 | return mutex_bucket_unlock_by_hash( hash, 0 ); | ||
62 | } | ||
63 | |||
64 | byte_zero( torrent->peer_list, sizeof( ot_peerlist ) ); | ||
65 | torrent->peer_list->base = base; | ||
66 | torrent->peer_list->down_count = down_count; | ||
67 | |||
68 | return mutex_bucket_unlock_by_hash( hash, 1 ); | ||
69 | } | ||
70 | |||
44 | size_t add_peer_to_torrent_and_return_peers( ot_hash hash, ot_peer *peer, PROTO_FLAG proto, size_t amount, char * reply ) { | 71 | size_t add_peer_to_torrent_and_return_peers( ot_hash hash, ot_peer *peer, PROTO_FLAG proto, size_t amount, char * reply ) { |
45 | int exactmatch, delta_torrentcount = 0; | 72 | int exactmatch, delta_torrentcount = 0; |
46 | size_t reply_size; | 73 | size_t reply_size; |
@@ -375,7 +402,7 @@ void trackerlogic_init( ) { | |||
375 | void trackerlogic_deinit( void ) { | 402 | void trackerlogic_deinit( void ) { |
376 | int bucket, delta_torrentcount = 0; | 403 | int bucket, delta_torrentcount = 0; |
377 | size_t j; | 404 | size_t j; |
378 | 405 | ||
379 | /* Free all torrents... */ | 406 | /* Free all torrents... */ |
380 | for(bucket=0; bucket<OT_BUCKET_COUNT; ++bucket ) { | 407 | for(bucket=0; bucket<OT_BUCKET_COUNT; ++bucket ) { |
381 | ot_vector *torrents_list = mutex_bucket_lock( bucket ); | 408 | ot_vector *torrents_list = mutex_bucket_lock( bucket ); |