diff options
| -rw-r--r-- | Makefile | 40 | ||||
| -rw-r--r-- | opentracker.c | 23 | ||||
| -rw-r--r-- | scan_urlencoded_query.c | 2 | ||||
| -rw-r--r-- | trackerlogic.c | 19 |
4 files changed, 54 insertions, 30 deletions
| @@ -1,15 +1,37 @@ | |||
| 1 | CC?=gcc | 1 | CC?=gcc |
| 2 | FEATURES=#-DWANT_IP_FROM_QUERY_STRING -DWANT_BLACKLIST -DWANT_CLOSED_TRACKER -D_DEBUG_HTTPERROR | 2 | FEATURES=#-DWANT_IP_FROM_QUERY_STRING -D_DEBUG_HTTPERROR |
| 3 | #DEBUG_OPTS=-g -ggdb -pg # -fprofile-arcs -ftest-coverage | 3 | OPTS_debug=-g -ggdb #-pg # -fprofile-arcs -ftest-coverage |
| 4 | DEBUG_OPTS=-s -Os | 4 | OPTS_production=-s -Os |
| 5 | CFLAGS+=-I../libowfat -Wall -pipe# -pedantic -ansi | 5 | CFLAGS+=-I../libowfat -Wall -pipe -Wextra #-pedantic #-ansi |
| 6 | LDFLAGS+=-L../libowfat/ -lowfat | 6 | LDFLAGS+=-L../libowfat/ -lowfat |
| 7 | 7 | ||
| 8 | BINARY = opentracker | ||
| 8 | HEADERS=trackerlogic.h scan_urlencoded_query.h | 9 | HEADERS=trackerlogic.h scan_urlencoded_query.h |
| 9 | SOURCES=opentracker.c trackerlogic.c scan_urlencoded_query.c | 10 | SOURCES=opentracker.c trackerlogic.c scan_urlencoded_query.c |
| 11 | |||
| 12 | all: $(BINARY) $(BINARY).debug | ||
| 13 | |||
| 14 | CFLAGS_production = $(CFLAGS) $(OPTS_production) $(FEATURES) | ||
| 15 | CFLAGS_debug = $(CFLAGS) $(OPTS_debug) $(FEATURES) | ||
| 16 | |||
| 17 | OBJECTS_debug = $(SOURCES:%.c=%.debug.o) | ||
| 18 | OBJECTS_production = $(SOURCES:%.c=%.production.o) | ||
| 19 | |||
| 20 | $(OBJECTS_debug) $(OBJECTS_production): $(HEADERS) | ||
| 21 | |||
| 22 | %.production.o : CFLAGS := $(CFLAGS_production) | ||
| 23 | %.debug.o : CFLAGS := $(CFLAGS_debug) | ||
| 10 | 24 | ||
| 11 | opentracker: $(SOURCES) $(HEADERS) | 25 | %.production.o : %.c |
| 12 | $(CC) $(SOURCES) -o opentracker $(CFLAGS) $(FEATURES) $(DEBUG_OPTS) $(LDFLAGS) | 26 | $(COMPILE.c) $(OUTPUT_OPTION) $< |
| 27 | %.debug.o : %.c | ||
| 28 | $(COMPILE.c) $(OUTPUT_OPTION) $< | ||
| 13 | 29 | ||
| 14 | clean: | 30 | $(BINARY): $(OBJECTS_production) |
| 15 | rm -rf opentracker | 31 | $(CC) $^ -o $@ $(CFLAGS_production) $(LDFLAGS) |
| 32 | $(BINARY).debug: $(OBJECTS_debug) | ||
| 33 | $(CC) $^ -o $@ $(CFLAGS_debug) $(LDFLAGS) | ||
| 34 | |||
| 35 | clean: | ||
| 36 | rm -rf opentracker *.o *~ | ||
| 37 | |||
diff --git a/opentracker.c b/opentracker.c index f9dc48b..0d4f2b5 100644 --- a/opentracker.c +++ b/opentracker.c | |||
| @@ -154,7 +154,7 @@ static void senddata( const int64 s, char *buffer, size_t size ) { | |||
| 154 | array_reset( &h->request ); | 154 | array_reset( &h->request ); |
| 155 | 155 | ||
| 156 | written_size = write( s, buffer, size ); | 156 | written_size = write( s, buffer, size ); |
| 157 | if( ( written_size < 0 ) || ( written_size == size ) ) { | 157 | if( ( written_size < 0 ) || ( (size_t)written_size == size ) ) { |
| 158 | free( h ); io_close( s ); | 158 | free( h ); io_close( s ); |
| 159 | } else { | 159 | } else { |
| 160 | char * outbuf = malloc( size - written_size ); | 160 | char * outbuf = malloc( size - written_size ); |
| @@ -594,15 +594,15 @@ static void handle_timeouted( void ) { | |||
| 594 | } | 594 | } |
| 595 | 595 | ||
| 596 | static void handle_udp4( int64 serversocket ) { | 596 | static void handle_udp4( int64 serversocket ) { |
| 597 | ot_peer peer; | 597 | ot_peer peer; |
| 598 | ot_torrent *torrent; | 598 | ot_torrent *torrent; |
| 599 | ot_hash *hash = NULL; | 599 | ot_hash *hash = NULL; |
| 600 | char remoteip[4]; | 600 | char remoteip[4]; |
| 601 | unsigned long *inpacket = (unsigned long*)static_inbuf; | 601 | ot_dword *inpacket = (ot_dword*)static_inbuf; |
| 602 | unsigned long *outpacket = (unsigned long*)static_outbuf; | 602 | ot_dword *outpacket = (ot_dword*)static_outbuf; |
| 603 | unsigned long numwant, left, event; | 603 | ot_dword numwant, left, event; |
| 604 | uint16 port, remoteport; | 604 | ot_word port, remoteport; |
| 605 | size_t r, r_out; | 605 | size_t r, r_out; |
| 606 | 606 | ||
| 607 | r = socket_recv4( serversocket, static_inbuf, 8192, remoteip, &remoteport); | 607 | r = socket_recv4( serversocket, static_inbuf, 8192, remoteip, &remoteport); |
| 608 | 608 | ||
| @@ -627,8 +627,9 @@ static void handle_udp4( int64 serversocket ) { | |||
| 627 | numwant = 200; | 627 | numwant = 200; |
| 628 | /* We do only want to know, if it is zero */ | 628 | /* We do only want to know, if it is zero */ |
| 629 | left = inpacket[64/4] | inpacket[68/4]; | 629 | left = inpacket[64/4] | inpacket[68/4]; |
| 630 | |||
| 630 | event = ntohl( inpacket[80/4] ); | 631 | event = ntohl( inpacket[80/4] ); |
| 631 | port = *(unsigned short*)( static_inbuf + 96 ); | 632 | port = *(ot_word*)( static_inbuf + 96 ); |
| 632 | hash = (ot_hash*)( static_inbuf + 16 ); | 633 | hash = (ot_hash*)( static_inbuf + 16 ); |
| 633 | 634 | ||
| 634 | OT_SETIP( &peer, remoteip ); | 635 | OT_SETIP( &peer, remoteip ); |
diff --git a/scan_urlencoded_query.c b/scan_urlencoded_query.c index f9c38ed..296e829 100644 --- a/scan_urlencoded_query.c +++ b/scan_urlencoded_query.c | |||
| @@ -73,7 +73,7 @@ ssize_t scan_fixed_ip( char *data, size_t len, unsigned char ip[4] ) { | |||
| 73 | 73 | ||
| 74 | for( i=0; i<4; ++i ) { | 74 | for( i=0; i<4; ++i ) { |
| 75 | ssize_t j = scan_fixed_int( data, len, &u ); | 75 | ssize_t j = scan_fixed_int( data, len, &u ); |
| 76 | if( j == len ) return len; | 76 | if( j == (ssize_t)len ) return len; |
| 77 | ip[i] = u; | 77 | ip[i] = u; |
| 78 | data += len - j; | 78 | data += len - j; |
| 79 | len = j; | 79 | len = j; |
diff --git a/trackerlogic.c b/trackerlogic.c index 5bda0df..bdf120f 100644 --- a/trackerlogic.c +++ b/trackerlogic.c | |||
| @@ -243,9 +243,9 @@ size_t return_peers_for_torrent( ot_torrent *torrent, size_t amount, char *reply | |||
| 243 | if( is_tcp ) | 243 | if( is_tcp ) |
| 244 | r += sprintf( r, "d8:completei%zde10:incompletei%zde8:intervali%ie5:peers%zd:", seed_count, peer_count-seed_count, OT_CLIENT_REQUEST_INTERVAL_RANDOM, 6*amount ); | 244 | r += sprintf( r, "d8:completei%zde10:incompletei%zde8:intervali%ie5:peers%zd:", seed_count, peer_count-seed_count, OT_CLIENT_REQUEST_INTERVAL_RANDOM, 6*amount ); |
| 245 | else { | 245 | else { |
| 246 | *(unsigned long*)(r+0) = htonl( OT_CLIENT_REQUEST_INTERVAL_RANDOM ); | 246 | *(ot_dword*)(r+0) = htonl( OT_CLIENT_REQUEST_INTERVAL_RANDOM ); |
| 247 | *(unsigned long*)(r+4) = htonl( peer_count ); | 247 | *(ot_dword*)(r+4) = htonl( peer_count ); |
| 248 | *(unsigned long*)(r+8) = htonl( seed_count ); | 248 | *(ot_dword*)(r+8) = htonl( seed_count ); |
| 249 | r += 12; | 249 | r += 12; |
| 250 | } | 250 | } |
| 251 | 251 | ||
| @@ -357,7 +357,7 @@ size_t return_udp_scrape_for_torrent( ot_hash *hash, char *reply ) { | |||
| 357 | if( !exactmatch ) { | 357 | if( !exactmatch ) { |
| 358 | memset( reply, 0, 12); | 358 | memset( reply, 0, 12); |
| 359 | } else { | 359 | } else { |
| 360 | unsigned long *r = (unsigned long*) reply; | 360 | ot_dword *r = (ot_dword*) reply; |
| 361 | 361 | ||
| 362 | for( i=0; i<OT_POOLS_COUNT; ++i ) { | 362 | for( i=0; i<OT_POOLS_COUNT; ++i ) { |
| 363 | peers += torrent->peer_list->peers[i].size; | 363 | peers += torrent->peer_list->peers[i].size; |
| @@ -394,7 +394,7 @@ size_t return_tcp_scrape_for_torrent( ot_hash *hash, char *reply ) { | |||
| 394 | /* Throw away old changeset */ | 394 | /* Throw away old changeset */ |
| 395 | static void release_changeset( void ) { | 395 | static void release_changeset( void ) { |
| 396 | ot_byte **changeset_ptrs = (ot_byte**)(changeset.data); | 396 | ot_byte **changeset_ptrs = (ot_byte**)(changeset.data); |
| 397 | int i; | 397 | size_t i; |
| 398 | 398 | ||
| 399 | for( i = 0; i < changeset.size; ++i ) | 399 | for( i = 0; i < changeset.size; ++i ) |
| 400 | free( changeset_ptrs[i] ); | 400 | free( changeset_ptrs[i] ); |
| @@ -507,7 +507,8 @@ size_t return_changeset_for_tracker( char **reply ) { | |||
| 507 | /* Clean up all torrents, remove timedout pools and | 507 | /* Clean up all torrents, remove timedout pools and |
| 508 | torrents, also prepare new changeset */ | 508 | torrents, also prepare new changeset */ |
| 509 | void clean_all_torrents( void ) { | 509 | void clean_all_torrents( void ) { |
| 510 | int i, j, k; | 510 | int i, k; |
| 511 | size_t j; | ||
| 511 | time_t time_now = NOW; | 512 | time_t time_now = NOW; |
| 512 | size_t peers_count; | 513 | size_t peers_count; |
| 513 | 514 | ||
| @@ -566,7 +567,7 @@ void clean_all_torrents( void ) { | |||
| 566 | } | 567 | } |
| 567 | } | 568 | } |
| 568 | 569 | ||
| 569 | typedef struct { int val; ot_torrent * torrent; } ot_record; | 570 | typedef struct { size_t val; ot_torrent * torrent; } ot_record; |
| 570 | 571 | ||
| 571 | /* Fetches stats from tracker */ | 572 | /* Fetches stats from tracker */ |
| 572 | size_t return_stats_for_tracker( char *reply, int mode ) { | 573 | size_t return_stats_for_tracker( char *reply, int mode ) { |
| @@ -611,11 +612,11 @@ size_t return_stats_for_tracker( char *reply, int mode ) { | |||
| 611 | r += sprintf( r, "Top5 torrents by peers:\n" ); | 612 | r += sprintf( r, "Top5 torrents by peers:\n" ); |
| 612 | for( idx=0; idx<5; ++idx ) | 613 | for( idx=0; idx<5; ++idx ) |
| 613 | if( top5c[idx].torrent ) | 614 | if( top5c[idx].torrent ) |
| 614 | r += sprintf( r, "\t%i\t%s\n", top5c[idx].val, to_hex(top5c[idx].torrent->hash) ); | 615 | r += sprintf( r, "\t%zd\t%s\n", top5c[idx].val, to_hex(top5c[idx].torrent->hash) ); |
| 615 | r += sprintf( r, "Top5 torrents by seeds:\n" ); | 616 | r += sprintf( r, "Top5 torrents by seeds:\n" ); |
| 616 | for( idx=0; idx<5; ++idx ) | 617 | for( idx=0; idx<5; ++idx ) |
| 617 | if( top5s[idx].torrent ) | 618 | if( top5s[idx].torrent ) |
| 618 | r += sprintf( r, "\t%i\t%s\n", top5s[idx].val, to_hex(top5s[idx].torrent->hash) ); | 619 | r += sprintf( r, "\t%zd\t%s\n", top5s[idx].val, to_hex(top5s[idx].torrent->hash) ); |
| 619 | } else { | 620 | } else { |
| 620 | r += sprintf( r, "%zd\n%zd\nopentracker serving %zd torrents\nopentracker", peer_count, seed_count, torrent_count ); | 621 | r += sprintf( r, "%zd\n%zd\nopentracker serving %zd torrents\nopentracker", peer_count, seed_count, torrent_count ); |
| 621 | } | 622 | } |
