summaryrefslogtreecommitdiff
path: root/trackerlogic.c
diff options
context:
space:
mode:
authorerdgeist <>2007-07-22 00:40:10 +0000
committererdgeist <>2007-07-22 00:40:10 +0000
commitc0b00c0bf5b9414f93c76bb6daef9c01e2b49628 (patch)
tree9069c6cefb424cccfc32c44662112e2d68f27cb4 /trackerlogic.c
parent3f0a18ba080c4c72cea714ff216735c9e80ecd90 (diff)
* fixed "nobody " -> "nobody" fuckup when getpwnam-ing
* implemented basic blacklisting: ** the file specified with -b <BLACKLIST> is read and added to a blacklist vector ** if an announce hits a torrent in that blacklist vector, add_peer_to_torrent fails ** sending a SIGHUP to the program forces it to reread the blacklists ** the server returns with a 500, which is not exactly nice but does the job for now ** an adaequat "failure reason:" should be delivered... TODO
Diffstat (limited to 'trackerlogic.c')
-rw-r--r--trackerlogic.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/trackerlogic.c b/trackerlogic.c
index ebfb1f8..98fcef9 100644
--- a/trackerlogic.c
+++ b/trackerlogic.c
@@ -22,6 +22,10 @@
22/* GLOBAL VARIABLES */ 22/* GLOBAL VARIABLES */
23static ot_vector all_torrents[256]; 23static ot_vector all_torrents[256];
24static ot_vector changeset; 24static ot_vector changeset;
25#ifdef WANT_BLACKLISTING
26static ot_vector blacklist;
27#endif
28
25size_t changeset_size = 0; 29size_t changeset_size = 0;
26time_t last_clean_time = 0; 30time_t last_clean_time = 0;
27 31
@@ -155,6 +159,12 @@ ot_torrent *add_peer_to_torrent( ot_hash *hash, ot_peer *peer, int from_changese
155 ot_vector *torrents_list = &all_torrents[*hash[0]], *peer_pool; 159 ot_vector *torrents_list = &all_torrents[*hash[0]], *peer_pool;
156 int base_pool = 0; 160 int base_pool = 0;
157 161
162#ifdef WANT_BLACKLISTING
163 binary_search( hash, blacklist.data, blacklist.size, OT_HASH_COMPARE_SIZE, OT_HASH_COMPARE_SIZE, &exactmatch );
164 if( exactmatch )
165 return NULL;
166#endif
167
158 torrent = vector_find_or_insert( torrents_list, (void*)hash, sizeof( ot_torrent ), OT_HASH_COMPARE_SIZE, &exactmatch ); 168 torrent = vector_find_or_insert( torrents_list, (void*)hash, sizeof( ot_torrent ), OT_HASH_COMPARE_SIZE, &exactmatch );
159 if( !torrent ) return NULL; 169 if( !torrent ) return NULL;
160 170
@@ -672,3 +682,22 @@ void deinit_logic( void ) {
672 byte_zero( &changeset, sizeof( changeset ) ); 682 byte_zero( &changeset, sizeof( changeset ) );
673 changeset_size = 0; 683 changeset_size = 0;
674} 684}
685
686#ifdef WANT_BLACKLISTING
687void blacklist_reset( void ) {
688 free( blacklist.data );
689 byte_zero( &blacklist, sizeof( blacklist ) );
690}
691
692int blacklist_addentry( ot_hash *infohash ) {
693 int em;
694 void *insert = vector_find_or_insert( &blacklist, infohash, OT_HASH_COMPARE_SIZE, OT_HASH_COMPARE_SIZE, &em );
695
696 if( !insert )
697 return -1;
698
699 memmove( insert, infohash, OT_HASH_COMPARE_SIZE );
700
701 return 0;
702}
703#endif