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 | } |